Import Cobalt 8.22891
diff --git a/src/base/third_party/nspr/prcpucfg_starboard.h b/src/base/third_party/nspr/prcpucfg_starboard.h index 3aaa298..2113b0f 100644 --- a/src/base/third_party/nspr/prcpucfg_starboard.h +++ b/src/base/third_party/nspr/prcpucfg_starboard.h
@@ -95,6 +95,7 @@ #define PR_BYTES_PER_WORD_LOG2 2 #define PR_BYTES_PER_DWORD_LOG2 3 + #elif SB_IS(ARCH_X86) && SB_IS(64_BIT) #define PR_BYTES_PER_BYTE 1 #define PR_BYTES_PER_SHORT 2 @@ -135,6 +136,7 @@ #define PR_BYTES_PER_WORD_LOG2 3 #define PR_BYTES_PER_DWORD_LOG2 3 + #elif SB_IS(ARCH_X86) && SB_IS(32_BIT) #define PR_BYTES_PER_BYTE 1 #define PR_BYTES_PER_SHORT 2 @@ -175,6 +177,7 @@ #define PR_BYTES_PER_WORD_LOG2 2 #define PR_BYTES_PER_DWORD_LOG2 3 + #elif SB_IS(ARCH_MIPS) && SB_IS(32_BIT) #define PR_BYTES_PER_BYTE 1 #define PR_BYTES_PER_SHORT 2 @@ -215,6 +218,7 @@ #define PR_BYTES_PER_WORD_LOG2 2 #define PR_BYTES_PER_DWORD_LOG2 3 + #elif SB_IS(ARCH_ARM) && SB_IS(32_BIT) #define PR_BYTES_PER_BYTE 1 #define PR_BYTES_PER_SHORT 2 @@ -255,6 +259,48 @@ #define PR_BYTES_PER_WORD_LOG2 2 #define PR_BYTES_PER_DWORD_LOG2 3 + +#elif SB_IS(ARCH_ARM) && SB_IS(64_BIT) +#define PR_BYTES_PER_BYTE 1 +#define PR_BYTES_PER_SHORT 2 +#define PR_BYTES_PER_INT 4 +#define PR_BYTES_PER_INT64 8 +#define PR_BYTES_PER_LONG 8 +#define PR_BYTES_PER_FLOAT 4 +#define PR_BYTES_PER_DOUBLE 8 +#define PR_BYTES_PER_WORD 8 +#define PR_BYTES_PER_DWORD 8 + +#define PR_BITS_PER_BYTE 8 +#define PR_BITS_PER_SHORT 16 +#define PR_BITS_PER_INT 32 +#define PR_BITS_PER_INT64 64 +#define PR_BITS_PER_LONG 64 +#define PR_BITS_PER_FLOAT 32 +#define PR_BITS_PER_DOUBLE 64 +#define PR_BITS_PER_WORD 64 + +#define PR_BITS_PER_BYTE_LOG2 3 +#define PR_BITS_PER_SHORT_LOG2 4 +#define PR_BITS_PER_INT_LOG2 5 +#define PR_BITS_PER_INT64_LOG2 6 +#define PR_BITS_PER_LONG_LOG2 6 +#define PR_BITS_PER_FLOAT_LOG2 5 +#define PR_BITS_PER_DOUBLE_LOG2 6 +#define PR_BITS_PER_WORD_LOG2 6 + +#define PR_ALIGN_OF_SHORT 2 +#define PR_ALIGN_OF_INT 4 +#define PR_ALIGN_OF_LONG 4 +#define PR_ALIGN_OF_INT64 4 +#define PR_ALIGN_OF_FLOAT 4 +#define PR_ALIGN_OF_DOUBLE 4 +#define PR_ALIGN_OF_POINTER 4 +#define PR_ALIGN_OF_WORD 4 + +#define PR_BYTES_PER_WORD_LOG2 3 +#define PR_BYTES_PER_DWORD_LOG2 3 + #else # error "No configuration definition for Starboard ARCH + BITS." #endif
diff --git a/src/cobalt/base/tokens.h b/src/cobalt/base/tokens.h index 5c42945..3ae1cdc 100644 --- a/src/cobalt/base/tokens.h +++ b/src/cobalt/base/tokens.h
@@ -31,9 +31,12 @@ MacroOpWithNameOnly(all) \ MacroOpWithNameOnly(animationend) \ MacroOpWithNameOnly(assertive) \ + MacroOpWithNameOnly(attribute) \ MacroOpWithNameOnly(blur) \ MacroOpWithNameOnly(canplay) \ MacroOpWithNameOnly(canplaythrough) \ + MacroOpWithNameOnly(characterData) \ + MacroOpWithNameOnly(childList) \ MacroOpWithNameOnly(close) \ MacroOpWithNameOnly(durationchange) \ MacroOpWithNameOnly(emptied) \
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc deleted file mode 100644 index 7f862f5..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc +++ /dev/null
@@ -1,860 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCAnonymousIndexedGetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::AnonymousIndexedGetterInterface; -using cobalt::bindings::testing::JSCAnonymousIndexedGetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index); -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCAnonymousIndexedGetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCAnonymousIndexedGetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCAnonymousIndexedGetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousIndexedGetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCAnonymousIndexedGetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousIndexedGetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCAnonymousIndexedGetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousIndexedGetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCAnonymousIndexedGetterInterface::InterfaceObject::s_info = { - "AnonymousIndexedGetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousIndexedGetterInterface::InterfaceObject) -}; // JSCAnonymousIndexedGetterInterface::InterfaceObject::s_info - -void JSCAnonymousIndexedGetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCAnonymousIndexedGetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCAnonymousIndexedGetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "AnonymousIndexedGetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCAnonymousIndexedGetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCAnonymousIndexedGetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCAnonymousIndexedGetterInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCAnonymousIndexedGetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousIndexedGetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCAnonymousIndexedGetterInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousIndexedGetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCAnonymousIndexedGetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousIndexedGetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCAnonymousIndexedGetterInterface::Prototype::s_info = { - "AnonymousIndexedGetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousIndexedGetterInterface::Prototype) -}; // JSCAnonymousIndexedGetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCAnonymousIndexedGetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCAnonymousIndexedGetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCAnonymousIndexedGetterInterface::Prototype class - -const JSC::HashTableValue JSCAnonymousIndexedGetterInterface::property_table_values[] = { - { "length", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSlength), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousIndexedGetterInterface::property_table_values - -// static -const JSC::HashTable JSCAnonymousIndexedGetterInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousIndexedGetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCAnonymousIndexedGetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousIndexedGetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCAnonymousIndexedGetterInterface::NonTrivialStaticFields> - JSCAnonymousIndexedGetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCAnonymousIndexedGetterInterface::s_info = { - "AnonymousIndexedGetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousIndexedGetterInterface) -}; // JSCAnonymousIndexedGetterInterface::s_info - -// static -JSC::JSObject* JSCAnonymousIndexedGetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCAnonymousIndexedGetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCAnonymousIndexedGetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCAnonymousIndexedGetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == AnonymousIndexedGetterInterface::AnonymousIndexedGetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match AnonymousIndexedGetterInterface::AnonymousIndexedGetterInterfaceWrappableType()"; - return NULL; - } - AnonymousIndexedGetterInterface* impl_ptr = - base::polymorphic_downcast<AnonymousIndexedGetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCAnonymousIndexedGetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCAnonymousIndexedGetterInterface>(global_data.heap)) - JSCAnonymousIndexedGetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCAnonymousIndexedGetterInterface::JSCAnonymousIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<AnonymousIndexedGetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCAnonymousIndexedGetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCAnonymousIndexedGetterInterface::~JSCAnonymousIndexedGetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCAnonymousIndexedGetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCAnonymousIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCAnonymousIndexedGetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCAnonymousIndexedGetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (index < impl->length()) { - slot.setCustomIndex(cell, index, IndexedPropertyGetter); - return true; - } - if (s_has_named_getter) { - JSCAnonymousIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousIndexedGetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCAnonymousIndexedGetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, object); - if (impl) { - for (uint32 i = 0; i < impl->length(); ++i) { - property_names.add(JSC::Identifier::from(exec_state, i)); - } - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCAnonymousIndexedGetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCAnonymousIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCAnonymousIndexedGetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCAnonymousIndexedGetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (index < impl->length()) { - IndexedPropertySetter(cell, exec_state, index, value); - property_handled = true; - } - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCAnonymousIndexedGetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCAnonymousIndexedGetterInterface", "deletePropertyByIndex"); - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, cell); - if (impl) { - // https://heycam.github.io/webidl/#delete - // Return true if index is not a supported property index. - return index >= impl->length(); - } - return false; -} - -bool JSCAnonymousIndexedGetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCAnonymousIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousIndexedGetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCAnonymousIndexedGetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCAnonymousIndexedGetterInterface", "get length"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->length()); - return result; -} - -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index) { - TRACE_EVENT0("JSCAnonymousIndexedGetterInterface", "IndexedPropertyGetter"); - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSValue result = ToJSValue( - global_object, - impl->AnonymousIndexedGetter(index)); - return result; -} - -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCAnonymousIndexedGetterInterface", "IndexedPropertySetter"); - AnonymousIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - uint32_t value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->AnonymousIndexedSetter(index, value); -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.h deleted file mode 100644 index db0c679..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.h +++ /dev/null
@@ -1,144 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCAnonymousIndexedGetterInterface_h -#define JSCAnonymousIndexedGetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/anonymous_indexed_getter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCAnonymousIndexedGetterInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to AnonymousIndexedGetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCAnonymousIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<AnonymousIndexedGetterInterface>& impl); - ~JSCAnonymousIndexedGetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCAnonymousIndexedGetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc deleted file mode 100644 index 5944536..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc +++ /dev/null
@@ -1,844 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCAnonymousNamedGetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_property_enumerator.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::AnonymousNamedGetterInterface; -using cobalt::bindings::testing::JSCAnonymousNamedGetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = true; -const bool s_has_named_setter = true; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCAnonymousNamedGetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCAnonymousNamedGetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCAnonymousNamedGetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousNamedGetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCAnonymousNamedGetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousNamedGetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCAnonymousNamedGetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousNamedGetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCAnonymousNamedGetterInterface::InterfaceObject::s_info = { - "AnonymousNamedGetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousNamedGetterInterface::InterfaceObject) -}; // JSCAnonymousNamedGetterInterface::InterfaceObject::s_info - -void JSCAnonymousNamedGetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCAnonymousNamedGetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCAnonymousNamedGetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "AnonymousNamedGetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCAnonymousNamedGetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCAnonymousNamedGetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCAnonymousNamedGetterInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCAnonymousNamedGetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousNamedGetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCAnonymousNamedGetterInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousNamedGetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCAnonymousNamedGetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousNamedGetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCAnonymousNamedGetterInterface::Prototype::s_info = { - "AnonymousNamedGetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousNamedGetterInterface::Prototype) -}; // JSCAnonymousNamedGetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCAnonymousNamedGetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCAnonymousNamedGetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCAnonymousNamedGetterInterface::Prototype class - -const JSC::HashTableValue JSCAnonymousNamedGetterInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousNamedGetterInterface::property_table_values - -// static -const JSC::HashTable JSCAnonymousNamedGetterInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousNamedGetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCAnonymousNamedGetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousNamedGetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCAnonymousNamedGetterInterface::NonTrivialStaticFields> - JSCAnonymousNamedGetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCAnonymousNamedGetterInterface::s_info = { - "AnonymousNamedGetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousNamedGetterInterface) -}; // JSCAnonymousNamedGetterInterface::s_info - -// static -JSC::JSObject* JSCAnonymousNamedGetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCAnonymousNamedGetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCAnonymousNamedGetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCAnonymousNamedGetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == AnonymousNamedGetterInterface::AnonymousNamedGetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match AnonymousNamedGetterInterface::AnonymousNamedGetterInterfaceWrappableType()"; - return NULL; - } - AnonymousNamedGetterInterface* impl_ptr = - base::polymorphic_downcast<AnonymousNamedGetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCAnonymousNamedGetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCAnonymousNamedGetterInterface>(global_data.heap)) - JSCAnonymousNamedGetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCAnonymousNamedGetterInterface::JSCAnonymousNamedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<AnonymousNamedGetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCAnonymousNamedGetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCAnonymousNamedGetterInterface::~JSCAnonymousNamedGetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCAnonymousNamedGetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCAnonymousNamedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCAnonymousNamedGetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCAnonymousNamedGetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (s_has_named_getter) { - JSCAnonymousNamedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedGetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCAnonymousNamedGetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, object); - if (impl) { - JSCPropertyEnumerator enumerator(exec_state, &property_names); - impl->EnumerateNamedProperties(&enumerator); - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCAnonymousNamedGetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCAnonymousNamedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCAnonymousNamedGetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCAnonymousNamedGetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCAnonymousNamedGetterInterface::deleteProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - TRACE_EVENT1("JSCAnonymousNamedGetterInterface", "deleteProperty", "property", - TRACE_STR_COPY(WTF::String(property_name.publicName()).utf8().data())); - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, cell); - if (impl) { - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deleteProperty(cell, exec_state, property_name); - } - return false; -} - -bool JSCAnonymousNamedGetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCAnonymousNamedGetterInterface", "deletePropertyByIndex"); - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, cell); - if (impl) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deletePropertyByIndex(cell, exec_state, index); - } - return false; -} - -bool JSCAnonymousNamedGetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCAnonymousNamedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedGetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCAnonymousNamedGetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - TRACE_EVENT0("JSCAnonymousNamedGetterInterface", "NamedPropertyGetter"); - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - JSC::JSValue result = ToJSValue( - global_object, - impl->AnonymousNamedGetter(property_name_utf8)); - return result; -} - -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - return impl->CanQueryNamedProperty(property_name_utf8); -} - -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCAnonymousNamedGetterInterface", "NamedPropertySetter"); - AnonymousNamedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - std::string value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->AnonymousNamedSetter(property_name_utf8, value); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.h deleted file mode 100644 index 53742d8..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.h +++ /dev/null
@@ -1,146 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCAnonymousNamedGetterInterface_h -#define JSCAnonymousNamedGetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/anonymous_named_getter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCAnonymousNamedGetterInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to AnonymousNamedGetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCAnonymousNamedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<AnonymousNamedGetterInterface>& impl); - ~JSCAnonymousNamedGetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCAnonymousNamedGetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc deleted file mode 100644 index 807e02d..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc +++ /dev/null
@@ -1,923 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCAnonymousNamedIndexedGetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_property_enumerator.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::AnonymousNamedIndexedGetterInterface; -using cobalt::bindings::testing::JSCAnonymousNamedIndexedGetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index); -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = true; -const bool s_has_named_setter = true; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCAnonymousNamedIndexedGetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCAnonymousNamedIndexedGetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::s_info = { - "AnonymousNamedIndexedGetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousNamedIndexedGetterInterface::InterfaceObject) -}; // JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::s_info - -void JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCAnonymousNamedIndexedGetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCAnonymousNamedIndexedGetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "AnonymousNamedIndexedGetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCAnonymousNamedIndexedGetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCAnonymousNamedIndexedGetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCAnonymousNamedIndexedGetterInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCAnonymousNamedIndexedGetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousNamedIndexedGetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCAnonymousNamedIndexedGetterInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousNamedIndexedGetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCAnonymousNamedIndexedGetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousNamedIndexedGetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCAnonymousNamedIndexedGetterInterface::Prototype::s_info = { - "AnonymousNamedIndexedGetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousNamedIndexedGetterInterface::Prototype) -}; // JSCAnonymousNamedIndexedGetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCAnonymousNamedIndexedGetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCAnonymousNamedIndexedGetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCAnonymousNamedIndexedGetterInterface::Prototype class - -const JSC::HashTableValue JSCAnonymousNamedIndexedGetterInterface::property_table_values[] = { - { "length", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSlength), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCAnonymousNamedIndexedGetterInterface::property_table_values - -// static -const JSC::HashTable JSCAnonymousNamedIndexedGetterInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCAnonymousNamedIndexedGetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCAnonymousNamedIndexedGetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCAnonymousNamedIndexedGetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCAnonymousNamedIndexedGetterInterface::NonTrivialStaticFields> - JSCAnonymousNamedIndexedGetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCAnonymousNamedIndexedGetterInterface::s_info = { - "AnonymousNamedIndexedGetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCAnonymousNamedIndexedGetterInterface) -}; // JSCAnonymousNamedIndexedGetterInterface::s_info - -// static -JSC::JSObject* JSCAnonymousNamedIndexedGetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCAnonymousNamedIndexedGetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCAnonymousNamedIndexedGetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCAnonymousNamedIndexedGetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == AnonymousNamedIndexedGetterInterface::AnonymousNamedIndexedGetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match AnonymousNamedIndexedGetterInterface::AnonymousNamedIndexedGetterInterfaceWrappableType()"; - return NULL; - } - AnonymousNamedIndexedGetterInterface* impl_ptr = - base::polymorphic_downcast<AnonymousNamedIndexedGetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCAnonymousNamedIndexedGetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCAnonymousNamedIndexedGetterInterface>(global_data.heap)) - JSCAnonymousNamedIndexedGetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCAnonymousNamedIndexedGetterInterface::JSCAnonymousNamedIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<AnonymousNamedIndexedGetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCAnonymousNamedIndexedGetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCAnonymousNamedIndexedGetterInterface::~JSCAnonymousNamedIndexedGetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCAnonymousNamedIndexedGetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCAnonymousNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCAnonymousNamedIndexedGetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCAnonymousNamedIndexedGetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (index < impl->length()) { - slot.setCustomIndex(cell, index, IndexedPropertyGetter); - return true; - } - if (s_has_named_getter) { - JSCAnonymousNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedIndexedGetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCAnonymousNamedIndexedGetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, object); - if (impl) { - for (uint32 i = 0; i < impl->length(); ++i) { - property_names.add(JSC::Identifier::from(exec_state, i)); - } - JSCPropertyEnumerator enumerator(exec_state, &property_names); - impl->EnumerateNamedProperties(&enumerator); - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCAnonymousNamedIndexedGetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCAnonymousNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCAnonymousNamedIndexedGetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCAnonymousNamedIndexedGetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (index < impl->length()) { - IndexedPropertySetter(cell, exec_state, index, value); - property_handled = true; - } - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCAnonymousNamedIndexedGetterInterface::deleteProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - TRACE_EVENT1("JSCAnonymousNamedIndexedGetterInterface", "deleteProperty", "property", - TRACE_STR_COPY(WTF::String(property_name.publicName()).utf8().data())); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (impl) { - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deleteProperty(cell, exec_state, property_name); - } - return false; -} - -bool JSCAnonymousNamedIndexedGetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCAnonymousNamedIndexedGetterInterface", "deletePropertyByIndex"); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (impl) { - // https://heycam.github.io/webidl/#delete - // Return true if index is not a supported property index. - return index >= impl->length(); - } - return false; -} - -bool JSCAnonymousNamedIndexedGetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCAnonymousNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCAnonymousNamedIndexedGetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCAnonymousNamedIndexedGetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCAnonymousNamedIndexedGetterInterface", "get length"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->length()); - return result; -} - -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index) { - TRACE_EVENT0("JSCAnonymousNamedIndexedGetterInterface", "IndexedPropertyGetter"); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSValue result = ToJSValue( - global_object, - impl->AnonymousIndexedGetter(index)); - return result; -} - -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCAnonymousNamedIndexedGetterInterface", "IndexedPropertySetter"); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - uint32_t value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->AnonymousIndexedSetter(index, value); -} - -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - TRACE_EVENT0("JSCAnonymousNamedIndexedGetterInterface", "NamedPropertyGetter"); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - JSC::JSValue result = ToJSValue( - global_object, - impl->AnonymousNamedGetter(property_name_utf8)); - return result; -} - -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - return impl->CanQueryNamedProperty(property_name_utf8); -} - -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCAnonymousNamedIndexedGetterInterface", "NamedPropertySetter"); - AnonymousNamedIndexedGetterInterface* impl = - GetWrappableOrSetException<AnonymousNamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - std::string value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->AnonymousNamedSetter(property_name_utf8, value); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.h deleted file mode 100644 index 7aff3ee..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.h +++ /dev/null
@@ -1,146 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCAnonymousNamedIndexedGetterInterface_h -#define JSCAnonymousNamedIndexedGetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/anonymous_named_indexed_getter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCAnonymousNamedIndexedGetterInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to AnonymousNamedIndexedGetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCAnonymousNamedIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<AnonymousNamedIndexedGetterInterface>& impl); - ~JSCAnonymousNamedIndexedGetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCAnonymousNamedIndexedGetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc deleted file mode 100644 index 6ad9df6..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc +++ /dev/null
@@ -1,792 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCArbitraryInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSarbitraryProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSarbitraryProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue constructorJSArbitraryInterface(JSC::ExecState*); -JSC::EncodedJSValue functionJSarbitraryFunction(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCArbitraryInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCArbitraryInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCArbitraryInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCArbitraryInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCArbitraryInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCArbitraryInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCArbitraryInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCArbitraryInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCArbitraryInterface::InterfaceObject::s_info = { - "ArbitraryInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCArbitraryInterface::InterfaceObject) -}; // JSCArbitraryInterface::InterfaceObject::s_info - -void JSCArbitraryInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCArbitraryInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCArbitraryInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSArbitraryInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ArbitraryInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCArbitraryInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCArbitraryInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCArbitraryInterface::Prototype::property_table_values[] = { - { "arbitraryFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSarbitraryFunction), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCArbitraryInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCArbitraryInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCArbitraryInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCArbitraryInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCArbitraryInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCArbitraryInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCArbitraryInterface::Prototype::s_info = { - "ArbitraryInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCArbitraryInterface::Prototype) -}; // JSCArbitraryInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCArbitraryInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCArbitraryInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCArbitraryInterface::Prototype class - -const JSC::HashTableValue JSCArbitraryInterface::property_table_values[] = { - { "arbitraryProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSarbitraryProperty), - reinterpret_cast<intptr_t>(setJSarbitraryProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCArbitraryInterface::property_table_values - -// static -const JSC::HashTable JSCArbitraryInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCArbitraryInterface::property_table_prototype - -// static -const JSC::HashTable* JSCArbitraryInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCArbitraryInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCArbitraryInterface::NonTrivialStaticFields> - JSCArbitraryInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCArbitraryInterface::s_info = { - "ArbitraryInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCArbitraryInterface) -}; // JSCArbitraryInterface::s_info - -// static -JSC::JSObject* JSCArbitraryInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCArbitraryInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCArbitraryInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCArbitraryInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ArbitraryInterface::ArbitraryInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ArbitraryInterface::ArbitraryInterfaceWrappableType()"; - return NULL; - } - ArbitraryInterface* impl_ptr = - base::polymorphic_downcast<ArbitraryInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCArbitraryInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCArbitraryInterface>(global_data.heap)) - JSCArbitraryInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCArbitraryInterface::JSCArbitraryInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ArbitraryInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCArbitraryInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCArbitraryInterface::~JSCArbitraryInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCArbitraryInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCArbitraryInterface* this_object = JSC::jsCast<JSCArbitraryInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCArbitraryInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCArbitraryInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCArbitraryInterface* this_object = JSC::jsCast<JSCArbitraryInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCArbitraryInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCArbitraryInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCArbitraryInterface* this_object = JSC::jsCast<JSCArbitraryInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCArbitraryInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSarbitraryProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCArbitraryInterface", "get arbitraryProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ArbitraryInterface* impl = - GetWrappableOrSetException<ArbitraryInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->arbitrary_property()); - return result; -} - -void setJSarbitraryProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCArbitraryInterface", "set arbitraryProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ArbitraryInterface* impl = - GetWrappableOrSetException<ArbitraryInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_arbitrary_property(cobalt_value); - } -} - -JSC::EncodedJSValue constructorJSArbitraryInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<ArbitraryInterface> new_object = - new ArbitraryInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} - -JSC::EncodedJSValue functionJSarbitraryFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCArbitraryInterface", "call arbitraryFunction"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - ArbitraryInterface* impl = - GetWrappableOrSetException<ArbitraryInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->ArbitraryFunction(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.h deleted file mode 100644 index 0ea203b..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCArbitraryInterface_h -#define JSCArbitraryInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCArbitraryInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ArbitraryInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCArbitraryInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ArbitraryInterface>& impl); - ~JSCArbitraryInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCArbitraryInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc deleted file mode 100644 index 0af6ea5..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc +++ /dev/null
@@ -1,761 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCBaseInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::BaseInterface; -using cobalt::bindings::testing::JSCBaseInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSbaseAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::EncodedJSValue constructorJSBaseInterface(JSC::ExecState*); -JSC::EncodedJSValue functionJSbaseOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCBaseInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCBaseInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCBaseInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCBaseInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCBaseInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCBaseInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCBaseInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCBaseInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCBaseInterface::InterfaceObject::s_info = { - "BaseInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCBaseInterface::InterfaceObject) -}; // JSCBaseInterface::InterfaceObject::s_info - -void JSCBaseInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCBaseInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCBaseInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSBaseInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "BaseInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCBaseInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCBaseInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCBaseInterface::Prototype::property_table_values[] = { - { "baseOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSbaseOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCBaseInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCBaseInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCBaseInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCBaseInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCBaseInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCBaseInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCBaseInterface::Prototype::s_info = { - "BaseInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCBaseInterface::Prototype) -}; // JSCBaseInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCBaseInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCBaseInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCBaseInterface::Prototype class - -const JSC::HashTableValue JSCBaseInterface::property_table_values[] = { - { "baseAttribute", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSbaseAttribute), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCBaseInterface::property_table_values - -// static -const JSC::HashTable JSCBaseInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCBaseInterface::property_table_prototype - -// static -const JSC::HashTable* JSCBaseInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCBaseInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCBaseInterface::NonTrivialStaticFields> - JSCBaseInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCBaseInterface::s_info = { - "BaseInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCBaseInterface) -}; // JSCBaseInterface::s_info - -// static -JSC::JSObject* JSCBaseInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCBaseInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCBaseInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCBaseInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == BaseInterface::BaseInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match BaseInterface::BaseInterfaceWrappableType()"; - return NULL; - } - BaseInterface* impl_ptr = - base::polymorphic_downcast<BaseInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCBaseInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCBaseInterface>(global_data.heap)) - JSCBaseInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCBaseInterface::JSCBaseInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<BaseInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCBaseInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCBaseInterface::~JSCBaseInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCBaseInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCBaseInterface* this_object = JSC::jsCast<JSCBaseInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCBaseInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCBaseInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCBaseInterface* this_object = JSC::jsCast<JSCBaseInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCBaseInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCBaseInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCBaseInterface* this_object = JSC::jsCast<JSCBaseInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCBaseInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSbaseAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCBaseInterface", "get baseAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - BaseInterface* impl = - GetWrappableOrSetException<BaseInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->base_attribute()); - return result; -} - -JSC::EncodedJSValue constructorJSBaseInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<BaseInterface> new_object = - new BaseInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} - -JSC::EncodedJSValue functionJSbaseOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCBaseInterface", "call baseOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - BaseInterface* impl = - GetWrappableOrSetException<BaseInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->BaseOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.h deleted file mode 100644 index dfdf90a..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCBaseInterface_h -#define JSCBaseInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/base_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCBaseInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to BaseInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCBaseInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<BaseInterface>& impl); - ~JSCBaseInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCBaseInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc deleted file mode 100644 index 23b1192..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc +++ /dev/null
@@ -1,830 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCBooleanTypeTestInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::BooleanTypeTestInterface; -using cobalt::bindings::testing::JSCBooleanTypeTestInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSbooleanProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSbooleanProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSbooleanArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSbooleanReturnOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCBooleanTypeTestInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCBooleanTypeTestInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCBooleanTypeTestInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCBooleanTypeTestInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCBooleanTypeTestInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCBooleanTypeTestInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCBooleanTypeTestInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCBooleanTypeTestInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCBooleanTypeTestInterface::InterfaceObject::s_info = { - "BooleanTypeTestInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCBooleanTypeTestInterface::InterfaceObject) -}; // JSCBooleanTypeTestInterface::InterfaceObject::s_info - -void JSCBooleanTypeTestInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCBooleanTypeTestInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCBooleanTypeTestInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "BooleanTypeTestInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCBooleanTypeTestInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCBooleanTypeTestInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCBooleanTypeTestInterface::Prototype::property_table_values[] = { - { "booleanArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSbooleanArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "booleanReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSbooleanReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCBooleanTypeTestInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCBooleanTypeTestInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCBooleanTypeTestInterface::Prototype::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCBooleanTypeTestInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCBooleanTypeTestInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCBooleanTypeTestInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCBooleanTypeTestInterface::Prototype::s_info = { - "BooleanTypeTestInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCBooleanTypeTestInterface::Prototype) -}; // JSCBooleanTypeTestInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCBooleanTypeTestInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCBooleanTypeTestInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCBooleanTypeTestInterface::Prototype class - -const JSC::HashTableValue JSCBooleanTypeTestInterface::property_table_values[] = { - { "booleanProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSbooleanProperty), - reinterpret_cast<intptr_t>(setJSbooleanProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCBooleanTypeTestInterface::property_table_values - -// static -const JSC::HashTable JSCBooleanTypeTestInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCBooleanTypeTestInterface::property_table_prototype - -// static -const JSC::HashTable* JSCBooleanTypeTestInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCBooleanTypeTestInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCBooleanTypeTestInterface::NonTrivialStaticFields> - JSCBooleanTypeTestInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCBooleanTypeTestInterface::s_info = { - "BooleanTypeTestInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCBooleanTypeTestInterface) -}; // JSCBooleanTypeTestInterface::s_info - -// static -JSC::JSObject* JSCBooleanTypeTestInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCBooleanTypeTestInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCBooleanTypeTestInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCBooleanTypeTestInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == BooleanTypeTestInterface::BooleanTypeTestInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match BooleanTypeTestInterface::BooleanTypeTestInterfaceWrappableType()"; - return NULL; - } - BooleanTypeTestInterface* impl_ptr = - base::polymorphic_downcast<BooleanTypeTestInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCBooleanTypeTestInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCBooleanTypeTestInterface>(global_data.heap)) - JSCBooleanTypeTestInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCBooleanTypeTestInterface::JSCBooleanTypeTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<BooleanTypeTestInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCBooleanTypeTestInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCBooleanTypeTestInterface::~JSCBooleanTypeTestInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCBooleanTypeTestInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCBooleanTypeTestInterface* this_object = JSC::jsCast<JSCBooleanTypeTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCBooleanTypeTestInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCBooleanTypeTestInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCBooleanTypeTestInterface* this_object = JSC::jsCast<JSCBooleanTypeTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCBooleanTypeTestInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCBooleanTypeTestInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCBooleanTypeTestInterface* this_object = JSC::jsCast<JSCBooleanTypeTestInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCBooleanTypeTestInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSbooleanProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCBooleanTypeTestInterface", "get booleanProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - BooleanTypeTestInterface* impl = - GetWrappableOrSetException<BooleanTypeTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->boolean_property()); - return result; -} - -void setJSbooleanProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCBooleanTypeTestInterface", "set booleanProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - BooleanTypeTestInterface* impl = - GetWrappableOrSetException<BooleanTypeTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<bool >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_boolean_property(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSbooleanArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCBooleanTypeTestInterface", "call booleanArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - BooleanTypeTestInterface* impl = - GetWrappableOrSetException<BooleanTypeTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<bool >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->BooleanArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSbooleanReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCBooleanTypeTestInterface", "call booleanReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - BooleanTypeTestInterface* impl = - GetWrappableOrSetException<BooleanTypeTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<bool >::ReturnType return_value = impl->BooleanReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.h deleted file mode 100644 index 86a52fe..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCBooleanTypeTestInterface_h -#define JSCBooleanTypeTestInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/boolean_type_test_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCBooleanTypeTestInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to BooleanTypeTestInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCBooleanTypeTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<BooleanTypeTestInterface>& impl); - ~JSCBooleanTypeTestInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCBooleanTypeTestInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc deleted file mode 100644 index e80158a..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc +++ /dev/null
@@ -1,1032 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCCallbackFunctionInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::CallbackFunctionInterface; -using cobalt::bindings::testing::JSCCallbackFunctionInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJScallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJScallbackAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSnullableCallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableCallbackAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJStakesFunctionThatReturnsString(JSC::ExecState*); -JSC::EncodedJSValue functionJStakesFunctionWithNullableParameters(JSC::ExecState*); -JSC::EncodedJSValue functionJStakesFunctionWithOneParameter(JSC::ExecState*); -JSC::EncodedJSValue functionJStakesFunctionWithSeveralParameters(JSC::ExecState*); -JSC::EncodedJSValue functionJStakesVoidFunction(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCCallbackFunctionInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCCallbackFunctionInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCCallbackFunctionInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCCallbackFunctionInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCCallbackFunctionInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCCallbackFunctionInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCCallbackFunctionInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCCallbackFunctionInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCCallbackFunctionInterface::InterfaceObject::s_info = { - "CallbackFunctionInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCCallbackFunctionInterface::InterfaceObject) -}; // JSCCallbackFunctionInterface::InterfaceObject::s_info - -void JSCCallbackFunctionInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCCallbackFunctionInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCCallbackFunctionInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "CallbackFunctionInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCCallbackFunctionInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCCallbackFunctionInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCCallbackFunctionInterface::Prototype::property_table_values[] = { - { "takesFunctionThatReturnsString", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJStakesFunctionThatReturnsString), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "takesFunctionWithNullableParameters", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJStakesFunctionWithNullableParameters), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "takesFunctionWithOneParameter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJStakesFunctionWithOneParameter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "takesFunctionWithSeveralParameters", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJStakesFunctionWithSeveralParameters), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "takesVoidFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJStakesVoidFunction), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCCallbackFunctionInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCCallbackFunctionInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCCallbackFunctionInterface::Prototype::property_table_prototype = { - 21, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCCallbackFunctionInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCCallbackFunctionInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCCallbackFunctionInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCCallbackFunctionInterface::Prototype::s_info = { - "CallbackFunctionInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCCallbackFunctionInterface::Prototype) -}; // JSCCallbackFunctionInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCCallbackFunctionInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCCallbackFunctionInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCCallbackFunctionInterface::Prototype class - -const JSC::HashTableValue JSCCallbackFunctionInterface::property_table_values[] = { - { "callbackAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJScallbackAttribute), - reinterpret_cast<intptr_t>(setJScallbackAttribute), - JSC::NoIntrinsic - }, - { "nullableCallbackAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableCallbackAttribute), - reinterpret_cast<intptr_t>(setJSnullableCallbackAttribute), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCCallbackFunctionInterface::property_table_values - -// static -const JSC::HashTable JSCCallbackFunctionInterface::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCCallbackFunctionInterface::property_table_prototype - -// static -const JSC::HashTable* JSCCallbackFunctionInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCCallbackFunctionInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCCallbackFunctionInterface::NonTrivialStaticFields> - JSCCallbackFunctionInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCCallbackFunctionInterface::s_info = { - "CallbackFunctionInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCCallbackFunctionInterface) -}; // JSCCallbackFunctionInterface::s_info - -// static -JSC::JSObject* JSCCallbackFunctionInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCCallbackFunctionInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCCallbackFunctionInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCCallbackFunctionInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == CallbackFunctionInterface::CallbackFunctionInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match CallbackFunctionInterface::CallbackFunctionInterfaceWrappableType()"; - return NULL; - } - CallbackFunctionInterface* impl_ptr = - base::polymorphic_downcast<CallbackFunctionInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCCallbackFunctionInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCCallbackFunctionInterface>(global_data.heap)) - JSCCallbackFunctionInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCCallbackFunctionInterface::JSCCallbackFunctionInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<CallbackFunctionInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCCallbackFunctionInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCCallbackFunctionInterface::~JSCCallbackFunctionInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCCallbackFunctionInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCCallbackFunctionInterface* this_object = JSC::jsCast<JSCCallbackFunctionInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCCallbackFunctionInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCCallbackFunctionInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCCallbackFunctionInterface* this_object = JSC::jsCast<JSCCallbackFunctionInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCCallbackFunctionInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCCallbackFunctionInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCCallbackFunctionInterface* this_object = JSC::jsCast<JSCCallbackFunctionInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCCallbackFunctionInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJScallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "get callbackAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->callback_attribute()); - return result; -} - -void setJScallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "set callbackAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<CallbackFunctionInterface::VoidFunction >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_callback_attribute(cobalt_value); - } -} - -JSC::JSValue getJSnullableCallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "get nullableCallbackAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_callback_attribute()); - return result; -} - -void setJSnullableCallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "set nullableCallbackAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<CallbackFunctionInterface::VoidFunction >::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_nullable_callback_attribute(cobalt_value); - } -} - -JSC::EncodedJSValue functionJStakesFunctionThatReturnsString( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "call takesFunctionThatReturnsString"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<CallbackFunctionInterface::FunctionThatReturnsString >::ConversionType cb; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &cb); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->TakesFunctionThatReturnsString(cb); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJStakesFunctionWithNullableParameters( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "call takesFunctionWithNullableParameters"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<CallbackFunctionInterface::FunctionWithNullableParameters >::ConversionType cb; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &cb); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->TakesFunctionWithNullableParameters(cb); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJStakesFunctionWithOneParameter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "call takesFunctionWithOneParameter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<CallbackFunctionInterface::FunctionWithOneParameter >::ConversionType cb; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &cb); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->TakesFunctionWithOneParameter(cb); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJStakesFunctionWithSeveralParameters( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "call takesFunctionWithSeveralParameters"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<CallbackFunctionInterface::FunctionWithSeveralParameters >::ConversionType cb; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &cb); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->TakesFunctionWithSeveralParameters(cb); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJStakesVoidFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackFunctionInterface", "call takesVoidFunction"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackFunctionInterface* impl = - GetWrappableOrSetException<CallbackFunctionInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<CallbackFunctionInterface::VoidFunction >::ConversionType cb; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &cb); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->TakesVoidFunction(cb); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.h deleted file mode 100644 index 71f4a8d..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCCallbackFunctionInterface_h -#define JSCCallbackFunctionInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/callback_function_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCCallbackFunctionInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to CallbackFunctionInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCCallbackFunctionInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<CallbackFunctionInterface>& impl); - ~JSCCallbackFunctionInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCCallbackFunctionInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc deleted file mode 100644 index 0654877..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc +++ /dev/null
@@ -1,834 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCCallbackInterfaceInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCSingleOperationInterface.h" -#include "cobalt/bindings/testing/single_operation_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::CallbackInterfaceInterface; -using cobalt::bindings::testing::JSCCallbackInterfaceInterface; -using cobalt::bindings::testing::JSCSingleOperationInterface; -using cobalt::bindings::testing::SingleOperationInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJScallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJScallbackAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSregisterCallback(JSC::ExecState*); -JSC::EncodedJSValue functionJSsomeOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCCallbackInterfaceInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCCallbackInterfaceInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCCallbackInterfaceInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCCallbackInterfaceInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCCallbackInterfaceInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCCallbackInterfaceInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCCallbackInterfaceInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCCallbackInterfaceInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCCallbackInterfaceInterface::InterfaceObject::s_info = { - "CallbackInterfaceInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCCallbackInterfaceInterface::InterfaceObject) -}; // JSCCallbackInterfaceInterface::InterfaceObject::s_info - -void JSCCallbackInterfaceInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCCallbackInterfaceInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCCallbackInterfaceInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "CallbackInterfaceInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCCallbackInterfaceInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCCallbackInterfaceInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCCallbackInterfaceInterface::Prototype::property_table_values[] = { - { "registerCallback", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSregisterCallback), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "someOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsomeOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCCallbackInterfaceInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCCallbackInterfaceInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCCallbackInterfaceInterface::Prototype::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCCallbackInterfaceInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCCallbackInterfaceInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCCallbackInterfaceInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCCallbackInterfaceInterface::Prototype::s_info = { - "CallbackInterfaceInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCCallbackInterfaceInterface::Prototype) -}; // JSCCallbackInterfaceInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCCallbackInterfaceInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCCallbackInterfaceInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCCallbackInterfaceInterface::Prototype class - -const JSC::HashTableValue JSCCallbackInterfaceInterface::property_table_values[] = { - { "callbackAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJScallbackAttribute), - reinterpret_cast<intptr_t>(setJScallbackAttribute), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCCallbackInterfaceInterface::property_table_values - -// static -const JSC::HashTable JSCCallbackInterfaceInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCCallbackInterfaceInterface::property_table_prototype - -// static -const JSC::HashTable* JSCCallbackInterfaceInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCCallbackInterfaceInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCCallbackInterfaceInterface::NonTrivialStaticFields> - JSCCallbackInterfaceInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCCallbackInterfaceInterface::s_info = { - "CallbackInterfaceInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCCallbackInterfaceInterface) -}; // JSCCallbackInterfaceInterface::s_info - -// static -JSC::JSObject* JSCCallbackInterfaceInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCCallbackInterfaceInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCCallbackInterfaceInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCCallbackInterfaceInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == CallbackInterfaceInterface::CallbackInterfaceInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match CallbackInterfaceInterface::CallbackInterfaceInterfaceWrappableType()"; - return NULL; - } - CallbackInterfaceInterface* impl_ptr = - base::polymorphic_downcast<CallbackInterfaceInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCCallbackInterfaceInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCCallbackInterfaceInterface>(global_data.heap)) - JSCCallbackInterfaceInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCCallbackInterfaceInterface::JSCCallbackInterfaceInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<CallbackInterfaceInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCCallbackInterfaceInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCCallbackInterfaceInterface::~JSCCallbackInterfaceInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCCallbackInterfaceInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCCallbackInterfaceInterface* this_object = JSC::jsCast<JSCCallbackInterfaceInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCCallbackInterfaceInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCCallbackInterfaceInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCCallbackInterfaceInterface* this_object = JSC::jsCast<JSCCallbackInterfaceInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCCallbackInterfaceInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCCallbackInterfaceInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCCallbackInterfaceInterface* this_object = JSC::jsCast<JSCCallbackInterfaceInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCCallbackInterfaceInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJScallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCCallbackInterfaceInterface", "get callbackAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - CallbackInterfaceInterface* impl = - GetWrappableOrSetException<CallbackInterfaceInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->callback_attribute()); - return result; -} - -void setJScallbackAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCCallbackInterfaceInterface", "set callbackAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - CallbackInterfaceInterface* impl = - GetWrappableOrSetException<CallbackInterfaceInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<CallbackInterfaceTraits<SingleOperationInterface > >::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_callback_attribute(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSregisterCallback( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackInterfaceInterface", "call registerCallback"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackInterfaceInterface* impl = - GetWrappableOrSetException<CallbackInterfaceInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<CallbackInterfaceTraits<SingleOperationInterface > >::ConversionType callback_interface; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &callback_interface); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->RegisterCallback(callback_interface); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsomeOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCCallbackInterfaceInterface", "call someOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - CallbackInterfaceInterface* impl = - GetWrappableOrSetException<CallbackInterfaceInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->SomeOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.h deleted file mode 100644 index a7feb43..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCCallbackInterfaceInterface_h -#define JSCCallbackInterfaceInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/callback_interface_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCCallbackInterfaceInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to CallbackInterfaceInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCCallbackInterfaceInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<CallbackInterfaceInterface>& impl); - ~JSCCallbackInterfaceInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCCallbackInterfaceInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc deleted file mode 100644 index c1d873b..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc +++ /dev/null
@@ -1,902 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#if defined(ENABLE_CONDITIONAL_INTERFACE) - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCConditionalInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ConditionalInterface; -using cobalt::bindings::testing::JSCConditionalInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -#if defined(ENABLE_CONDITIONAL_PROPERTY) -JSC::JSValue getJSenabledAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSenabledAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -#endif // defined(ENABLE_CONDITIONAL_PROPERTY) -#if defined(NO_ENABLE_CONDITIONAL_PROPERTY) -JSC::JSValue getJSdisabledAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSdisabledAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -#endif // defined(NO_ENABLE_CONDITIONAL_PROPERTY) -#if defined(NO_ENABLE_CONDITIONAL_PROPERTY) -JSC::EncodedJSValue functionJSdisabledOperation(JSC::ExecState*); -#endif // defined(NO_ENABLE_CONDITIONAL_PROPERTY) -#if defined(ENABLE_CONDITIONAL_PROPERTY) -JSC::EncodedJSValue functionJSenabledOperation(JSC::ExecState*); -#endif // defined(ENABLE_CONDITIONAL_PROPERTY) - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCConditionalInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCConditionalInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConditionalInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConditionalInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCConditionalInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConditionalInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCConditionalInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConditionalInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCConditionalInterface::InterfaceObject::s_info = { - "ConditionalInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConditionalInterface::InterfaceObject) -}; // JSCConditionalInterface::InterfaceObject::s_info - -void JSCConditionalInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCConditionalInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCConditionalInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ConditionalInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCConditionalInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCConditionalInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConditionalInterface::Prototype::property_table_values[] = { -#if defined(NO_ENABLE_CONDITIONAL_PROPERTY) - { "disabledOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSdisabledOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, -#endif // defined(NO_ENABLE_CONDITIONAL_PROPERTY) -#if defined(ENABLE_CONDITIONAL_PROPERTY) - { "enabledOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSenabledOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, -#endif // defined(ENABLE_CONDITIONAL_PROPERTY) - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCConditionalInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConditionalInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCConditionalInterface::Prototype::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConditionalInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCConditionalInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConditionalInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCConditionalInterface::Prototype::s_info = { - "ConditionalInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConditionalInterface::Prototype) -}; // JSCConditionalInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCConditionalInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCConditionalInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCConditionalInterface::Prototype class - -const JSC::HashTableValue JSCConditionalInterface::property_table_values[] = { -#if defined(ENABLE_CONDITIONAL_PROPERTY) - { "enabledAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSenabledAttribute), - reinterpret_cast<intptr_t>(setJSenabledAttribute), - JSC::NoIntrinsic - }, -#endif // defined(ENABLE_CONDITIONAL_PROPERTY) -#if defined(NO_ENABLE_CONDITIONAL_PROPERTY) - { "disabledAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSdisabledAttribute), - reinterpret_cast<intptr_t>(setJSdisabledAttribute), - JSC::NoIntrinsic - }, -#endif // defined(NO_ENABLE_CONDITIONAL_PROPERTY) - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConditionalInterface::property_table_values - -// static -const JSC::HashTable JSCConditionalInterface::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConditionalInterface::property_table_prototype - -// static -const JSC::HashTable* JSCConditionalInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConditionalInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCConditionalInterface::NonTrivialStaticFields> - JSCConditionalInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCConditionalInterface::s_info = { - "ConditionalInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConditionalInterface) -}; // JSCConditionalInterface::s_info - -// static -JSC::JSObject* JSCConditionalInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCConditionalInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCConditionalInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCConditionalInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ConditionalInterface::ConditionalInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ConditionalInterface::ConditionalInterfaceWrappableType()"; - return NULL; - } - ConditionalInterface* impl_ptr = - base::polymorphic_downcast<ConditionalInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCConditionalInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCConditionalInterface>(global_data.heap)) - JSCConditionalInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCConditionalInterface::JSCConditionalInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConditionalInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCConditionalInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCConditionalInterface::~JSCConditionalInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCConditionalInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCConditionalInterface* this_object = JSC::jsCast<JSCConditionalInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCConditionalInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCConditionalInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCConditionalInterface* this_object = JSC::jsCast<JSCConditionalInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCConditionalInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCConditionalInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCConditionalInterface* this_object = JSC::jsCast<JSCConditionalInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCConditionalInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -#if defined(ENABLE_CONDITIONAL_PROPERTY) -JSC::JSValue getJSenabledAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCConditionalInterface", "get enabledAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ConditionalInterface* impl = - GetWrappableOrSetException<ConditionalInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->enabled_attribute()); - return result; -} - -void setJSenabledAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCConditionalInterface", "set enabledAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ConditionalInterface* impl = - GetWrappableOrSetException<ConditionalInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int32_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_enabled_attribute(cobalt_value); - } -} -#endif // defined(ENABLE_CONDITIONAL_PROPERTY) - -#if defined(NO_ENABLE_CONDITIONAL_PROPERTY) -JSC::JSValue getJSdisabledAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCConditionalInterface", "get disabledAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ConditionalInterface* impl = - GetWrappableOrSetException<ConditionalInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->disabled_attribute()); - return result; -} - -void setJSdisabledAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCConditionalInterface", "set disabledAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ConditionalInterface* impl = - GetWrappableOrSetException<ConditionalInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int32_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_disabled_attribute(cobalt_value); - } -} -#endif // defined(NO_ENABLE_CONDITIONAL_PROPERTY) -#if defined(NO_ENABLE_CONDITIONAL_PROPERTY) - -JSC::EncodedJSValue functionJSdisabledOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCConditionalInterface", "call disabledOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - ConditionalInterface* impl = - GetWrappableOrSetException<ConditionalInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->DisabledOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -#endif // defined(NO_ENABLE_CONDITIONAL_PROPERTY) -#if defined(ENABLE_CONDITIONAL_PROPERTY) - -JSC::EncodedJSValue functionJSenabledOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCConditionalInterface", "call enabledOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - ConditionalInterface* impl = - GetWrappableOrSetException<ConditionalInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->EnabledOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -#endif // defined(ENABLE_CONDITIONAL_PROPERTY) -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt -#endif // defined(ENABLE_CONDITIONAL_INTERFACE)
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.h deleted file mode 100644 index 6a67c7f..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.h +++ /dev/null
@@ -1,134 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCConditionalInterface_h -#define JSCConditionalInterface_h - -#if defined(ENABLE_CONDITIONAL_INTERFACE) - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/conditional_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCConditionalInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ConditionalInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCConditionalInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConditionalInterface>& impl); - ~JSCConditionalInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // defined(ENABLE_CONDITIONAL_INTERFACE) - -#endif // JSCConditionalInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc deleted file mode 100644 index 7919ac5..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc +++ /dev/null
@@ -1,754 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCConstantsInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ConstantsInterface; -using cobalt::bindings::testing::JSCConstantsInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSINTEGER_CONSTANT( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSDOUBLE_CONSTANT( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCConstantsInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCConstantsInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConstantsInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { "INTEGER_CONSTANT", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSINTEGER_CONSTANT), - 0, - JSC::NoIntrinsic - }, - { "DOUBLE_CONSTANT", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSDOUBLE_CONSTANT), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstantsInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCConstantsInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstantsInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCConstantsInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstantsInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCConstantsInterface::InterfaceObject::s_info = { - "ConstantsInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstantsInterface::InterfaceObject) -}; // JSCConstantsInterface::InterfaceObject::s_info - -void JSCConstantsInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCConstantsInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCConstantsInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ConstantsInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCConstantsInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCConstantsInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConstantsInterface::Prototype::property_table_values[] = { - { "INTEGER_CONSTANT", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSINTEGER_CONSTANT), - 0, - JSC::NoIntrinsic - }, - { "DOUBLE_CONSTANT", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSDOUBLE_CONSTANT), - 0, - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCConstantsInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstantsInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCConstantsInterface::Prototype::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstantsInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCConstantsInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstantsInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCConstantsInterface::Prototype::s_info = { - "ConstantsInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstantsInterface::Prototype) -}; // JSCConstantsInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCConstantsInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCConstantsInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCConstantsInterface::Prototype class - -const JSC::HashTableValue JSCConstantsInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstantsInterface::property_table_values - -// static -const JSC::HashTable JSCConstantsInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstantsInterface::property_table_prototype - -// static -const JSC::HashTable* JSCConstantsInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstantsInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCConstantsInterface::NonTrivialStaticFields> - JSCConstantsInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCConstantsInterface::s_info = { - "ConstantsInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstantsInterface) -}; // JSCConstantsInterface::s_info - -// static -JSC::JSObject* JSCConstantsInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCConstantsInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCConstantsInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCConstantsInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ConstantsInterface::ConstantsInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ConstantsInterface::ConstantsInterfaceWrappableType()"; - return NULL; - } - ConstantsInterface* impl_ptr = - base::polymorphic_downcast<ConstantsInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCConstantsInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCConstantsInterface>(global_data.heap)) - JSCConstantsInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCConstantsInterface::JSCConstantsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConstantsInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCConstantsInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCConstantsInterface::~JSCConstantsInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCConstantsInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCConstantsInterface* this_object = JSC::jsCast<JSCConstantsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCConstantsInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCConstantsInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCConstantsInterface* this_object = JSC::jsCast<JSCConstantsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCConstantsInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCConstantsInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCConstantsInterface* this_object = JSC::jsCast<JSCConstantsInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCConstantsInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSINTEGER_CONSTANT( - JSC::ExecState* exec_state, JSC::JSValue, JSC::PropertyName) { - TRACE_EVENT0("JSCConstantsInterface", "get INTEGER_CONSTANT"); - COMPILE_ASSERT(ConstantsInterface::kIntegerConstant == 5, - ValueForConstantsInterface_kIntegerConstantDoesNotMatchIDL); - // JSCGlobalObject* is only needed for non-primitive types. - return ToJSValue(NULL, 5); -} - -JSC::JSValue getJSDOUBLE_CONSTANT( - JSC::ExecState* exec_state, JSC::JSValue, JSC::PropertyName) { - TRACE_EVENT0("JSCConstantsInterface", "get DOUBLE_CONSTANT"); - DCHECK_EQ(2.718, ConstantsInterface::kDoubleConstant) << - "The value for ConstantsInterface::kDoubleConstant does not match " - "the value in the interface definition."; - // JSCGlobalObject* is only needed for non-primitive types. - return ToJSValue(NULL, 2.718); -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.h deleted file mode 100644 index d977ced..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCConstantsInterface_h -#define JSCConstantsInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/constants_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCConstantsInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ConstantsInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCConstantsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConstantsInterface>& impl); - ~JSCConstantsInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCConstantsInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc deleted file mode 100644 index eac76c2..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc +++ /dev/null
@@ -1,759 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCConstructorInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ConstructorInterface; -using cobalt::bindings::testing::JSCConstructorInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue constructorJSConstructorInterface(JSC::ExecState*); -JSC::EncodedJSValue constructorJSConstructorInterface1(JSC::ExecState*); -JSC::EncodedJSValue constructorJSConstructorInterface2(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCConstructorInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCConstructorInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConstructorInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstructorInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCConstructorInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstructorInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCConstructorInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstructorInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCConstructorInterface::InterfaceObject::s_info = { - "ConstructorInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstructorInterface::InterfaceObject) -}; // JSCConstructorInterface::InterfaceObject::s_info - -void JSCConstructorInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCConstructorInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCConstructorInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSConstructorInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ConstructorInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCConstructorInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCConstructorInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConstructorInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCConstructorInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstructorInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCConstructorInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstructorInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCConstructorInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstructorInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCConstructorInterface::Prototype::s_info = { - "ConstructorInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstructorInterface::Prototype) -}; // JSCConstructorInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCConstructorInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCConstructorInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCConstructorInterface::Prototype class - -const JSC::HashTableValue JSCConstructorInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstructorInterface::property_table_values - -// static -const JSC::HashTable JSCConstructorInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstructorInterface::property_table_prototype - -// static -const JSC::HashTable* JSCConstructorInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstructorInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCConstructorInterface::NonTrivialStaticFields> - JSCConstructorInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCConstructorInterface::s_info = { - "ConstructorInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstructorInterface) -}; // JSCConstructorInterface::s_info - -// static -JSC::JSObject* JSCConstructorInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCConstructorInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCConstructorInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCConstructorInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ConstructorInterface::ConstructorInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ConstructorInterface::ConstructorInterfaceWrappableType()"; - return NULL; - } - ConstructorInterface* impl_ptr = - base::polymorphic_downcast<ConstructorInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCConstructorInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCConstructorInterface>(global_data.heap)) - JSCConstructorInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCConstructorInterface::JSCConstructorInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConstructorInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCConstructorInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCConstructorInterface::~JSCConstructorInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCConstructorInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCConstructorInterface* this_object = JSC::jsCast<JSCConstructorInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCConstructorInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCConstructorInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCConstructorInterface* this_object = JSC::jsCast<JSCConstructorInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCConstructorInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCConstructorInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCConstructorInterface* this_object = JSC::jsCast<JSCConstructorInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCConstructorInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue constructorJSConstructorInterface(JSC::ExecState* exec_state) { - const size_t num_arguments = exec_state->argumentCount(); - switch(num_arguments) { - case(0): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - if (true) { - return constructorJSConstructorInterface1(exec_state); - } - break; - } - case(1): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - if (true) { - return constructorJSConstructorInterface2(exec_state); - } - break; - } - } - // Invalid number of args - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - // 4. If S is empty, then throw a TypeError. - return JSC::throwVMTypeError(exec_state); -} - -JSC::EncodedJSValue constructorJSConstructorInterface1(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<ConstructorInterface> new_object = - new ConstructorInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} - -JSC::EncodedJSValue constructorJSConstructorInterface2(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<bool >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - scoped_refptr<ConstructorInterface> new_object = - new ConstructorInterface(arg); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.h deleted file mode 100644 index 3d0eb62..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCConstructorInterface_h -#define JSCConstructorInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/constructor_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCConstructorInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ConstructorInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCConstructorInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConstructorInterface>& impl); - ~JSCConstructorInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCConstructorInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc deleted file mode 100644 index dc8159a..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc +++ /dev/null
@@ -1,833 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCConstructorWithArgumentsInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ConstructorWithArgumentsInterface; -using cobalt::bindings::testing::JSCConstructorWithArgumentsInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSlongArg( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSbooleanArg( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSstringArg( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::EncodedJSValue constructorJSConstructorWithArgumentsInterface(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCConstructorWithArgumentsInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCConstructorWithArgumentsInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConstructorWithArgumentsInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstructorWithArgumentsInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCConstructorWithArgumentsInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstructorWithArgumentsInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCConstructorWithArgumentsInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstructorWithArgumentsInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCConstructorWithArgumentsInterface::InterfaceObject::s_info = { - "ConstructorWithArgumentsInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstructorWithArgumentsInterface::InterfaceObject) -}; // JSCConstructorWithArgumentsInterface::InterfaceObject::s_info - -void JSCConstructorWithArgumentsInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCConstructorWithArgumentsInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCConstructorWithArgumentsInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 2; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSConstructorWithArgumentsInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ConstructorWithArgumentsInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCConstructorWithArgumentsInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCConstructorWithArgumentsInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCConstructorWithArgumentsInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCConstructorWithArgumentsInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstructorWithArgumentsInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCConstructorWithArgumentsInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstructorWithArgumentsInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCConstructorWithArgumentsInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstructorWithArgumentsInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCConstructorWithArgumentsInterface::Prototype::s_info = { - "ConstructorWithArgumentsInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstructorWithArgumentsInterface::Prototype) -}; // JSCConstructorWithArgumentsInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCConstructorWithArgumentsInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCConstructorWithArgumentsInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCConstructorWithArgumentsInterface::Prototype class - -const JSC::HashTableValue JSCConstructorWithArgumentsInterface::property_table_values[] = { - { "longArg", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSlongArg), - 0, - JSC::NoIntrinsic - }, - { "booleanArg", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSbooleanArg), - 0, - JSC::NoIntrinsic - }, - { "stringArg", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSstringArg), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCConstructorWithArgumentsInterface::property_table_values - -// static -const JSC::HashTable JSCConstructorWithArgumentsInterface::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCConstructorWithArgumentsInterface::property_table_prototype - -// static -const JSC::HashTable* JSCConstructorWithArgumentsInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCConstructorWithArgumentsInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCConstructorWithArgumentsInterface::NonTrivialStaticFields> - JSCConstructorWithArgumentsInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCConstructorWithArgumentsInterface::s_info = { - "ConstructorWithArgumentsInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCConstructorWithArgumentsInterface) -}; // JSCConstructorWithArgumentsInterface::s_info - -// static -JSC::JSObject* JSCConstructorWithArgumentsInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCConstructorWithArgumentsInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCConstructorWithArgumentsInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCConstructorWithArgumentsInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ConstructorWithArgumentsInterface::ConstructorWithArgumentsInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ConstructorWithArgumentsInterface::ConstructorWithArgumentsInterfaceWrappableType()"; - return NULL; - } - ConstructorWithArgumentsInterface* impl_ptr = - base::polymorphic_downcast<ConstructorWithArgumentsInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCConstructorWithArgumentsInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCConstructorWithArgumentsInterface>(global_data.heap)) - JSCConstructorWithArgumentsInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCConstructorWithArgumentsInterface::JSCConstructorWithArgumentsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConstructorWithArgumentsInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCConstructorWithArgumentsInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCConstructorWithArgumentsInterface::~JSCConstructorWithArgumentsInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCConstructorWithArgumentsInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCConstructorWithArgumentsInterface* this_object = JSC::jsCast<JSCConstructorWithArgumentsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCConstructorWithArgumentsInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCConstructorWithArgumentsInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCConstructorWithArgumentsInterface* this_object = JSC::jsCast<JSCConstructorWithArgumentsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCConstructorWithArgumentsInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCConstructorWithArgumentsInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCConstructorWithArgumentsInterface* this_object = JSC::jsCast<JSCConstructorWithArgumentsInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCConstructorWithArgumentsInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSlongArg( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCConstructorWithArgumentsInterface", "get longArg"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ConstructorWithArgumentsInterface* impl = - GetWrappableOrSetException<ConstructorWithArgumentsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->long_arg()); - return result; -} - -JSC::JSValue getJSbooleanArg( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCConstructorWithArgumentsInterface", "get booleanArg"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ConstructorWithArgumentsInterface* impl = - GetWrappableOrSetException<ConstructorWithArgumentsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->boolean_arg()); - return result; -} - -JSC::JSValue getJSstringArg( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCConstructorWithArgumentsInterface", "get stringArg"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ConstructorWithArgumentsInterface* impl = - GetWrappableOrSetException<ConstructorWithArgumentsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->string_arg()); - return result; -} - -JSC::EncodedJSValue constructorJSConstructorWithArgumentsInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - TypeTraits<bool >::ConversionType arg2; - // Optional arguments with default values - TypeTraits<std::string >::ConversionType default_arg = - "default"; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - size_t num_set_arguments = 3; - if (exec_state->argumentCount() > 2) { - FromJSValue(exec_state, - exec_state->argument(2), - kNoConversionFlags, - &exception_state, - &default_arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - scoped_refptr<ConstructorWithArgumentsInterface> new_object = - new ConstructorWithArgumentsInterface(arg1, arg2, default_arg); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.h deleted file mode 100644 index 3a69aab..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCConstructorWithArgumentsInterface_h -#define JSCConstructorWithArgumentsInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/constructor_with_arguments_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCConstructorWithArgumentsInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ConstructorWithArgumentsInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCConstructorWithArgumentsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ConstructorWithArgumentsInterface>& impl); - ~JSCConstructorWithArgumentsInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCConstructorWithArgumentsInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc deleted file mode 100644 index e37be61..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc +++ /dev/null
@@ -1,1001 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCDOMStringTestInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::DOMStringTestInterface; -using cobalt::bindings::testing::JSCDOMStringTestInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSproperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSproperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSreadOnlyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSreadOnlyTokenProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSnullIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullIsEmptyProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSundefinedIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSundefinedIsEmptyProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSnullableUndefinedIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableUndefinedIsEmptyProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCDOMStringTestInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCDOMStringTestInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDOMStringTestInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDOMStringTestInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCDOMStringTestInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDOMStringTestInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCDOMStringTestInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDOMStringTestInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCDOMStringTestInterface::InterfaceObject::s_info = { - "DOMStringTestInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDOMStringTestInterface::InterfaceObject) -}; // JSCDOMStringTestInterface::InterfaceObject::s_info - -void JSCDOMStringTestInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCDOMStringTestInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCDOMStringTestInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "DOMStringTestInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCDOMStringTestInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCDOMStringTestInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDOMStringTestInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCDOMStringTestInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDOMStringTestInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCDOMStringTestInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDOMStringTestInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCDOMStringTestInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDOMStringTestInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCDOMStringTestInterface::Prototype::s_info = { - "DOMStringTestInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDOMStringTestInterface::Prototype) -}; // JSCDOMStringTestInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCDOMStringTestInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCDOMStringTestInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCDOMStringTestInterface::Prototype class - -const JSC::HashTableValue JSCDOMStringTestInterface::property_table_values[] = { - { "property", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSproperty), - reinterpret_cast<intptr_t>(setJSproperty), - JSC::NoIntrinsic - }, - { "readOnlyProperty", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSreadOnlyProperty), - 0, - JSC::NoIntrinsic - }, - { "readOnlyTokenProperty", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSreadOnlyTokenProperty), - 0, - JSC::NoIntrinsic - }, - { "nullIsEmptyProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullIsEmptyProperty), - reinterpret_cast<intptr_t>(setJSnullIsEmptyProperty), - JSC::NoIntrinsic - }, - { "undefinedIsEmptyProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSundefinedIsEmptyProperty), - reinterpret_cast<intptr_t>(setJSundefinedIsEmptyProperty), - JSC::NoIntrinsic - }, - { "nullableUndefinedIsEmptyProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableUndefinedIsEmptyProperty), - reinterpret_cast<intptr_t>(setJSnullableUndefinedIsEmptyProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDOMStringTestInterface::property_table_values - -// static -const JSC::HashTable JSCDOMStringTestInterface::property_table_prototype = { - 21, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDOMStringTestInterface::property_table_prototype - -// static -const JSC::HashTable* JSCDOMStringTestInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDOMStringTestInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCDOMStringTestInterface::NonTrivialStaticFields> - JSCDOMStringTestInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCDOMStringTestInterface::s_info = { - "DOMStringTestInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDOMStringTestInterface) -}; // JSCDOMStringTestInterface::s_info - -// static -JSC::JSObject* JSCDOMStringTestInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCDOMStringTestInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCDOMStringTestInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCDOMStringTestInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == DOMStringTestInterface::DOMStringTestInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match DOMStringTestInterface::DOMStringTestInterfaceWrappableType()"; - return NULL; - } - DOMStringTestInterface* impl_ptr = - base::polymorphic_downcast<DOMStringTestInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCDOMStringTestInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCDOMStringTestInterface>(global_data.heap)) - JSCDOMStringTestInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCDOMStringTestInterface::JSCDOMStringTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DOMStringTestInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCDOMStringTestInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCDOMStringTestInterface::~JSCDOMStringTestInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCDOMStringTestInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCDOMStringTestInterface* this_object = JSC::jsCast<JSCDOMStringTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCDOMStringTestInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCDOMStringTestInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCDOMStringTestInterface* this_object = JSC::jsCast<JSCDOMStringTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCDOMStringTestInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCDOMStringTestInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCDOMStringTestInterface* this_object = JSC::jsCast<JSCDOMStringTestInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCDOMStringTestInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSproperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDOMStringTestInterface", "get property"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->property()); - return result; -} - -void setJSproperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCDOMStringTestInterface", "set property"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_property(cobalt_value); - } -} - -JSC::JSValue getJSreadOnlyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDOMStringTestInterface", "get readOnlyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->read_only_property()); - return result; -} - -JSC::JSValue getJSreadOnlyTokenProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDOMStringTestInterface", "get readOnlyTokenProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->read_only_token_property()); - return result; -} - -JSC::JSValue getJSnullIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDOMStringTestInterface", "get nullIsEmptyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->null_is_empty_property()); - return result; -} - -void setJSnullIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCDOMStringTestInterface", "set nullIsEmptyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - (kConversionFlagTreatNullAsEmptyString), &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_null_is_empty_property(cobalt_value); - } -} - -JSC::JSValue getJSundefinedIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDOMStringTestInterface", "get undefinedIsEmptyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->undefined_is_empty_property()); - return result; -} - -void setJSundefinedIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCDOMStringTestInterface", "set undefinedIsEmptyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - (kConversionFlagTreatUndefinedAsEmptyString), &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_undefined_is_empty_property(cobalt_value); - } -} - -JSC::JSValue getJSnullableUndefinedIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDOMStringTestInterface", "get nullableUndefinedIsEmptyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_undefined_is_empty_property()); - return result; -} - -void setJSnullableUndefinedIsEmptyProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCDOMStringTestInterface", "set nullableUndefinedIsEmptyProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - DOMStringTestInterface* impl = - GetWrappableOrSetException<DOMStringTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<base::optional<std::string > >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - (kConversionFlagNullable | kConversionFlagTreatUndefinedAsEmptyString), &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_nullable_undefined_is_empty_property(cobalt_value); - } -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.h deleted file mode 100644 index 32ccb2c..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCDOMStringTestInterface_h -#define JSCDOMStringTestInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/dom_string_test_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCDOMStringTestInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to DOMStringTestInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCDOMStringTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DOMStringTestInterface>& impl); - ~JSCDOMStringTestInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCDOMStringTestInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc deleted file mode 100644 index a11005c..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc +++ /dev/null
@@ -1,1084 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCDerivedGetterSetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_property_enumerator.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::DerivedGetterSetterInterface; -using cobalt::bindings::testing::JSCDerivedGetterSetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSpropertyOnDerivedClass( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSpropertyOnDerivedClass( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSderivedIndexedGetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSderivedIndexedSetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSoperationOnDerivedClass(JSC::ExecState*); -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index); -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = true; -const bool s_has_named_setter = true; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = false; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCDerivedGetterSetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCDerivedGetterSetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDerivedGetterSetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDerivedGetterSetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCDerivedGetterSetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDerivedGetterSetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCDerivedGetterSetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDerivedGetterSetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCDerivedGetterSetterInterface::InterfaceObject::s_info = { - "DerivedGetterSetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDerivedGetterSetterInterface::InterfaceObject) -}; // JSCDerivedGetterSetterInterface::InterfaceObject::s_info - -void JSCDerivedGetterSetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCDerivedGetterSetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCDerivedGetterSetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "DerivedGetterSetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCDerivedGetterSetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCDerivedGetterSetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDerivedGetterSetterInterface::Prototype::property_table_values[] = { - { "derivedIndexedGetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSderivedIndexedGetter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "derivedIndexedSetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSderivedIndexedSetter), - static_cast<intptr_t>(2), - JSC::NoIntrinsic - }, - { "operationOnDerivedClass", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoperationOnDerivedClass), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCDerivedGetterSetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDerivedGetterSetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCDerivedGetterSetterInterface::Prototype::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDerivedGetterSetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCDerivedGetterSetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDerivedGetterSetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCDerivedGetterSetterInterface::Prototype::s_info = { - "DerivedGetterSetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDerivedGetterSetterInterface::Prototype) -}; // JSCDerivedGetterSetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCDerivedGetterSetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCDerivedGetterSetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = - bindings::testing::JSCNamedIndexedGetterInterface::GetPrototype(global_object); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCDerivedGetterSetterInterface::Prototype class - -const JSC::HashTableValue JSCDerivedGetterSetterInterface::property_table_values[] = { - { "length", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSlength), - 0, - JSC::NoIntrinsic - }, - { "propertyOnDerivedClass", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSpropertyOnDerivedClass), - reinterpret_cast<intptr_t>(setJSpropertyOnDerivedClass), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDerivedGetterSetterInterface::property_table_values - -// static -const JSC::HashTable JSCDerivedGetterSetterInterface::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDerivedGetterSetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCDerivedGetterSetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDerivedGetterSetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCDerivedGetterSetterInterface::NonTrivialStaticFields> - JSCDerivedGetterSetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCDerivedGetterSetterInterface::s_info = { - "DerivedGetterSetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDerivedGetterSetterInterface) -}; // JSCDerivedGetterSetterInterface::s_info - -// static -JSC::JSObject* JSCDerivedGetterSetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCDerivedGetterSetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCDerivedGetterSetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCDerivedGetterSetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == DerivedGetterSetterInterface::DerivedGetterSetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match DerivedGetterSetterInterface::DerivedGetterSetterInterfaceWrappableType()"; - return NULL; - } - DerivedGetterSetterInterface* impl_ptr = - base::polymorphic_downcast<DerivedGetterSetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCDerivedGetterSetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCDerivedGetterSetterInterface>(global_data.heap)) - JSCDerivedGetterSetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCDerivedGetterSetterInterface::JSCDerivedGetterSetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DerivedGetterSetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCDerivedGetterSetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCDerivedGetterSetterInterface::~JSCDerivedGetterSetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCDerivedGetterSetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCDerivedGetterSetterInterface* this_object = JSC::jsCast<JSCDerivedGetterSetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCDerivedGetterSetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCDerivedGetterSetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (index < impl->length()) { - slot.setCustomIndex(cell, index, IndexedPropertyGetter); - return true; - } - if (s_has_named_getter) { - JSCDerivedGetterSetterInterface* this_object = JSC::jsCast<JSCDerivedGetterSetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCDerivedGetterSetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, object); - if (impl) { - for (uint32 i = 0; i < impl->length(); ++i) { - property_names.add(JSC::Identifier::from(exec_state, i)); - } - JSCPropertyEnumerator enumerator(exec_state, &property_names); - impl->EnumerateNamedProperties(&enumerator); - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCDerivedGetterSetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCDerivedGetterSetterInterface* this_object = JSC::jsCast<JSCDerivedGetterSetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } - } - - if (!property_handled) { - JSC::lookupPut<JSCDerivedGetterSetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCDerivedGetterSetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (index < impl->length()) { - IndexedPropertySetter(cell, exec_state, index, value); - property_handled = true; - } - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCDerivedGetterSetterInterface::deleteProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - TRACE_EVENT1("JSCDerivedGetterSetterInterface", "deleteProperty", "property", - TRACE_STR_COPY(WTF::String(property_name.publicName()).utf8().data())); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (impl) { - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deleteProperty(cell, exec_state, property_name); - } - return false; -} - -bool JSCDerivedGetterSetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "deletePropertyByIndex"); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (impl) { - // https://heycam.github.io/webidl/#delete - // Return true if index is not a supported property index. - return index >= impl->length(); - } - return false; -} - -bool JSCDerivedGetterSetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCDerivedGetterSetterInterface* this_object = JSC::jsCast<JSCDerivedGetterSetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCDerivedGetterSetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "get length"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->length()); - return result; -} - -JSC::JSValue getJSpropertyOnDerivedClass( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "get propertyOnDerivedClass"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->property_on_derived_class()); - return result; -} - -void setJSpropertyOnDerivedClass( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "set propertyOnDerivedClass"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<bool >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_property_on_derived_class(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSderivedIndexedGetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "call derivedIndexedGetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - TypeTraits<uint32_t >::ReturnType return_value = impl->DerivedIndexedGetter(index); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSderivedIndexedSetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "call derivedIndexedSetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - TypeTraits<uint32_t >::ConversionType value; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->DerivedIndexedSetter(index, value); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoperationOnDerivedClass( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "call operationOnDerivedClass"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->OperationOnDerivedClass(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "IndexedPropertyGetter"); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSValue result = ToJSValue( - global_object, - impl->DerivedIndexedGetter(index)); - return result; -} - -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "IndexedPropertySetter"); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - uint32_t value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->DerivedIndexedSetter(index, value); -} - -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "NamedPropertyGetter"); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - JSC::JSValue result = ToJSValue( - global_object, - impl->AnonymousNamedGetter(property_name_utf8)); - return result; -} - -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - return impl->CanQueryNamedProperty(property_name_utf8); -} - -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCDerivedGetterSetterInterface", "NamedPropertySetter"); - DerivedGetterSetterInterface* impl = - GetWrappableOrSetException<DerivedGetterSetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - std::string value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->AnonymousNamedSetter(property_name_utf8, value); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.h deleted file mode 100644 index dd449eb..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.h +++ /dev/null
@@ -1,147 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCDerivedGetterSetterInterface_h -#define JSCDerivedGetterSetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "JSCNamedIndexedGetterInterface.h" -#include "cobalt/bindings/testing/derived_getter_setter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCDerivedGetterSetterInterface - : public bindings::testing::JSCNamedIndexedGetterInterface { - typedef bindings::testing::JSCNamedIndexedGetterInterface BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to DerivedGetterSetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCDerivedGetterSetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DerivedGetterSetterInterface>& impl); - ~JSCDerivedGetterSetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCDerivedGetterSetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc deleted file mode 100644 index 34a3976..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc +++ /dev/null
@@ -1,744 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCDerivedInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::DerivedInterface; -using cobalt::bindings::testing::JSCDerivedInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSderivedAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::EncodedJSValue constructorJSDerivedInterface(JSC::ExecState*); -JSC::EncodedJSValue functionJSderivedOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = false; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCDerivedInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCDerivedInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDerivedInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDerivedInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCDerivedInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDerivedInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCDerivedInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDerivedInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCDerivedInterface::InterfaceObject::s_info = { - "DerivedInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDerivedInterface::InterfaceObject) -}; // JSCDerivedInterface::InterfaceObject::s_info - -void JSCDerivedInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCDerivedInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCDerivedInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSDerivedInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "DerivedInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCDerivedInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCDerivedInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDerivedInterface::Prototype::property_table_values[] = { - { "derivedOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSderivedOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCDerivedInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDerivedInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCDerivedInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDerivedInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCDerivedInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDerivedInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCDerivedInterface::Prototype::s_info = { - "DerivedInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDerivedInterface::Prototype) -}; // JSCDerivedInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCDerivedInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCDerivedInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = - bindings::testing::JSCBaseInterface::GetPrototype(global_object); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCDerivedInterface::Prototype class - -const JSC::HashTableValue JSCDerivedInterface::property_table_values[] = { - { "derivedAttribute", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSderivedAttribute), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDerivedInterface::property_table_values - -// static -const JSC::HashTable JSCDerivedInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDerivedInterface::property_table_prototype - -// static -const JSC::HashTable* JSCDerivedInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDerivedInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCDerivedInterface::NonTrivialStaticFields> - JSCDerivedInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCDerivedInterface::s_info = { - "DerivedInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDerivedInterface) -}; // JSCDerivedInterface::s_info - -// static -JSC::JSObject* JSCDerivedInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCDerivedInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCDerivedInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCDerivedInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == DerivedInterface::DerivedInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match DerivedInterface::DerivedInterfaceWrappableType()"; - return NULL; - } - DerivedInterface* impl_ptr = - base::polymorphic_downcast<DerivedInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCDerivedInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCDerivedInterface>(global_data.heap)) - JSCDerivedInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCDerivedInterface::JSCDerivedInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DerivedInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCDerivedInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCDerivedInterface::~JSCDerivedInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCDerivedInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCDerivedInterface* this_object = JSC::jsCast<JSCDerivedInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCDerivedInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCDerivedInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCDerivedInterface* this_object = JSC::jsCast<JSCDerivedInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } - } - - if (!property_handled) { - JSC::lookupPut<JSCDerivedInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCDerivedInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCDerivedInterface* this_object = JSC::jsCast<JSCDerivedInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCDerivedInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSderivedAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDerivedInterface", "get derivedAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DerivedInterface* impl = - GetWrappableOrSetException<DerivedInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->derived_attribute()); - return result; -} - -JSC::EncodedJSValue constructorJSDerivedInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<DerivedInterface> new_object = - new DerivedInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} - -JSC::EncodedJSValue functionJSderivedOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCDerivedInterface", "call derivedOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - DerivedInterface* impl = - GetWrappableOrSetException<DerivedInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->DerivedOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.h deleted file mode 100644 index 1aa746e..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.h +++ /dev/null
@@ -1,131 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCDerivedInterface_h -#define JSCDerivedInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "JSCBaseInterface.h" -#include "cobalt/bindings/testing/derived_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCDerivedInterface - : public bindings::testing::JSCBaseInterface { - typedef bindings::testing::JSCBaseInterface BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to DerivedInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCDerivedInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DerivedInterface>& impl); - ~JSCDerivedInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCDerivedInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc deleted file mode 100644 index dc31ae1..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc +++ /dev/null
@@ -1,792 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#if defined(NO_ENABLE_CONDITIONAL_INTERFACE) - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCDisabledInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::DisabledInterface; -using cobalt::bindings::testing::JSCDisabledInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSdisabledProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSdisabledProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSdisabledFunction(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCDisabledInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCDisabledInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDisabledInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDisabledInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCDisabledInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDisabledInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCDisabledInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDisabledInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCDisabledInterface::InterfaceObject::s_info = { - "DisabledInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDisabledInterface::InterfaceObject) -}; // JSCDisabledInterface::InterfaceObject::s_info - -void JSCDisabledInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCDisabledInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCDisabledInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "DisabledInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCDisabledInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCDisabledInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCDisabledInterface::Prototype::property_table_values[] = { - { "disabledFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSdisabledFunction), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCDisabledInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDisabledInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCDisabledInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDisabledInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCDisabledInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDisabledInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCDisabledInterface::Prototype::s_info = { - "DisabledInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDisabledInterface::Prototype) -}; // JSCDisabledInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCDisabledInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCDisabledInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCDisabledInterface::Prototype class - -const JSC::HashTableValue JSCDisabledInterface::property_table_values[] = { - { "disabledProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSdisabledProperty), - reinterpret_cast<intptr_t>(setJSdisabledProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCDisabledInterface::property_table_values - -// static -const JSC::HashTable JSCDisabledInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCDisabledInterface::property_table_prototype - -// static -const JSC::HashTable* JSCDisabledInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCDisabledInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCDisabledInterface::NonTrivialStaticFields> - JSCDisabledInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCDisabledInterface::s_info = { - "DisabledInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCDisabledInterface) -}; // JSCDisabledInterface::s_info - -// static -JSC::JSObject* JSCDisabledInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCDisabledInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCDisabledInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCDisabledInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == DisabledInterface::DisabledInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match DisabledInterface::DisabledInterfaceWrappableType()"; - return NULL; - } - DisabledInterface* impl_ptr = - base::polymorphic_downcast<DisabledInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCDisabledInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCDisabledInterface>(global_data.heap)) - JSCDisabledInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCDisabledInterface::JSCDisabledInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DisabledInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCDisabledInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCDisabledInterface::~JSCDisabledInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCDisabledInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCDisabledInterface* this_object = JSC::jsCast<JSCDisabledInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCDisabledInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCDisabledInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCDisabledInterface* this_object = JSC::jsCast<JSCDisabledInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCDisabledInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCDisabledInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCDisabledInterface* this_object = JSC::jsCast<JSCDisabledInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCDisabledInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSdisabledProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCDisabledInterface", "get disabledProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - DisabledInterface* impl = - GetWrappableOrSetException<DisabledInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->disabled_property()); - return result; -} - -void setJSdisabledProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCDisabledInterface", "set disabledProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - DisabledInterface* impl = - GetWrappableOrSetException<DisabledInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int32_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_disabled_property(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSdisabledFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCDisabledInterface", "call disabledFunction"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - DisabledInterface* impl = - GetWrappableOrSetException<DisabledInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->DisabledFunction(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt -#endif // defined(NO_ENABLE_CONDITIONAL_INTERFACE)
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.h deleted file mode 100644 index f03711f..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.h +++ /dev/null
@@ -1,134 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCDisabledInterface_h -#define JSCDisabledInterface_h - -#if defined(NO_ENABLE_CONDITIONAL_INTERFACE) - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/disabled_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCDisabledInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to DisabledInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCDisabledInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<DisabledInterface>& impl); - ~JSCDisabledInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // defined(NO_ENABLE_CONDITIONAL_INTERFACE) - -#endif // JSCDisabledInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc deleted file mode 100644 index 94267fc..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc +++ /dev/null
@@ -1,812 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCEnumerationInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::EnumerationInterface; -using cobalt::bindings::testing::JSCEnumerationInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -// Declare and define these in the same namespace that the other overloads -// were brought into with the using declaration. -JSC::JSValue ToJSValue(JSCGlobalObject*, EnumerationInterface::TestEnum in_enum); -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, JSCExceptionState* exception_state, - EnumerationInterface::TestEnum* out_enum); -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSenumProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSenumProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue constructorJSEnumerationInterface(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCEnumerationInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCEnumerationInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCEnumerationInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCEnumerationInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCEnumerationInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCEnumerationInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCEnumerationInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCEnumerationInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCEnumerationInterface::InterfaceObject::s_info = { - "EnumerationInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCEnumerationInterface::InterfaceObject) -}; // JSCEnumerationInterface::InterfaceObject::s_info - -void JSCEnumerationInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCEnumerationInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCEnumerationInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSEnumerationInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "EnumerationInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCEnumerationInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCEnumerationInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCEnumerationInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCEnumerationInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCEnumerationInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCEnumerationInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCEnumerationInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCEnumerationInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCEnumerationInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCEnumerationInterface::Prototype::s_info = { - "EnumerationInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCEnumerationInterface::Prototype) -}; // JSCEnumerationInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCEnumerationInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCEnumerationInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCEnumerationInterface::Prototype class - -const JSC::HashTableValue JSCEnumerationInterface::property_table_values[] = { - { "enumProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSenumProperty), - reinterpret_cast<intptr_t>(setJSenumProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCEnumerationInterface::property_table_values - -// static -const JSC::HashTable JSCEnumerationInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCEnumerationInterface::property_table_prototype - -// static -const JSC::HashTable* JSCEnumerationInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCEnumerationInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCEnumerationInterface::NonTrivialStaticFields> - JSCEnumerationInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCEnumerationInterface::s_info = { - "EnumerationInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCEnumerationInterface) -}; // JSCEnumerationInterface::s_info - -// static -JSC::JSObject* JSCEnumerationInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCEnumerationInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCEnumerationInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCEnumerationInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == EnumerationInterface::EnumerationInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match EnumerationInterface::EnumerationInterfaceWrappableType()"; - return NULL; - } - EnumerationInterface* impl_ptr = - base::polymorphic_downcast<EnumerationInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCEnumerationInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCEnumerationInterface>(global_data.heap)) - JSCEnumerationInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCEnumerationInterface::JSCEnumerationInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<EnumerationInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCEnumerationInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCEnumerationInterface::~JSCEnumerationInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCEnumerationInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCEnumerationInterface* this_object = JSC::jsCast<JSCEnumerationInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCEnumerationInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCEnumerationInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCEnumerationInterface* this_object = JSC::jsCast<JSCEnumerationInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCEnumerationInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCEnumerationInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCEnumerationInterface* this_object = JSC::jsCast<JSCEnumerationInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCEnumerationInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSenumProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCEnumerationInterface", "get enumProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - EnumerationInterface* impl = - GetWrappableOrSetException<EnumerationInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->enum_property()); - return result; -} - -void setJSenumProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCEnumerationInterface", "set enumProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - EnumerationInterface* impl = - GetWrappableOrSetException<EnumerationInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<EnumerationInterface::TestEnum >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_enum_property(cobalt_value); - } -} - -JSC::EncodedJSValue constructorJSEnumerationInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<EnumerationInterface> new_object = - new EnumerationInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt - -namespace { -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, EnumerationInterface::TestEnum in_enum) { - JSC::JSGlobalData* global_data = &(global_object->globalData()); - switch (in_enum) { - case EnumerationInterface::kAlpha: return JSC::jsString(global_data, "alpha"); - case EnumerationInterface::kBeta: return JSC::jsString(global_data, "beta"); - case EnumerationInterface::kGamma: return JSC::jsString(global_data, "gamma"); - default: - NOTREACHED(); - return JSC::jsUndefined(); - } -} -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, JSCExceptionState* exception_state, - EnumerationInterface::TestEnum* out_enum) { - DCHECK_EQ(0, conversion_flags) << "Unexpected conversion flags."; - // JSValue -> IDL enum algorithm described here: - // http://heycam.github.io/webidl/#es-enumeration - - // 1. Let S be the result of calling ToString(V). - JSC::JSString* js_string = jsvalue.toString(exec_state); - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception converting value to string"; - return; - } - const WTF::String& wtf_string = js_string->tryGetValue(); - // 3. Return the enumeration value of type E that is equal to S. -if (wtf_string == "alpha") { - *out_enum = EnumerationInterface::kAlpha; - } else if (wtf_string == "beta") { - *out_enum = EnumerationInterface::kBeta; - } else if (wtf_string == "gamma") { - *out_enum = EnumerationInterface::kGamma; - } else { - // 2. If S is not one of E's enumeration values, then throw a TypeError. - JSC::throwTypeError(exec_state); - } -} -} // namespace
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.h deleted file mode 100644 index 3f1cd55..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCEnumerationInterface_h -#define JSCEnumerationInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/enumeration_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCEnumerationInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to EnumerationInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCEnumerationInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<EnumerationInterface>& impl); - ~JSCEnumerationInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCEnumerationInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc deleted file mode 100644 index 8ba3dbf..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc +++ /dev/null
@@ -1,764 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCExceptionObjectInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ErrorPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ExceptionObjectInterface; -using cobalt::bindings::testing::JSCExceptionObjectInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSerror( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSmessage( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCExceptionObjectInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCExceptionObjectInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCExceptionObjectInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExceptionObjectInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCExceptionObjectInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExceptionObjectInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCExceptionObjectInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExceptionObjectInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCExceptionObjectInterface::InterfaceObject::s_info = { - "ExceptionObjectInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExceptionObjectInterface::InterfaceObject) -}; // JSCExceptionObjectInterface::InterfaceObject::s_info - -void JSCExceptionObjectInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCExceptionObjectInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCExceptionObjectInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ExceptionObjectInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCExceptionObjectInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCExceptionObjectInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCExceptionObjectInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCExceptionObjectInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExceptionObjectInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCExceptionObjectInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExceptionObjectInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCExceptionObjectInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExceptionObjectInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCExceptionObjectInterface::Prototype::s_info = { - "ExceptionObjectInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExceptionObjectInterface::Prototype) -}; // JSCExceptionObjectInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCExceptionObjectInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCExceptionObjectInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->errorPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCExceptionObjectInterface::Prototype class - -const JSC::HashTableValue JSCExceptionObjectInterface::property_table_values[] = { - { "error", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSerror), - 0, - JSC::NoIntrinsic - }, - { "message", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSmessage), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExceptionObjectInterface::property_table_values - -// static -const JSC::HashTable JSCExceptionObjectInterface::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExceptionObjectInterface::property_table_prototype - -// static -const JSC::HashTable* JSCExceptionObjectInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExceptionObjectInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCExceptionObjectInterface::NonTrivialStaticFields> - JSCExceptionObjectInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCExceptionObjectInterface::s_info = { - "ExceptionObjectInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExceptionObjectInterface) -}; // JSCExceptionObjectInterface::s_info - -// static -JSC::JSObject* JSCExceptionObjectInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCExceptionObjectInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCExceptionObjectInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCExceptionObjectInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ExceptionObjectInterface::ExceptionObjectInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ExceptionObjectInterface::ExceptionObjectInterfaceWrappableType()"; - return NULL; - } - ExceptionObjectInterface* impl_ptr = - base::polymorphic_downcast<ExceptionObjectInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ErrorInstanceType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCExceptionObjectInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCExceptionObjectInterface>(global_data.heap)) - JSCExceptionObjectInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - global_data.heap.addFinalizer(wrapper, destroy); - return wrapper; -} -JSCExceptionObjectInterface::JSCExceptionObjectInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ExceptionObjectInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCExceptionObjectInterface::finishCreation(JSC::JSGlobalData& global_data) { - WTF::String error_message = ToWTFString(wrappable()->message()); - BaseClass::finishCreation(global_data, error_message); - DCHECK(inherits(&s_info)); -} - -JSCExceptionObjectInterface::~JSCExceptionObjectInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCExceptionObjectInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCExceptionObjectInterface* this_object = JSC::jsCast<JSCExceptionObjectInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCExceptionObjectInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCExceptionObjectInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCExceptionObjectInterface* this_object = JSC::jsCast<JSCExceptionObjectInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCExceptionObjectInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCExceptionObjectInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCExceptionObjectInterface* this_object = JSC::jsCast<JSCExceptionObjectInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCExceptionObjectInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSerror( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCExceptionObjectInterface", "get error"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ExceptionObjectInterface* impl = - GetWrappableOrSetException<ExceptionObjectInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->error()); - return result; -} - -JSC::JSValue getJSmessage( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCExceptionObjectInterface", "get message"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ExceptionObjectInterface* impl = - GetWrappableOrSetException<ExceptionObjectInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->message()); - return result; -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.h deleted file mode 100644 index 9e1f2bc..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.h +++ /dev/null
@@ -1,131 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCExceptionObjectInterface_h -#define JSCExceptionObjectInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/exception_object_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ErrorInstance.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCExceptionObjectInterface - : public script::javascriptcore::ExceptionBase { - typedef script::javascriptcore::ExceptionBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ExceptionObjectInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCExceptionObjectInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ExceptionObjectInterface>& impl); - ~JSCExceptionObjectInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCExceptionObjectInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc deleted file mode 100644 index 2dab46e..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc +++ /dev/null
@@ -1,805 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCExceptionsInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ExceptionsInterface; -using cobalt::bindings::testing::JSCExceptionsInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSattributeThrowsException( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSattributeThrowsException( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue constructorJSExceptionsInterface(JSC::ExecState*); -JSC::EncodedJSValue functionJSfunctionThrowsException(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCExceptionsInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCExceptionsInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCExceptionsInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExceptionsInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCExceptionsInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExceptionsInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCExceptionsInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExceptionsInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCExceptionsInterface::InterfaceObject::s_info = { - "ExceptionsInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExceptionsInterface::InterfaceObject) -}; // JSCExceptionsInterface::InterfaceObject::s_info - -void JSCExceptionsInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCExceptionsInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCExceptionsInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSExceptionsInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ExceptionsInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCExceptionsInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCExceptionsInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCExceptionsInterface::Prototype::property_table_values[] = { - { "functionThrowsException", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSfunctionThrowsException), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCExceptionsInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExceptionsInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCExceptionsInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExceptionsInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCExceptionsInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExceptionsInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCExceptionsInterface::Prototype::s_info = { - "ExceptionsInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExceptionsInterface::Prototype) -}; // JSCExceptionsInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCExceptionsInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCExceptionsInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCExceptionsInterface::Prototype class - -const JSC::HashTableValue JSCExceptionsInterface::property_table_values[] = { - { "attributeThrowsException", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSattributeThrowsException), - reinterpret_cast<intptr_t>(setJSattributeThrowsException), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExceptionsInterface::property_table_values - -// static -const JSC::HashTable JSCExceptionsInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExceptionsInterface::property_table_prototype - -// static -const JSC::HashTable* JSCExceptionsInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExceptionsInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCExceptionsInterface::NonTrivialStaticFields> - JSCExceptionsInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCExceptionsInterface::s_info = { - "ExceptionsInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExceptionsInterface) -}; // JSCExceptionsInterface::s_info - -// static -JSC::JSObject* JSCExceptionsInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCExceptionsInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCExceptionsInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCExceptionsInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ExceptionsInterface::ExceptionsInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ExceptionsInterface::ExceptionsInterfaceWrappableType()"; - return NULL; - } - ExceptionsInterface* impl_ptr = - base::polymorphic_downcast<ExceptionsInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCExceptionsInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCExceptionsInterface>(global_data.heap)) - JSCExceptionsInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCExceptionsInterface::JSCExceptionsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ExceptionsInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCExceptionsInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCExceptionsInterface::~JSCExceptionsInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCExceptionsInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCExceptionsInterface* this_object = JSC::jsCast<JSCExceptionsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCExceptionsInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCExceptionsInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCExceptionsInterface* this_object = JSC::jsCast<JSCExceptionsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCExceptionsInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCExceptionsInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCExceptionsInterface* this_object = JSC::jsCast<JSCExceptionsInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCExceptionsInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSattributeThrowsException( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCExceptionsInterface", "get attributeThrowsException"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ExceptionsInterface* impl = - GetWrappableOrSetException<ExceptionsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCExceptionState exception_state(global_object); - - JSC::JSValue result = ToJSValue( - global_object, - impl->attribute_throws_exception(&exception_state)); - if (exception_state.is_exception_set()) { - return JSC::throwError(exec_state, exception_state.exception_object()); - } - return result; -} - -void setJSattributeThrowsException( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCExceptionsInterface", "set attributeThrowsException"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ExceptionsInterface* impl = - GetWrappableOrSetException<ExceptionsInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<bool >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_attribute_throws_exception(cobalt_value, &exception_state); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - } - } -} - -JSC::EncodedJSValue constructorJSExceptionsInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<ExceptionsInterface> new_object = - new ExceptionsInterface(&exception_state); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} - -JSC::EncodedJSValue functionJSfunctionThrowsException( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCExceptionsInterface", "call functionThrowsException"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - ExceptionsInterface* impl = - GetWrappableOrSetException<ExceptionsInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->FunctionThrowsException(&exception_state); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.h deleted file mode 100644 index 8cf99e2..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCExceptionsInterface_h -#define JSCExceptionsInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/exceptions_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCExceptionsInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ExceptionsInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCExceptionsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ExceptionsInterface>& impl); - ~JSCExceptionsInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCExceptionsInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc deleted file mode 100644 index 50b3d7a..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc +++ /dev/null
@@ -1,729 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCExtendedIDLAttributesInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ExtendedIDLAttributesInterface; -using cobalt::bindings::testing::JSCExtendedIDLAttributesInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue functionJScallWithSettings(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCExtendedIDLAttributesInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCExtendedIDLAttributesInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCExtendedIDLAttributesInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExtendedIDLAttributesInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCExtendedIDLAttributesInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExtendedIDLAttributesInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCExtendedIDLAttributesInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExtendedIDLAttributesInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCExtendedIDLAttributesInterface::InterfaceObject::s_info = { - "ExtendedIDLAttributesInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExtendedIDLAttributesInterface::InterfaceObject) -}; // JSCExtendedIDLAttributesInterface::InterfaceObject::s_info - -void JSCExtendedIDLAttributesInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCExtendedIDLAttributesInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCExtendedIDLAttributesInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ExtendedIDLAttributesInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCExtendedIDLAttributesInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCExtendedIDLAttributesInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCExtendedIDLAttributesInterface::Prototype::property_table_values[] = { - { "callWithSettings", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJScallWithSettings), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCExtendedIDLAttributesInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExtendedIDLAttributesInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCExtendedIDLAttributesInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExtendedIDLAttributesInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCExtendedIDLAttributesInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExtendedIDLAttributesInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCExtendedIDLAttributesInterface::Prototype::s_info = { - "ExtendedIDLAttributesInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExtendedIDLAttributesInterface::Prototype) -}; // JSCExtendedIDLAttributesInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCExtendedIDLAttributesInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCExtendedIDLAttributesInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCExtendedIDLAttributesInterface::Prototype class - -const JSC::HashTableValue JSCExtendedIDLAttributesInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCExtendedIDLAttributesInterface::property_table_values - -// static -const JSC::HashTable JSCExtendedIDLAttributesInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCExtendedIDLAttributesInterface::property_table_prototype - -// static -const JSC::HashTable* JSCExtendedIDLAttributesInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCExtendedIDLAttributesInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCExtendedIDLAttributesInterface::NonTrivialStaticFields> - JSCExtendedIDLAttributesInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCExtendedIDLAttributesInterface::s_info = { - "ExtendedIDLAttributesInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCExtendedIDLAttributesInterface) -}; // JSCExtendedIDLAttributesInterface::s_info - -// static -JSC::JSObject* JSCExtendedIDLAttributesInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCExtendedIDLAttributesInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCExtendedIDLAttributesInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCExtendedIDLAttributesInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ExtendedIDLAttributesInterface::ExtendedIDLAttributesInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ExtendedIDLAttributesInterface::ExtendedIDLAttributesInterfaceWrappableType()"; - return NULL; - } - ExtendedIDLAttributesInterface* impl_ptr = - base::polymorphic_downcast<ExtendedIDLAttributesInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCExtendedIDLAttributesInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCExtendedIDLAttributesInterface>(global_data.heap)) - JSCExtendedIDLAttributesInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCExtendedIDLAttributesInterface::JSCExtendedIDLAttributesInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ExtendedIDLAttributesInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCExtendedIDLAttributesInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCExtendedIDLAttributesInterface::~JSCExtendedIDLAttributesInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCExtendedIDLAttributesInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCExtendedIDLAttributesInterface* this_object = JSC::jsCast<JSCExtendedIDLAttributesInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCExtendedIDLAttributesInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCExtendedIDLAttributesInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCExtendedIDLAttributesInterface* this_object = JSC::jsCast<JSCExtendedIDLAttributesInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCExtendedIDLAttributesInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCExtendedIDLAttributesInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCExtendedIDLAttributesInterface* this_object = JSC::jsCast<JSCExtendedIDLAttributesInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCExtendedIDLAttributesInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue functionJScallWithSettings( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCExtendedIDLAttributesInterface", "call callWithSettings"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - ExtendedIDLAttributesInterface* impl = - GetWrappableOrSetException<ExtendedIDLAttributesInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->CallWithSettings(global_object->GetEnvironmentSettings()); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.h deleted file mode 100644 index 42e2316..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCExtendedIDLAttributesInterface_h -#define JSCExtendedIDLAttributesInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/extended_idl_attributes_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCExtendedIDLAttributesInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ExtendedIDLAttributesInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCExtendedIDLAttributesInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ExtendedIDLAttributesInterface>& impl); - ~JSCExtendedIDLAttributesInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCExtendedIDLAttributesInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc deleted file mode 100644 index 035124a..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc +++ /dev/null
@@ -1,838 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCGarbageCollectionTestInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.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" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -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::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -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 -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#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 -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCGarbageCollectionTestInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCGarbageCollectionTestInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCGarbageCollectionTestInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGarbageCollectionTestInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCGarbageCollectionTestInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGarbageCollectionTestInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCGarbageCollectionTestInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGarbageCollectionTestInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCGarbageCollectionTestInterface::InterfaceObject::s_info = { - "GarbageCollectionTestInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGarbageCollectionTestInterface::InterfaceObject) -}; // JSCGarbageCollectionTestInterface::InterfaceObject::s_info - -void JSCGarbageCollectionTestInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCGarbageCollectionTestInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCGarbageCollectionTestInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSGarbageCollectionTestInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "GarbageCollectionTestInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCGarbageCollectionTestInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCGarbageCollectionTestInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCGarbageCollectionTestInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCGarbageCollectionTestInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGarbageCollectionTestInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCGarbageCollectionTestInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGarbageCollectionTestInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCGarbageCollectionTestInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGarbageCollectionTestInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCGarbageCollectionTestInterface::Prototype::s_info = { - "GarbageCollectionTestInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGarbageCollectionTestInterface::Prototype) -}; // JSCGarbageCollectionTestInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCGarbageCollectionTestInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCGarbageCollectionTestInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// 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 = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGarbageCollectionTestInterface::property_table_prototype - -// static -const JSC::HashTable* JSCGarbageCollectionTestInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGarbageCollectionTestInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCGarbageCollectionTestInterface::NonTrivialStaticFields> - JSCGarbageCollectionTestInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCGarbageCollectionTestInterface::s_info = { - "GarbageCollectionTestInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGarbageCollectionTestInterface) -}; // JSCGarbageCollectionTestInterface::s_info - -// static -JSC::JSObject* JSCGarbageCollectionTestInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCGarbageCollectionTestInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCGarbageCollectionTestInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCGarbageCollectionTestInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == GarbageCollectionTestInterface::GarbageCollectionTestInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match GarbageCollectionTestInterface::GarbageCollectionTestInterfaceWrappableType()"; - return NULL; - } - GarbageCollectionTestInterface* impl_ptr = - base::polymorphic_downcast<GarbageCollectionTestInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCGarbageCollectionTestInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCGarbageCollectionTestInterface>(global_data.heap)) - JSCGarbageCollectionTestInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCGarbageCollectionTestInterface::JSCGarbageCollectionTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - 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) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCGarbageCollectionTestInterface::~JSCGarbageCollectionTestInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCGarbageCollectionTestInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCGarbageCollectionTestInterface* this_object = JSC::jsCast<JSCGarbageCollectionTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCGarbageCollectionTestInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCGarbageCollectionTestInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCGarbageCollectionTestInterface* this_object = JSC::jsCast<JSCGarbageCollectionTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCGarbageCollectionTestInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCGarbageCollectionTestInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCGarbageCollectionTestInterface* this_object = JSC::jsCast<JSCGarbageCollectionTestInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCGarbageCollectionTestInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -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()); - JSCExceptionState exception_state(global_object); - scoped_refptr<GarbageCollectionTestInterface> new_object = - new GarbageCollectionTestInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.h deleted file mode 100644 index 58ef5c2..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCGarbageCollectionTestInterface_h -#define JSCGarbageCollectionTestInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/garbage_collection_test_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCGarbageCollectionTestInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to GarbageCollectionTestInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCGarbageCollectionTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<GarbageCollectionTestInterface>& impl); - ~JSCGarbageCollectionTestInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCGarbageCollectionTestInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc deleted file mode 100644 index 25312f8..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc +++ /dev/null
@@ -1,730 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCGetOpaqueRootInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::GetOpaqueRootInterface; -using cobalt::bindings::testing::JSCGetOpaqueRootInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue constructorJSGetOpaqueRootInterface(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -scoped_refptr<Wrappable> GetOpaqueRootFromWrappable( - const scoped_refptr<Wrappable>& wrappable) { - GetOpaqueRootInterface* impl = - base::polymorphic_downcast<GetOpaqueRootInterface*>(wrappable.get()); - Wrappable* opaque_root = impl->get_opaque_root_function_name(); - return make_scoped_refptr<Wrappable>(opaque_root); -} -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCGetOpaqueRootInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCGetOpaqueRootInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCGetOpaqueRootInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGetOpaqueRootInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCGetOpaqueRootInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGetOpaqueRootInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCGetOpaqueRootInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGetOpaqueRootInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCGetOpaqueRootInterface::InterfaceObject::s_info = { - "GetOpaqueRootInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGetOpaqueRootInterface::InterfaceObject) -}; // JSCGetOpaqueRootInterface::InterfaceObject::s_info - -void JSCGetOpaqueRootInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCGetOpaqueRootInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCGetOpaqueRootInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSGetOpaqueRootInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "GetOpaqueRootInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCGetOpaqueRootInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCGetOpaqueRootInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCGetOpaqueRootInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCGetOpaqueRootInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGetOpaqueRootInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCGetOpaqueRootInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGetOpaqueRootInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCGetOpaqueRootInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGetOpaqueRootInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCGetOpaqueRootInterface::Prototype::s_info = { - "GetOpaqueRootInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGetOpaqueRootInterface::Prototype) -}; // JSCGetOpaqueRootInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCGetOpaqueRootInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCGetOpaqueRootInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCGetOpaqueRootInterface::Prototype class - -const JSC::HashTableValue JSCGetOpaqueRootInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGetOpaqueRootInterface::property_table_values - -// static -const JSC::HashTable JSCGetOpaqueRootInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGetOpaqueRootInterface::property_table_prototype - -// static -const JSC::HashTable* JSCGetOpaqueRootInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGetOpaqueRootInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCGetOpaqueRootInterface::NonTrivialStaticFields> - JSCGetOpaqueRootInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCGetOpaqueRootInterface::s_info = { - "GetOpaqueRootInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGetOpaqueRootInterface) -}; // JSCGetOpaqueRootInterface::s_info - -// static -JSC::JSObject* JSCGetOpaqueRootInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCGetOpaqueRootInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCGetOpaqueRootInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCGetOpaqueRootInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == GetOpaqueRootInterface::GetOpaqueRootInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match GetOpaqueRootInterface::GetOpaqueRootInterfaceWrappableType()"; - return NULL; - } - GetOpaqueRootInterface* impl_ptr = - base::polymorphic_downcast<GetOpaqueRootInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCGetOpaqueRootInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCGetOpaqueRootInterface>(global_data.heap)) - JSCGetOpaqueRootInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCGetOpaqueRootInterface::JSCGetOpaqueRootInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<GetOpaqueRootInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { - set_get_opaque_root_function(base::Bind(&GetOpaqueRootFromWrappable)); -} - -void JSCGetOpaqueRootInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCGetOpaqueRootInterface::~JSCGetOpaqueRootInterface() { - // Empty destructor -} - -void JSCGetOpaqueRootInterface::visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor) { - WrapperBase<JSC::JSDestructibleObject, Wrappable>::visitChildren( - cell, visitor); - - JSCGlobalObject* global_object = JSC::jsCast<JSCGlobalObject*>( - JSC::jsCast<JSObject*>(cell)->globalObject()); - - GetOpaqueRootInterface* impl = base::polymorphic_downcast<GetOpaqueRootInterface*>( - JSC::jsCast<WrapperBase*>(cell)->wrappable().get()); - - Wrappable* opaque_root0 = impl->add_opaque_root_function_name(); - if (opaque_root0) { - visitor.addOpaqueRoot(opaque_root0); - } -} - -// Look up property slot for querying property values. -bool JSCGetOpaqueRootInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCGetOpaqueRootInterface* this_object = JSC::jsCast<JSCGetOpaqueRootInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCGetOpaqueRootInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCGetOpaqueRootInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCGetOpaqueRootInterface* this_object = JSC::jsCast<JSCGetOpaqueRootInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCGetOpaqueRootInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCGetOpaqueRootInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCGetOpaqueRootInterface* this_object = JSC::jsCast<JSCGetOpaqueRootInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCGetOpaqueRootInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue constructorJSGetOpaqueRootInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<GetOpaqueRootInterface> new_object = - new GetOpaqueRootInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.h deleted file mode 100644 index 4e88b6c..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.h +++ /dev/null
@@ -1,132 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCGetOpaqueRootInterface_h -#define JSCGetOpaqueRootInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/get_opaque_root_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCGetOpaqueRootInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to GetOpaqueRootInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCGetOpaqueRootInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<GetOpaqueRootInterface>& impl); - ~JSCGetOpaqueRootInterface(); - - static void visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCGetOpaqueRootInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc b/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc deleted file mode 100644 index fe08052..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc +++ /dev/null
@@ -1,729 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCGlobalInterfaceParent.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::GlobalInterfaceParent; -using cobalt::bindings::testing::JSCGlobalInterfaceParent; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue functionJSparentOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCGlobalInterfaceParent::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCGlobalInterfaceParent"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCGlobalInterfaceParent::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGlobalInterfaceParent::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCGlobalInterfaceParent::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGlobalInterfaceParent::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCGlobalInterfaceParent::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGlobalInterfaceParent::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCGlobalInterfaceParent::InterfaceObject::s_info = { - "GlobalInterfaceParentConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGlobalInterfaceParent::InterfaceObject) -}; // JSCGlobalInterfaceParent::InterfaceObject::s_info - -void JSCGlobalInterfaceParent::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCGlobalInterfaceParent::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCGlobalInterfaceParent::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "GlobalInterfaceParent"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCGlobalInterfaceParent::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCGlobalInterfaceParent::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCGlobalInterfaceParent::Prototype::property_table_values[] = { - { "parentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSparentOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCGlobalInterfaceParent::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGlobalInterfaceParent::Prototype::property_table_values - -// static -const JSC::HashTable JSCGlobalInterfaceParent::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGlobalInterfaceParent::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCGlobalInterfaceParent::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGlobalInterfaceParent::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCGlobalInterfaceParent::Prototype::s_info = { - "GlobalInterfaceParentPrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGlobalInterfaceParent::Prototype) -}; // JSCGlobalInterfaceParent::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCGlobalInterfaceParent::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCGlobalInterfaceParent::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCGlobalInterfaceParent::Prototype class - -const JSC::HashTableValue JSCGlobalInterfaceParent::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCGlobalInterfaceParent::property_table_values - -// static -const JSC::HashTable JSCGlobalInterfaceParent::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCGlobalInterfaceParent::property_table_prototype - -// static -const JSC::HashTable* JSCGlobalInterfaceParent::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCGlobalInterfaceParent::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCGlobalInterfaceParent::NonTrivialStaticFields> - JSCGlobalInterfaceParent::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCGlobalInterfaceParent::s_info = { - "GlobalInterfaceParent", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCGlobalInterfaceParent) -}; // JSCGlobalInterfaceParent::s_info - -// static -JSC::JSObject* JSCGlobalInterfaceParent::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCGlobalInterfaceParent::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCGlobalInterfaceParent::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCGlobalInterfaceParent::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == GlobalInterfaceParent::GlobalInterfaceParentWrappableType())) { - NOTREACHED() << "Type of wrappable does not match GlobalInterfaceParent::GlobalInterfaceParentWrappableType()"; - return NULL; - } - GlobalInterfaceParent* impl_ptr = - base::polymorphic_downcast<GlobalInterfaceParent*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCGlobalInterfaceParent* wrapper = - new (NotNull, JSC::allocateCell<JSCGlobalInterfaceParent>(global_data.heap)) - JSCGlobalInterfaceParent( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCGlobalInterfaceParent::JSCGlobalInterfaceParent( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<GlobalInterfaceParent>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCGlobalInterfaceParent::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCGlobalInterfaceParent::~JSCGlobalInterfaceParent() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCGlobalInterfaceParent::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCGlobalInterfaceParent* this_object = JSC::jsCast<JSCGlobalInterfaceParent*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCGlobalInterfaceParent, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCGlobalInterfaceParent::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCGlobalInterfaceParent* this_object = JSC::jsCast<JSCGlobalInterfaceParent*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCGlobalInterfaceParent, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCGlobalInterfaceParent::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCGlobalInterfaceParent* this_object = JSC::jsCast<JSCGlobalInterfaceParent*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCGlobalInterfaceParent, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue functionJSparentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCGlobalInterfaceParent", "call parentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - GlobalInterfaceParent* impl = - GetWrappableOrSetException<GlobalInterfaceParent>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->ParentOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.h b/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.h deleted file mode 100644 index ebbbfa9..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCGlobalInterfaceParent_h -#define JSCGlobalInterfaceParent_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/global_interface_parent.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCGlobalInterfaceParent - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to GlobalInterfaceParent. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCGlobalInterfaceParent( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<GlobalInterfaceParent>& impl); - ~JSCGlobalInterfaceParent(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCGlobalInterfaceParent_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc deleted file mode 100644 index 1049b03..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc +++ /dev/null
@@ -1,993 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCIndexedGetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::IndexedGetterInterface; -using cobalt::bindings::testing::JSCIndexedGetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::EncodedJSValue functionJSindexedDeleter(JSC::ExecState*); -JSC::EncodedJSValue functionJSindexedGetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSindexedSetter(JSC::ExecState*); -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index); -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCIndexedGetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCIndexedGetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCIndexedGetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCIndexedGetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCIndexedGetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCIndexedGetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCIndexedGetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCIndexedGetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCIndexedGetterInterface::InterfaceObject::s_info = { - "IndexedGetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCIndexedGetterInterface::InterfaceObject) -}; // JSCIndexedGetterInterface::InterfaceObject::s_info - -void JSCIndexedGetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCIndexedGetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCIndexedGetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "IndexedGetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCIndexedGetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCIndexedGetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCIndexedGetterInterface::Prototype::property_table_values[] = { - { "indexedDeleter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSindexedDeleter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "indexedGetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSindexedGetter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "indexedSetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSindexedSetter), - static_cast<intptr_t>(2), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCIndexedGetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCIndexedGetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCIndexedGetterInterface::Prototype::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCIndexedGetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCIndexedGetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCIndexedGetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCIndexedGetterInterface::Prototype::s_info = { - "IndexedGetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCIndexedGetterInterface::Prototype) -}; // JSCIndexedGetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCIndexedGetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCIndexedGetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCIndexedGetterInterface::Prototype class - -const JSC::HashTableValue JSCIndexedGetterInterface::property_table_values[] = { - { "length", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSlength), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCIndexedGetterInterface::property_table_values - -// static -const JSC::HashTable JSCIndexedGetterInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCIndexedGetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCIndexedGetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCIndexedGetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCIndexedGetterInterface::NonTrivialStaticFields> - JSCIndexedGetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCIndexedGetterInterface::s_info = { - "IndexedGetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCIndexedGetterInterface) -}; // JSCIndexedGetterInterface::s_info - -// static -JSC::JSObject* JSCIndexedGetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCIndexedGetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCIndexedGetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCIndexedGetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == IndexedGetterInterface::IndexedGetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match IndexedGetterInterface::IndexedGetterInterfaceWrappableType()"; - return NULL; - } - IndexedGetterInterface* impl_ptr = - base::polymorphic_downcast<IndexedGetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCIndexedGetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCIndexedGetterInterface>(global_data.heap)) - JSCIndexedGetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCIndexedGetterInterface::JSCIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<IndexedGetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCIndexedGetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCIndexedGetterInterface::~JSCIndexedGetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCIndexedGetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCIndexedGetterInterface* this_object = JSC::jsCast<JSCIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCIndexedGetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCIndexedGetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (index < impl->length()) { - slot.setCustomIndex(cell, index, IndexedPropertyGetter); - return true; - } - if (s_has_named_getter) { - JSCIndexedGetterInterface* this_object = JSC::jsCast<JSCIndexedGetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCIndexedGetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, object); - if (impl) { - for (uint32 i = 0; i < impl->length(); ++i) { - property_names.add(JSC::Identifier::from(exec_state, i)); - } - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCIndexedGetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCIndexedGetterInterface* this_object = JSC::jsCast<JSCIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCIndexedGetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCIndexedGetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (index < impl->length()) { - IndexedPropertySetter(cell, exec_state, index, value); - property_handled = true; - } - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCIndexedGetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCIndexedGetterInterface", "deletePropertyByIndex"); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, cell); - if (impl) { - // https://heycam.github.io/webidl/#delete - // Return true if index is not a supported property index. - return index >= impl->length(); - } - return false; -} - -bool JSCIndexedGetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCIndexedGetterInterface* this_object = JSC::jsCast<JSCIndexedGetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCIndexedGetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCIndexedGetterInterface", "get length"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->length()); - return result; -} - -JSC::EncodedJSValue functionJSindexedDeleter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCIndexedGetterInterface", "call indexedDeleter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->IndexedDeleter(index); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSindexedGetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCIndexedGetterInterface", "call indexedGetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - TypeTraits<uint32_t >::ReturnType return_value = impl->IndexedGetter(index); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSindexedSetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCIndexedGetterInterface", "call indexedSetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - TypeTraits<uint32_t >::ConversionType value; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->IndexedSetter(index, value); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index) { - TRACE_EVENT0("JSCIndexedGetterInterface", "IndexedPropertyGetter"); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSValue result = ToJSValue( - global_object, - impl->IndexedGetter(index)); - return result; -} - -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCIndexedGetterInterface", "IndexedPropertySetter"); - IndexedGetterInterface* impl = - GetWrappableOrSetException<IndexedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - uint32_t value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->IndexedSetter(index, value); -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.h deleted file mode 100644 index 563e4b9..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.h +++ /dev/null
@@ -1,144 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCIndexedGetterInterface_h -#define JSCIndexedGetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/indexed_getter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCIndexedGetterInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to IndexedGetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<IndexedGetterInterface>& impl); - ~JSCIndexedGetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCIndexedGetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc b/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc deleted file mode 100644 index 987a767..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc +++ /dev/null
@@ -1,732 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCInterfaceWithUnsupportedProperties.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::InterfaceWithUnsupportedProperties; -using cobalt::bindings::testing::JSCInterfaceWithUnsupportedProperties; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSsupportedAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCInterfaceWithUnsupportedProperties::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCInterfaceWithUnsupportedProperties"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCInterfaceWithUnsupportedProperties::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCInterfaceWithUnsupportedProperties::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCInterfaceWithUnsupportedProperties::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCInterfaceWithUnsupportedProperties::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCInterfaceWithUnsupportedProperties::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCInterfaceWithUnsupportedProperties::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCInterfaceWithUnsupportedProperties::InterfaceObject::s_info = { - "InterfaceWithUnsupportedPropertiesConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCInterfaceWithUnsupportedProperties::InterfaceObject) -}; // JSCInterfaceWithUnsupportedProperties::InterfaceObject::s_info - -void JSCInterfaceWithUnsupportedProperties::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCInterfaceWithUnsupportedProperties::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCInterfaceWithUnsupportedProperties::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "InterfaceWithUnsupportedProperties"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCInterfaceWithUnsupportedProperties::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCInterfaceWithUnsupportedProperties::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCInterfaceWithUnsupportedProperties::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCInterfaceWithUnsupportedProperties::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCInterfaceWithUnsupportedProperties::Prototype::property_table_values - -// static -const JSC::HashTable JSCInterfaceWithUnsupportedProperties::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCInterfaceWithUnsupportedProperties::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCInterfaceWithUnsupportedProperties::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCInterfaceWithUnsupportedProperties::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCInterfaceWithUnsupportedProperties::Prototype::s_info = { - "InterfaceWithUnsupportedPropertiesPrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCInterfaceWithUnsupportedProperties::Prototype) -}; // JSCInterfaceWithUnsupportedProperties::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCInterfaceWithUnsupportedProperties::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCInterfaceWithUnsupportedProperties::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCInterfaceWithUnsupportedProperties::Prototype class - -const JSC::HashTableValue JSCInterfaceWithUnsupportedProperties::property_table_values[] = { - { "supportedAttribute", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSsupportedAttribute), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCInterfaceWithUnsupportedProperties::property_table_values - -// static -const JSC::HashTable JSCInterfaceWithUnsupportedProperties::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCInterfaceWithUnsupportedProperties::property_table_prototype - -// static -const JSC::HashTable* JSCInterfaceWithUnsupportedProperties::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCInterfaceWithUnsupportedProperties::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCInterfaceWithUnsupportedProperties::NonTrivialStaticFields> - JSCInterfaceWithUnsupportedProperties::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCInterfaceWithUnsupportedProperties::s_info = { - "InterfaceWithUnsupportedProperties", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCInterfaceWithUnsupportedProperties) -}; // JSCInterfaceWithUnsupportedProperties::s_info - -// static -JSC::JSObject* JSCInterfaceWithUnsupportedProperties::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCInterfaceWithUnsupportedProperties::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCInterfaceWithUnsupportedProperties::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCInterfaceWithUnsupportedProperties::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == InterfaceWithUnsupportedProperties::InterfaceWithUnsupportedPropertiesWrappableType())) { - NOTREACHED() << "Type of wrappable does not match InterfaceWithUnsupportedProperties::InterfaceWithUnsupportedPropertiesWrappableType()"; - return NULL; - } - InterfaceWithUnsupportedProperties* impl_ptr = - base::polymorphic_downcast<InterfaceWithUnsupportedProperties*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCInterfaceWithUnsupportedProperties* wrapper = - new (NotNull, JSC::allocateCell<JSCInterfaceWithUnsupportedProperties>(global_data.heap)) - JSCInterfaceWithUnsupportedProperties( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCInterfaceWithUnsupportedProperties::JSCInterfaceWithUnsupportedProperties( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<InterfaceWithUnsupportedProperties>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCInterfaceWithUnsupportedProperties::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCInterfaceWithUnsupportedProperties::~JSCInterfaceWithUnsupportedProperties() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCInterfaceWithUnsupportedProperties::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCInterfaceWithUnsupportedProperties* this_object = JSC::jsCast<JSCInterfaceWithUnsupportedProperties*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCInterfaceWithUnsupportedProperties, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCInterfaceWithUnsupportedProperties::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCInterfaceWithUnsupportedProperties* this_object = JSC::jsCast<JSCInterfaceWithUnsupportedProperties*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCInterfaceWithUnsupportedProperties, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCInterfaceWithUnsupportedProperties::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCInterfaceWithUnsupportedProperties* this_object = JSC::jsCast<JSCInterfaceWithUnsupportedProperties*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCInterfaceWithUnsupportedProperties, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSsupportedAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCInterfaceWithUnsupportedProperties", "get supportedAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - InterfaceWithUnsupportedProperties* impl = - GetWrappableOrSetException<InterfaceWithUnsupportedProperties>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->supported_attribute()); - return result; -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.h b/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.h deleted file mode 100644 index 5d55bde..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCInterfaceWithUnsupportedProperties_h -#define JSCInterfaceWithUnsupportedProperties_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/interface_with_unsupported_properties.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCInterfaceWithUnsupportedProperties - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to InterfaceWithUnsupportedProperties. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCInterfaceWithUnsupportedProperties( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<InterfaceWithUnsupportedProperties>& impl); - ~JSCInterfaceWithUnsupportedProperties(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCInterfaceWithUnsupportedProperties_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc deleted file mode 100644 index 1825c9e..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc +++ /dev/null
@@ -1,870 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNamedConstructorInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NamedConstructorInterface; -using cobalt::bindings::testing::JSCNamedConstructorInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue constructorJSNamedConstructorInterface(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNamedConstructorInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNamedConstructorInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedConstructorInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedConstructorInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNamedConstructorInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedConstructorInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNamedConstructorInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedConstructorInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNamedConstructorInterface::InterfaceObject::s_info = { - "NamedConstructorInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedConstructorInterface::InterfaceObject) -}; // JSCNamedConstructorInterface::InterfaceObject::s_info - -void JSCNamedConstructorInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNamedConstructorInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNamedConstructorInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSNamedConstructorInterface); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NamedConstructorInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNamedConstructorInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNamedConstructorInterface::NamedInterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - NamedInterfaceObject* this_object = JSC::jsCast<NamedInterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - NamedInterfaceObject* this_object = JSC::jsCast<NamedInterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<NamedInterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNamedConstructorInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - NamedInterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedConstructorInterface::NamedInterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedConstructorInterface::NamedInterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNamedConstructorInterface::NamedInterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedConstructorInterface::NamedInterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNamedConstructorInterface::NamedInterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedConstructorInterface::NamedInterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNamedConstructorInterface::NamedInterfaceObject::s_info = { - "NamedConstructorInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedConstructorInterface::NamedInterfaceObject) -}; // JSCNamedConstructorInterface::NamedInterfaceObject::s_info - -void JSCNamedConstructorInterface::NamedInterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNamedConstructorInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNamedConstructorInterface::NamedInterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSNamedConstructorInterface); - - // Create the new interface object. - NamedInterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<NamedInterfaceObject>(global_data.heap)) - NamedInterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "SomeNamedConstructor"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNamedConstructorInterface::NamedInterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNamedConstructorInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedConstructorInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNamedConstructorInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedConstructorInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNamedConstructorInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedConstructorInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNamedConstructorInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedConstructorInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNamedConstructorInterface::Prototype::s_info = { - "NamedConstructorInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedConstructorInterface::Prototype) -}; // JSCNamedConstructorInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNamedConstructorInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNamedConstructorInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNamedConstructorInterface::Prototype class - -const JSC::HashTableValue JSCNamedConstructorInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedConstructorInterface::property_table_values - -// static -const JSC::HashTable JSCNamedConstructorInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedConstructorInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNamedConstructorInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedConstructorInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNamedConstructorInterface::NonTrivialStaticFields> - JSCNamedConstructorInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNamedConstructorInterface::s_info = { - "NamedConstructorInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedConstructorInterface) -}; // JSCNamedConstructorInterface::s_info - -// static -JSC::JSObject* JSCNamedConstructorInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNamedConstructorInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNamedConstructorInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} -JSC::JSObject* JSCNamedConstructorInterface::GetNamedConstructor( - JSC::ExecState* exec_state) { - return NamedInterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSObject* JSCNamedConstructorInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NamedConstructorInterface::NamedConstructorInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NamedConstructorInterface::NamedConstructorInterfaceWrappableType()"; - return NULL; - } - NamedConstructorInterface* impl_ptr = - base::polymorphic_downcast<NamedConstructorInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNamedConstructorInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNamedConstructorInterface>(global_data.heap)) - JSCNamedConstructorInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNamedConstructorInterface::JSCNamedConstructorInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NamedConstructorInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNamedConstructorInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNamedConstructorInterface::~JSCNamedConstructorInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNamedConstructorInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNamedConstructorInterface* this_object = JSC::jsCast<JSCNamedConstructorInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNamedConstructorInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCNamedConstructorInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNamedConstructorInterface* this_object = JSC::jsCast<JSCNamedConstructorInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNamedConstructorInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCNamedConstructorInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNamedConstructorInterface* this_object = JSC::jsCast<JSCNamedConstructorInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNamedConstructorInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue constructorJSNamedConstructorInterface(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<NamedConstructorInterface> new_object = - new NamedConstructorInterface(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.h deleted file mode 100644 index b0af676..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.h +++ /dev/null
@@ -1,134 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNamedConstructorInterface_h -#define JSCNamedConstructorInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/named_constructor_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNamedConstructorInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // Get the named constructor for this wrapper class. - static JSC::JSObject* GetNamedConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NamedConstructorInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNamedConstructorInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NamedConstructorInterface>& impl); - ~JSCNamedConstructorInterface(); - - private: - class InterfaceObject; - class NamedInterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNamedConstructorInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc deleted file mode 100644 index 27a6fa1..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc +++ /dev/null
@@ -1,984 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNamedGetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_property_enumerator.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NamedGetterInterface; -using cobalt::bindings::testing::JSCNamedGetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue functionJSnamedDeleter(JSC::ExecState*); -JSC::EncodedJSValue functionJSnamedGetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSnamedSetter(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = true; -const bool s_has_named_setter = true; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNamedGetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNamedGetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedGetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedGetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNamedGetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedGetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNamedGetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedGetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNamedGetterInterface::InterfaceObject::s_info = { - "NamedGetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedGetterInterface::InterfaceObject) -}; // JSCNamedGetterInterface::InterfaceObject::s_info - -void JSCNamedGetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNamedGetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNamedGetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NamedGetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNamedGetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNamedGetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedGetterInterface::Prototype::property_table_values[] = { - { "namedDeleter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnamedDeleter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "namedGetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnamedGetter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "namedSetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnamedSetter), - static_cast<intptr_t>(2), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNamedGetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedGetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNamedGetterInterface::Prototype::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedGetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNamedGetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedGetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNamedGetterInterface::Prototype::s_info = { - "NamedGetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedGetterInterface::Prototype) -}; // JSCNamedGetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNamedGetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNamedGetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNamedGetterInterface::Prototype class - -const JSC::HashTableValue JSCNamedGetterInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedGetterInterface::property_table_values - -// static -const JSC::HashTable JSCNamedGetterInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedGetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNamedGetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedGetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNamedGetterInterface::NonTrivialStaticFields> - JSCNamedGetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNamedGetterInterface::s_info = { - "NamedGetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedGetterInterface) -}; // JSCNamedGetterInterface::s_info - -// static -JSC::JSObject* JSCNamedGetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNamedGetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNamedGetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCNamedGetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NamedGetterInterface::NamedGetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NamedGetterInterface::NamedGetterInterfaceWrappableType()"; - return NULL; - } - NamedGetterInterface* impl_ptr = - base::polymorphic_downcast<NamedGetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNamedGetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNamedGetterInterface>(global_data.heap)) - JSCNamedGetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNamedGetterInterface::JSCNamedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NamedGetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNamedGetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNamedGetterInterface::~JSCNamedGetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNamedGetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNamedGetterInterface* this_object = JSC::jsCast<JSCNamedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNamedGetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCNamedGetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (s_has_named_getter) { - JSCNamedGetterInterface* this_object = JSC::jsCast<JSCNamedGetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCNamedGetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, object); - if (impl) { - JSCPropertyEnumerator enumerator(exec_state, &property_names); - impl->EnumerateNamedProperties(&enumerator); - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCNamedGetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNamedGetterInterface* this_object = JSC::jsCast<JSCNamedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNamedGetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCNamedGetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCNamedGetterInterface::deleteProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - TRACE_EVENT1("JSCNamedGetterInterface", "deleteProperty", "property", - TRACE_STR_COPY(WTF::String(property_name.publicName()).utf8().data())); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (impl) { - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deleteProperty(cell, exec_state, property_name); - } - return false; -} - -bool JSCNamedGetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCNamedGetterInterface", "deletePropertyByIndex"); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (impl) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deletePropertyByIndex(cell, exec_state, index); - } - return false; -} - -bool JSCNamedGetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNamedGetterInterface* this_object = JSC::jsCast<JSCNamedGetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNamedGetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue functionJSnamedDeleter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedGetterInterface", "call namedDeleter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType name; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &name); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NamedDeleter(name); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSnamedGetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedGetterInterface", "call namedGetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType name; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &name); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - TypeTraits<std::string >::ReturnType return_value = impl->NamedGetter(name); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSnamedSetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedGetterInterface", "call namedSetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType name; - TypeTraits<std::string >::ConversionType value; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &name); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NamedSetter(name, value); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNamedGetterInterface", "NamedPropertyGetter"); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - JSC::JSValue result = ToJSValue( - global_object, - impl->NamedGetter(property_name_utf8)); - return result; -} - -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - return impl->CanQueryNamedProperty(property_name_utf8); -} - -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCNamedGetterInterface", "NamedPropertySetter"); - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - std::string value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->NamedSetter(property_name_utf8, value); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NamedGetterInterface* impl = - GetWrappableOrSetException<NamedGetterInterface>(exec_state, cell); - if (impl) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - impl->NamedDeleter(property_name_utf8); - return true; - } - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.h deleted file mode 100644 index cf9ad8d..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.h +++ /dev/null
@@ -1,146 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNamedGetterInterface_h -#define JSCNamedGetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/named_getter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNamedGetterInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NamedGetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNamedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NamedGetterInterface>& impl); - ~JSCNamedGetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNamedGetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc deleted file mode 100644 index ed0cf6e..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc +++ /dev/null
@@ -1,1193 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNamedIndexedGetterInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_property_enumerator.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NamedIndexedGetterInterface; -using cobalt::bindings::testing::JSCNamedIndexedGetterInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSpropertyOnBaseClass( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSpropertyOnBaseClass( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSindexedGetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSindexedSetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSnamedGetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSnamedSetter(JSC::ExecState*); -JSC::EncodedJSValue functionJSoperationOnBaseClass(JSC::ExecState*); -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index); -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = true; -const bool s_has_named_setter = true; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNamedIndexedGetterInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNamedIndexedGetterInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedIndexedGetterInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedIndexedGetterInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNamedIndexedGetterInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedIndexedGetterInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNamedIndexedGetterInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedIndexedGetterInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNamedIndexedGetterInterface::InterfaceObject::s_info = { - "NamedIndexedGetterInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedIndexedGetterInterface::InterfaceObject) -}; // JSCNamedIndexedGetterInterface::InterfaceObject::s_info - -void JSCNamedIndexedGetterInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNamedIndexedGetterInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNamedIndexedGetterInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NamedIndexedGetterInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNamedIndexedGetterInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNamedIndexedGetterInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNamedIndexedGetterInterface::Prototype::property_table_values[] = { - { "indexedGetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSindexedGetter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "indexedSetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSindexedSetter), - static_cast<intptr_t>(2), - JSC::NoIntrinsic - }, - { "namedGetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnamedGetter), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "namedSetter", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnamedSetter), - static_cast<intptr_t>(2), - JSC::NoIntrinsic - }, - { "operationOnBaseClass", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoperationOnBaseClass), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNamedIndexedGetterInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedIndexedGetterInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNamedIndexedGetterInterface::Prototype::property_table_prototype = { - 21, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedIndexedGetterInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNamedIndexedGetterInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedIndexedGetterInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNamedIndexedGetterInterface::Prototype::s_info = { - "NamedIndexedGetterInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedIndexedGetterInterface::Prototype) -}; // JSCNamedIndexedGetterInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNamedIndexedGetterInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNamedIndexedGetterInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNamedIndexedGetterInterface::Prototype class - -const JSC::HashTableValue JSCNamedIndexedGetterInterface::property_table_values[] = { - { "length", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSlength), - 0, - JSC::NoIntrinsic - }, - { "propertyOnBaseClass", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSpropertyOnBaseClass), - reinterpret_cast<intptr_t>(setJSpropertyOnBaseClass), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNamedIndexedGetterInterface::property_table_values - -// static -const JSC::HashTable JSCNamedIndexedGetterInterface::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNamedIndexedGetterInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNamedIndexedGetterInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNamedIndexedGetterInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNamedIndexedGetterInterface::NonTrivialStaticFields> - JSCNamedIndexedGetterInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNamedIndexedGetterInterface::s_info = { - "NamedIndexedGetterInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNamedIndexedGetterInterface) -}; // JSCNamedIndexedGetterInterface::s_info - -// static -JSC::JSObject* JSCNamedIndexedGetterInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNamedIndexedGetterInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNamedIndexedGetterInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCNamedIndexedGetterInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NamedIndexedGetterInterface::NamedIndexedGetterInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NamedIndexedGetterInterface::NamedIndexedGetterInterfaceWrappableType()"; - return NULL; - } - NamedIndexedGetterInterface* impl_ptr = - base::polymorphic_downcast<NamedIndexedGetterInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNamedIndexedGetterInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNamedIndexedGetterInterface>(global_data.heap)) - JSCNamedIndexedGetterInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNamedIndexedGetterInterface::JSCNamedIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NamedIndexedGetterInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNamedIndexedGetterInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNamedIndexedGetterInterface::~JSCNamedIndexedGetterInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNamedIndexedGetterInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCNamedIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNamedIndexedGetterInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// static -bool JSCNamedIndexedGetterInterface::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - if (index < impl->length()) { - slot.setCustomIndex(cell, index, IndexedPropertyGetter); - return true; - } - if (s_has_named_getter) { - JSCNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCNamedIndexedGetterInterface*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void JSCNamedIndexedGetterInterface::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, object); - if (impl) { - for (uint32 i = 0; i < impl->length(); ++i) { - property_names.add(JSC::Identifier::from(exec_state, i)); - } - JSCPropertyEnumerator enumerator(exec_state, &property_names); - impl->EnumerateNamedProperties(&enumerator); - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} - -// Look up property slot and put the |value|. -void JSCNamedIndexedGetterInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCNamedIndexedGetterInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNamedIndexedGetterInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -// static -void JSCNamedIndexedGetterInterface::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (impl) { - bool property_handled = false; - if (index < impl->length()) { - IndexedPropertySetter(cell, exec_state, index, value); - property_handled = true; - } - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - - -bool JSCNamedIndexedGetterInterface::deleteProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - TRACE_EVENT1("JSCNamedIndexedGetterInterface", "deleteProperty", "property", - TRACE_STR_COPY(WTF::String(property_name.publicName()).utf8().data())); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (impl) { - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deleteProperty(cell, exec_state, property_name); - } - return false; -} - -bool JSCNamedIndexedGetterInterface::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "deletePropertyByIndex"); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (impl) { - // https://heycam.github.io/webidl/#delete - // Return true if index is not a supported property index. - return index >= impl->length(); - } - return false; -} - -bool JSCNamedIndexedGetterInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNamedIndexedGetterInterface* this_object = JSC::jsCast<JSCNamedIndexedGetterInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNamedIndexedGetterInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSlength( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "get length"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->length()); - return result; -} - -JSC::JSValue getJSpropertyOnBaseClass( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "get propertyOnBaseClass"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->property_on_base_class()); - return result; -} - -void setJSpropertyOnBaseClass( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "set propertyOnBaseClass"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<bool >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_property_on_base_class(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSindexedGetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "call indexedGetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - TypeTraits<uint32_t >::ReturnType return_value = impl->IndexedGetter(index); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSindexedSetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "call indexedSetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType index; - TypeTraits<uint32_t >::ConversionType value; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &index); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->IndexedSetter(index, value); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSnamedGetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "call namedGetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType name; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &name); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - TypeTraits<std::string >::ReturnType return_value = impl->NamedGetter(name); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSnamedSetter( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "call namedSetter"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType name; - TypeTraits<std::string >::ConversionType value; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &name); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NamedSetter(name, value); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoperationOnBaseClass( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "call operationOnBaseClass"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->OperationOnBaseClass(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "IndexedPropertyGetter"); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSValue result = ToJSValue( - global_object, - impl->IndexedGetter(index)); - return result; -} - -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "IndexedPropertySetter"); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - uint32_t value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->IndexedSetter(index, value); -} - -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "NamedPropertyGetter"); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - JSC::JSValue result = ToJSValue( - global_object, - impl->NamedGetter(property_name_utf8)); - return result; -} - -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return false; - } - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - return impl->CanQueryNamedProperty(property_name_utf8); -} - -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - TRACE_EVENT0("JSCNamedIndexedGetterInterface", "NamedPropertySetter"); - NamedIndexedGetterInterface* impl = - GetWrappableOrSetException<NamedIndexedGetterInterface>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - std::string value; - FromJSValue(exec_state, jsc_value, - kNoConversionFlags, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } - impl->NamedSetter(property_name_utf8, value); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.h deleted file mode 100644 index c84aab4..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.h +++ /dev/null
@@ -1,146 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNamedIndexedGetterInterface_h -#define JSCNamedIndexedGetterInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/named_indexed_getter_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNamedIndexedGetterInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName); - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NamedIndexedGetterInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNamedIndexedGetterInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NamedIndexedGetterInterface>& impl); - ~JSCNamedIndexedGetterInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNamedIndexedGetterInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc deleted file mode 100644 index 889d4d7..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc +++ /dev/null
@@ -1,783 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNestedPutForwardsInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCPutForwardsInterface.h" -#include "cobalt/bindings/testing/put_forwards_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NestedPutForwardsInterface; -using cobalt::bindings::testing::JSCNestedPutForwardsInterface; -using cobalt::bindings::testing::JSCPutForwardsInterface; -using cobalt::bindings::testing::PutForwardsInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSnestedForwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnestedForwardingAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNestedPutForwardsInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNestedPutForwardsInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNestedPutForwardsInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNestedPutForwardsInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNestedPutForwardsInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNestedPutForwardsInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNestedPutForwardsInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNestedPutForwardsInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNestedPutForwardsInterface::InterfaceObject::s_info = { - "NestedPutForwardsInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNestedPutForwardsInterface::InterfaceObject) -}; // JSCNestedPutForwardsInterface::InterfaceObject::s_info - -void JSCNestedPutForwardsInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNestedPutForwardsInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNestedPutForwardsInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NestedPutForwardsInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNestedPutForwardsInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNestedPutForwardsInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNestedPutForwardsInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNestedPutForwardsInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNestedPutForwardsInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNestedPutForwardsInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNestedPutForwardsInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNestedPutForwardsInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNestedPutForwardsInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNestedPutForwardsInterface::Prototype::s_info = { - "NestedPutForwardsInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNestedPutForwardsInterface::Prototype) -}; // JSCNestedPutForwardsInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNestedPutForwardsInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNestedPutForwardsInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNestedPutForwardsInterface::Prototype class - -const JSC::HashTableValue JSCNestedPutForwardsInterface::property_table_values[] = { - { "nestedForwardingAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnestedForwardingAttribute), - reinterpret_cast<intptr_t>(setJSnestedForwardingAttribute), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNestedPutForwardsInterface::property_table_values - -// static -const JSC::HashTable JSCNestedPutForwardsInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNestedPutForwardsInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNestedPutForwardsInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNestedPutForwardsInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNestedPutForwardsInterface::NonTrivialStaticFields> - JSCNestedPutForwardsInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNestedPutForwardsInterface::s_info = { - "NestedPutForwardsInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNestedPutForwardsInterface) -}; // JSCNestedPutForwardsInterface::s_info - -// static -JSC::JSObject* JSCNestedPutForwardsInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNestedPutForwardsInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNestedPutForwardsInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCNestedPutForwardsInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NestedPutForwardsInterface::NestedPutForwardsInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NestedPutForwardsInterface::NestedPutForwardsInterfaceWrappableType()"; - return NULL; - } - NestedPutForwardsInterface* impl_ptr = - base::polymorphic_downcast<NestedPutForwardsInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNestedPutForwardsInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNestedPutForwardsInterface>(global_data.heap)) - JSCNestedPutForwardsInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNestedPutForwardsInterface::JSCNestedPutForwardsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NestedPutForwardsInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNestedPutForwardsInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNestedPutForwardsInterface::~JSCNestedPutForwardsInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNestedPutForwardsInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNestedPutForwardsInterface* this_object = JSC::jsCast<JSCNestedPutForwardsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNestedPutForwardsInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCNestedPutForwardsInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNestedPutForwardsInterface* this_object = JSC::jsCast<JSCNestedPutForwardsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNestedPutForwardsInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCNestedPutForwardsInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNestedPutForwardsInterface* this_object = JSC::jsCast<JSCNestedPutForwardsInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNestedPutForwardsInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSnestedForwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNestedPutForwardsInterface", "get nestedForwardingAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NestedPutForwardsInterface* impl = - GetWrappableOrSetException<NestedPutForwardsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nested_forwarding_attribute()); - return result; -} - -void setJSnestedForwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNestedPutForwardsInterface", "set nestedForwardingAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NestedPutForwardsInterface* impl = - GetWrappableOrSetException<NestedPutForwardsInterface>(exec_state, this_object); - if (!impl) { - return; - } - { - scoped_refptr<PutForwardsInterface> forwarded_impl = - impl->nested_forwarding_attribute(); - if (!forwarded_impl) { - return; - } - { - scoped_refptr<ArbitraryInterface> forwarded_forwarded_impl = - forwarded_impl->forwarding_attribute(); - if (!forwarded_forwarded_impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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()) { - forwarded_forwarded_impl->set_arbitrary_property(cobalt_value); - } - } - - } - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.h deleted file mode 100644 index 2a35ff4..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNestedPutForwardsInterface_h -#define JSCNestedPutForwardsInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/nested_put_forwards_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNestedPutForwardsInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NestedPutForwardsInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNestedPutForwardsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NestedPutForwardsInterface>& impl); - ~JSCNestedPutForwardsInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNestedPutForwardsInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc deleted file mode 100644 index 2d96b5d..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc +++ /dev/null
@@ -1,703 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNoConstructorInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NoConstructorInterface; -using cobalt::bindings::testing::JSCNoConstructorInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNoConstructorInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNoConstructorInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNoConstructorInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNoConstructorInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNoConstructorInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNoConstructorInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNoConstructorInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNoConstructorInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNoConstructorInterface::InterfaceObject::s_info = { - "NoConstructorInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNoConstructorInterface::InterfaceObject) -}; // JSCNoConstructorInterface::InterfaceObject::s_info - -void JSCNoConstructorInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNoConstructorInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNoConstructorInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NoConstructorInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNoConstructorInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNoConstructorInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNoConstructorInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNoConstructorInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNoConstructorInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNoConstructorInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNoConstructorInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNoConstructorInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNoConstructorInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNoConstructorInterface::Prototype::s_info = { - "NoConstructorInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNoConstructorInterface::Prototype) -}; // JSCNoConstructorInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNoConstructorInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNoConstructorInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNoConstructorInterface::Prototype class - -const JSC::HashTableValue JSCNoConstructorInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNoConstructorInterface::property_table_values - -// static -const JSC::HashTable JSCNoConstructorInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNoConstructorInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNoConstructorInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNoConstructorInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNoConstructorInterface::NonTrivialStaticFields> - JSCNoConstructorInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNoConstructorInterface::s_info = { - "NoConstructorInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNoConstructorInterface) -}; // JSCNoConstructorInterface::s_info - -// static -JSC::JSObject* JSCNoConstructorInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNoConstructorInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNoConstructorInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCNoConstructorInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NoConstructorInterface::NoConstructorInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NoConstructorInterface::NoConstructorInterfaceWrappableType()"; - return NULL; - } - NoConstructorInterface* impl_ptr = - base::polymorphic_downcast<NoConstructorInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNoConstructorInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNoConstructorInterface>(global_data.heap)) - JSCNoConstructorInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNoConstructorInterface::JSCNoConstructorInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NoConstructorInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNoConstructorInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNoConstructorInterface::~JSCNoConstructorInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNoConstructorInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNoConstructorInterface* this_object = JSC::jsCast<JSCNoConstructorInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNoConstructorInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCNoConstructorInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNoConstructorInterface* this_object = JSC::jsCast<JSCNoConstructorInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNoConstructorInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCNoConstructorInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNoConstructorInterface* this_object = JSC::jsCast<JSCNoConstructorInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNoConstructorInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.h deleted file mode 100644 index 8c31ac4..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNoConstructorInterface_h -#define JSCNoConstructorInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/no_constructor_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNoConstructorInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NoConstructorInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNoConstructorInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NoConstructorInterface>& impl); - ~JSCNoConstructorInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNoConstructorInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc deleted file mode 100644 index dec1a8c..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc +++ /dev/null
@@ -1,513 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNoInterfaceObjectInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NoInterfaceObjectInterface; -using cobalt::bindings::testing::JSCNoInterfaceObjectInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's prototype -class JSCNoInterfaceObjectInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNoInterfaceObjectInterface::Prototype::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNoInterfaceObjectInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNoInterfaceObjectInterface::Prototype::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNoInterfaceObjectInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNoInterfaceObjectInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNoInterfaceObjectInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNoInterfaceObjectInterface::Prototype::s_info = { - "NoInterfaceObjectInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNoInterfaceObjectInterface::Prototype) -}; // JSCNoInterfaceObjectInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNoInterfaceObjectInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNoInterfaceObjectInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNoInterfaceObjectInterface::Prototype class - -const JSC::HashTableValue JSCNoInterfaceObjectInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNoInterfaceObjectInterface::property_table_values - -// static -const JSC::HashTable JSCNoInterfaceObjectInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNoInterfaceObjectInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNoInterfaceObjectInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNoInterfaceObjectInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNoInterfaceObjectInterface::NonTrivialStaticFields> - JSCNoInterfaceObjectInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNoInterfaceObjectInterface::s_info = { - "NoInterfaceObjectInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNoInterfaceObjectInterface) -}; // JSCNoInterfaceObjectInterface::s_info - -// static -JSC::JSObject* JSCNoInterfaceObjectInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - - -// static -JSC::JSObject* JSCNoInterfaceObjectInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NoInterfaceObjectInterface::NoInterfaceObjectInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NoInterfaceObjectInterface::NoInterfaceObjectInterfaceWrappableType()"; - return NULL; - } - NoInterfaceObjectInterface* impl_ptr = - base::polymorphic_downcast<NoInterfaceObjectInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNoInterfaceObjectInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNoInterfaceObjectInterface>(global_data.heap)) - JSCNoInterfaceObjectInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNoInterfaceObjectInterface::JSCNoInterfaceObjectInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NoInterfaceObjectInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNoInterfaceObjectInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNoInterfaceObjectInterface::~JSCNoInterfaceObjectInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNoInterfaceObjectInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNoInterfaceObjectInterface* this_object = JSC::jsCast<JSCNoInterfaceObjectInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNoInterfaceObjectInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCNoInterfaceObjectInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNoInterfaceObjectInterface* this_object = JSC::jsCast<JSCNoInterfaceObjectInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNoInterfaceObjectInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCNoInterfaceObjectInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNoInterfaceObjectInterface* this_object = JSC::jsCast<JSCNoInterfaceObjectInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNoInterfaceObjectInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.h deleted file mode 100644 index bbc4f66..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.h +++ /dev/null
@@ -1,126 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNoInterfaceObjectInterface_h -#define JSCNoInterfaceObjectInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/no_interface_object_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNoInterfaceObjectInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NoInterfaceObjectInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNoInterfaceObjectInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NoInterfaceObjectInterface>& impl); - ~JSCNoInterfaceObjectInterface(); - - private: - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNoInterfaceObjectInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc deleted file mode 100644 index 6acb572..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc +++ /dev/null
@@ -1,1215 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNullableTypesTestInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NullableTypesTestInterface; -using cobalt::bindings::testing::JSCNullableTypesTestInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSnullableBooleanProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableBooleanProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSnullableNumericProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableNumericProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSnullableStringProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableStringProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSnullableObjectProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableObjectProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSnullableBooleanArgument(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableBooleanOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableNumericArgument(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableNumericOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableObjectArgument(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableObjectOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableStringArgument(JSC::ExecState*); -JSC::EncodedJSValue functionJSnullableStringOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNullableTypesTestInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNullableTypesTestInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNullableTypesTestInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNullableTypesTestInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNullableTypesTestInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNullableTypesTestInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNullableTypesTestInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNullableTypesTestInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNullableTypesTestInterface::InterfaceObject::s_info = { - "NullableTypesTestInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNullableTypesTestInterface::InterfaceObject) -}; // JSCNullableTypesTestInterface::InterfaceObject::s_info - -void JSCNullableTypesTestInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNullableTypesTestInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNullableTypesTestInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NullableTypesTestInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNullableTypesTestInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNullableTypesTestInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNullableTypesTestInterface::Prototype::property_table_values[] = { - { "nullableBooleanArgument", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableBooleanArgument), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "nullableBooleanOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableBooleanOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "nullableNumericArgument", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableNumericArgument), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "nullableNumericOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableNumericOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "nullableObjectArgument", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableObjectArgument), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "nullableObjectOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableObjectOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "nullableStringArgument", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableStringArgument), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "nullableStringOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSnullableStringOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNullableTypesTestInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNullableTypesTestInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNullableTypesTestInterface::Prototype::property_table_prototype = { - 40, // compactSize - 31, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNullableTypesTestInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNullableTypesTestInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNullableTypesTestInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNullableTypesTestInterface::Prototype::s_info = { - "NullableTypesTestInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNullableTypesTestInterface::Prototype) -}; // JSCNullableTypesTestInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNullableTypesTestInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNullableTypesTestInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNullableTypesTestInterface::Prototype class - -const JSC::HashTableValue JSCNullableTypesTestInterface::property_table_values[] = { - { "nullableBooleanProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableBooleanProperty), - reinterpret_cast<intptr_t>(setJSnullableBooleanProperty), - JSC::NoIntrinsic - }, - { "nullableNumericProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableNumericProperty), - reinterpret_cast<intptr_t>(setJSnullableNumericProperty), - JSC::NoIntrinsic - }, - { "nullableStringProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableStringProperty), - reinterpret_cast<intptr_t>(setJSnullableStringProperty), - JSC::NoIntrinsic - }, - { "nullableObjectProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableObjectProperty), - reinterpret_cast<intptr_t>(setJSnullableObjectProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNullableTypesTestInterface::property_table_values - -// static -const JSC::HashTable JSCNullableTypesTestInterface::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNullableTypesTestInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNullableTypesTestInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNullableTypesTestInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNullableTypesTestInterface::NonTrivialStaticFields> - JSCNullableTypesTestInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNullableTypesTestInterface::s_info = { - "NullableTypesTestInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNullableTypesTestInterface) -}; // JSCNullableTypesTestInterface::s_info - -// static -JSC::JSObject* JSCNullableTypesTestInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNullableTypesTestInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNullableTypesTestInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCNullableTypesTestInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NullableTypesTestInterface::NullableTypesTestInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NullableTypesTestInterface::NullableTypesTestInterfaceWrappableType()"; - return NULL; - } - NullableTypesTestInterface* impl_ptr = - base::polymorphic_downcast<NullableTypesTestInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNullableTypesTestInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNullableTypesTestInterface>(global_data.heap)) - JSCNullableTypesTestInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNullableTypesTestInterface::JSCNullableTypesTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NullableTypesTestInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNullableTypesTestInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNullableTypesTestInterface::~JSCNullableTypesTestInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNullableTypesTestInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNullableTypesTestInterface* this_object = JSC::jsCast<JSCNullableTypesTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNullableTypesTestInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCNullableTypesTestInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNullableTypesTestInterface* this_object = JSC::jsCast<JSCNullableTypesTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNullableTypesTestInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCNullableTypesTestInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNullableTypesTestInterface* this_object = JSC::jsCast<JSCNullableTypesTestInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNullableTypesTestInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSnullableBooleanProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "get nullableBooleanProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_boolean_property()); - return result; -} - -void setJSnullableBooleanProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "set nullableBooleanProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<base::optional<bool > >::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_nullable_boolean_property(cobalt_value); - } -} - -JSC::JSValue getJSnullableNumericProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "get nullableNumericProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_numeric_property()); - return result; -} - -void setJSnullableNumericProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "set nullableNumericProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<base::optional<int32_t > >::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_nullable_numeric_property(cobalt_value); - } -} - -JSC::JSValue getJSnullableStringProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "get nullableStringProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_string_property()); - return result; -} - -void setJSnullableStringProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "set nullableStringProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<base::optional<std::string > >::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_nullable_string_property(cobalt_value); - } -} - -JSC::JSValue getJSnullableObjectProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "get nullableObjectProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_object_property()); - return result; -} - -void setJSnullableObjectProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "set nullableObjectProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<scoped_refptr<ArbitraryInterface> >::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_nullable_object_property(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSnullableBooleanArgument( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableBooleanArgument"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<base::optional<bool > >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagNullable), - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NullableBooleanArgument(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSnullableBooleanOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableBooleanOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<base::optional<bool > >::ReturnType return_value = impl->NullableBooleanOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSnullableNumericArgument( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableNumericArgument"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<base::optional<int32_t > >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagNullable), - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NullableNumericArgument(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSnullableNumericOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableNumericOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<base::optional<int32_t > >::ReturnType return_value = impl->NullableNumericOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSnullableObjectArgument( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableObjectArgument"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<scoped_refptr<ArbitraryInterface> >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagNullable), - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NullableObjectArgument(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSnullableObjectOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableObjectOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<scoped_refptr<ArbitraryInterface> >::ReturnType return_value = impl->NullableObjectOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSnullableStringArgument( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableStringArgument"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<base::optional<std::string > >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagNullable), - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->NullableStringArgument(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSnullableStringOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNullableTypesTestInterface", "call nullableStringOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NullableTypesTestInterface* impl = - GetWrappableOrSetException<NullableTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<base::optional<std::string > >::ReturnType return_value = impl->NullableStringOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.h deleted file mode 100644 index 78bc0ed..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNullableTypesTestInterface_h -#define JSCNullableTypesTestInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/nullable_types_test_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNullableTypesTestInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NullableTypesTestInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNullableTypesTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NullableTypesTestInterface>& impl); - ~JSCNullableTypesTestInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNullableTypesTestInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc deleted file mode 100644 index 6db7067..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc +++ /dev/null
@@ -1,1973 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCNumericTypesTestInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::NumericTypesTestInterface; -using cobalt::bindings::testing::JSCNumericTypesTestInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSbyteProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSbyteProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSoctetProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSoctetProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSshortProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSshortProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSunsignedShortProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunsignedShortProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSlongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSlongProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSunsignedLongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunsignedLongProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSlongLongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSlongLongProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSunsignedLongLongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunsignedLongLongProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSdoubleProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSdoubleProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSunrestrictedDoubleProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunrestrictedDoubleProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue functionJSbyteArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSbyteReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSdoubleArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSdoubleReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSlongArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSlongLongArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSlongLongReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSlongReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSoctetArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSoctetReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSshortArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSshortReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunrestrictedDoubleArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunrestrictedDoubleReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunsignedLongArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunsignedLongLongArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunsignedLongLongReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunsignedLongReturnOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunsignedShortArgumentOperation(JSC::ExecState*); -JSC::EncodedJSValue functionJSunsignedShortReturnOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCNumericTypesTestInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCNumericTypesTestInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNumericTypesTestInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNumericTypesTestInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCNumericTypesTestInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNumericTypesTestInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCNumericTypesTestInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNumericTypesTestInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCNumericTypesTestInterface::InterfaceObject::s_info = { - "NumericTypesTestInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNumericTypesTestInterface::InterfaceObject) -}; // JSCNumericTypesTestInterface::InterfaceObject::s_info - -void JSCNumericTypesTestInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCNumericTypesTestInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCNumericTypesTestInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "NumericTypesTestInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCNumericTypesTestInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCNumericTypesTestInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCNumericTypesTestInterface::Prototype::property_table_values[] = { - { "byteArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSbyteArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "byteReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSbyteReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "doubleArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSdoubleArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "doubleReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSdoubleReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "longArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSlongArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "longLongArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSlongLongArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "longLongReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSlongLongReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "longReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSlongReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "octetArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoctetArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "octetReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoctetReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "shortArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSshortArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "shortReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSshortReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "unrestrictedDoubleArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunrestrictedDoubleArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "unrestrictedDoubleReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunrestrictedDoubleReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "unsignedLongArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunsignedLongArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "unsignedLongLongArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunsignedLongLongArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "unsignedLongLongReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunsignedLongLongReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "unsignedLongReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunsignedLongReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "unsignedShortArgumentOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunsignedShortArgumentOperation), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "unsignedShortReturnOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSunsignedShortReturnOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCNumericTypesTestInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNumericTypesTestInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCNumericTypesTestInterface::Prototype::property_table_prototype = { - 84, // compactSize - 63, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNumericTypesTestInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCNumericTypesTestInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNumericTypesTestInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCNumericTypesTestInterface::Prototype::s_info = { - "NumericTypesTestInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNumericTypesTestInterface::Prototype) -}; // JSCNumericTypesTestInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCNumericTypesTestInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCNumericTypesTestInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCNumericTypesTestInterface::Prototype class - -const JSC::HashTableValue JSCNumericTypesTestInterface::property_table_values[] = { - { "byteProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSbyteProperty), - reinterpret_cast<intptr_t>(setJSbyteProperty), - JSC::NoIntrinsic - }, - { "octetProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSoctetProperty), - reinterpret_cast<intptr_t>(setJSoctetProperty), - JSC::NoIntrinsic - }, - { "shortProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSshortProperty), - reinterpret_cast<intptr_t>(setJSshortProperty), - JSC::NoIntrinsic - }, - { "unsignedShortProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunsignedShortProperty), - reinterpret_cast<intptr_t>(setJSunsignedShortProperty), - JSC::NoIntrinsic - }, - { "longProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSlongProperty), - reinterpret_cast<intptr_t>(setJSlongProperty), - JSC::NoIntrinsic - }, - { "unsignedLongProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunsignedLongProperty), - reinterpret_cast<intptr_t>(setJSunsignedLongProperty), - JSC::NoIntrinsic - }, - { "longLongProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSlongLongProperty), - reinterpret_cast<intptr_t>(setJSlongLongProperty), - JSC::NoIntrinsic - }, - { "unsignedLongLongProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunsignedLongLongProperty), - reinterpret_cast<intptr_t>(setJSunsignedLongLongProperty), - JSC::NoIntrinsic - }, - { "doubleProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSdoubleProperty), - reinterpret_cast<intptr_t>(setJSdoubleProperty), - JSC::NoIntrinsic - }, - { "unrestrictedDoubleProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunrestrictedDoubleProperty), - reinterpret_cast<intptr_t>(setJSunrestrictedDoubleProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCNumericTypesTestInterface::property_table_values - -// static -const JSC::HashTable JSCNumericTypesTestInterface::property_table_prototype = { - 41, // compactSize - 31, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCNumericTypesTestInterface::property_table_prototype - -// static -const JSC::HashTable* JSCNumericTypesTestInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCNumericTypesTestInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCNumericTypesTestInterface::NonTrivialStaticFields> - JSCNumericTypesTestInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCNumericTypesTestInterface::s_info = { - "NumericTypesTestInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCNumericTypesTestInterface) -}; // JSCNumericTypesTestInterface::s_info - -// static -JSC::JSObject* JSCNumericTypesTestInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCNumericTypesTestInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCNumericTypesTestInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCNumericTypesTestInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == NumericTypesTestInterface::NumericTypesTestInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match NumericTypesTestInterface::NumericTypesTestInterfaceWrappableType()"; - return NULL; - } - NumericTypesTestInterface* impl_ptr = - base::polymorphic_downcast<NumericTypesTestInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCNumericTypesTestInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCNumericTypesTestInterface>(global_data.heap)) - JSCNumericTypesTestInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCNumericTypesTestInterface::JSCNumericTypesTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NumericTypesTestInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCNumericTypesTestInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCNumericTypesTestInterface::~JSCNumericTypesTestInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCNumericTypesTestInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCNumericTypesTestInterface* this_object = JSC::jsCast<JSCNumericTypesTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCNumericTypesTestInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCNumericTypesTestInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCNumericTypesTestInterface* this_object = JSC::jsCast<JSCNumericTypesTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCNumericTypesTestInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCNumericTypesTestInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCNumericTypesTestInterface* this_object = JSC::jsCast<JSCNumericTypesTestInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCNumericTypesTestInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSbyteProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get byteProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->byte_property()); - return result; -} - -void setJSbyteProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set byteProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int8_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_byte_property(cobalt_value); - } -} - -JSC::JSValue getJSoctetProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get octetProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->octet_property()); - return result; -} - -void setJSoctetProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set octetProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<uint8_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_octet_property(cobalt_value); - } -} - -JSC::JSValue getJSshortProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get shortProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->short_property()); - return result; -} - -void setJSshortProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set shortProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int16_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_short_property(cobalt_value); - } -} - -JSC::JSValue getJSunsignedShortProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get unsignedShortProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->unsigned_short_property()); - return result; -} - -void setJSunsignedShortProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set unsignedShortProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<uint16_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_unsigned_short_property(cobalt_value); - } -} - -JSC::JSValue getJSlongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get longProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->long_property()); - return result; -} - -void setJSlongProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set longProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int32_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_long_property(cobalt_value); - } -} - -JSC::JSValue getJSunsignedLongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get unsignedLongProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->unsigned_long_property()); - return result; -} - -void setJSunsignedLongProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set unsignedLongProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<uint32_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_unsigned_long_property(cobalt_value); - } -} - -JSC::JSValue getJSlongLongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get longLongProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->long_long_property()); - return result; -} - -void setJSlongLongProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set longLongProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<int64_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_long_long_property(cobalt_value); - } -} - -JSC::JSValue getJSunsignedLongLongProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get unsignedLongLongProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->unsigned_long_long_property()); - return result; -} - -void setJSunsignedLongLongProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set unsignedLongLongProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<uint64_t >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_unsigned_long_long_property(cobalt_value); - } -} - -JSC::JSValue getJSdoubleProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get doubleProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->double_property()); - return result; -} - -void setJSdoubleProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set doubleProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<double >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - (kConversionFlagRestricted), &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_double_property(cobalt_value); - } -} - -JSC::JSValue getJSunrestrictedDoubleProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "get unrestrictedDoubleProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->unrestricted_double_property()); - return result; -} - -void setJSunrestrictedDoubleProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "set unrestrictedDoubleProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<double >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_unrestricted_double_property(cobalt_value); - } -} - -JSC::EncodedJSValue functionJSbyteArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call byteArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int8_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->ByteArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSbyteReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call byteReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<int8_t >::ReturnType return_value = impl->ByteReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSdoubleArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call doubleArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<double >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagRestricted), - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->DoubleArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSdoubleReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call doubleReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<double >::ReturnType return_value = impl->DoubleReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSlongArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call longArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->LongArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSlongLongArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call longLongArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int64_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->LongLongArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSlongLongReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call longLongReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<int64_t >::ReturnType return_value = impl->LongLongReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSlongReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call longReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<int32_t >::ReturnType return_value = impl->LongReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSoctetArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call octetArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint8_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OctetArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoctetReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call octetReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<uint8_t >::ReturnType return_value = impl->OctetReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSshortArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call shortArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int16_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->ShortArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSshortReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call shortReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<int16_t >::ReturnType return_value = impl->ShortReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSunrestrictedDoubleArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unrestrictedDoubleArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<double >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->UnrestrictedDoubleArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSunrestrictedDoubleReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unrestrictedDoubleReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<double >::ReturnType return_value = impl->UnrestrictedDoubleReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSunsignedLongArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unsignedLongArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint32_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->UnsignedLongArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSunsignedLongLongArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unsignedLongLongArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint64_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->UnsignedLongLongArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSunsignedLongLongReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unsignedLongLongReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<uint64_t >::ReturnType return_value = impl->UnsignedLongLongReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSunsignedLongReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unsignedLongReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<uint32_t >::ReturnType return_value = impl->UnsignedLongReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSunsignedShortArgumentOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unsignedShortArgumentOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<uint16_t >::ConversionType arg1; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->UnsignedShortArgumentOperation(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSunsignedShortReturnOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCNumericTypesTestInterface", "call unsignedShortReturnOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - NumericTypesTestInterface* impl = - GetWrappableOrSetException<NumericTypesTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<uint16_t >::ReturnType return_value = impl->UnsignedShortReturnOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.h deleted file mode 100644 index 38b8244..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCNumericTypesTestInterface_h -#define JSCNumericTypesTestInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/numeric_types_test_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCNumericTypesTestInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to NumericTypesTestInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCNumericTypesTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<NumericTypesTestInterface>& impl); - ~JSCNumericTypesTestInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCNumericTypesTestInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc deleted file mode 100644 index 6ce03c8..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc +++ /dev/null
@@ -1,924 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCObjectTypeBindingsInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "JSCBaseInterface.h" -#include "JSCDerivedInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" -#include "cobalt/bindings/testing/base_interface.h" -#include "cobalt/bindings/testing/derived_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::ObjectTypeBindingsInterface; -using cobalt::bindings::testing::JSCObjectTypeBindingsInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::BaseInterface; -using cobalt::bindings::testing::DerivedInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::bindings::testing::JSCBaseInterface; -using cobalt::bindings::testing::JSCDerivedInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSarbitraryObject( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSarbitraryObject( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSbaseInterface( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::JSValue getJSderivedInterface( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSderivedInterface( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSobjectProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSobjectProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCObjectTypeBindingsInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCObjectTypeBindingsInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCObjectTypeBindingsInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCObjectTypeBindingsInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCObjectTypeBindingsInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCObjectTypeBindingsInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCObjectTypeBindingsInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCObjectTypeBindingsInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCObjectTypeBindingsInterface::InterfaceObject::s_info = { - "ObjectTypeBindingsInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCObjectTypeBindingsInterface::InterfaceObject) -}; // JSCObjectTypeBindingsInterface::InterfaceObject::s_info - -void JSCObjectTypeBindingsInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCObjectTypeBindingsInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCObjectTypeBindingsInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "ObjectTypeBindingsInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCObjectTypeBindingsInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCObjectTypeBindingsInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCObjectTypeBindingsInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCObjectTypeBindingsInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCObjectTypeBindingsInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCObjectTypeBindingsInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCObjectTypeBindingsInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCObjectTypeBindingsInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCObjectTypeBindingsInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCObjectTypeBindingsInterface::Prototype::s_info = { - "ObjectTypeBindingsInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCObjectTypeBindingsInterface::Prototype) -}; // JSCObjectTypeBindingsInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCObjectTypeBindingsInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCObjectTypeBindingsInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCObjectTypeBindingsInterface::Prototype class - -const JSC::HashTableValue JSCObjectTypeBindingsInterface::property_table_values[] = { - { "arbitraryObject", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSarbitraryObject), - reinterpret_cast<intptr_t>(setJSarbitraryObject), - JSC::NoIntrinsic - }, - { "baseInterface", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSbaseInterface), - 0, - JSC::NoIntrinsic - }, - { "derivedInterface", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSderivedInterface), - reinterpret_cast<intptr_t>(setJSderivedInterface), - JSC::NoIntrinsic - }, - { "objectProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSobjectProperty), - reinterpret_cast<intptr_t>(setJSobjectProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCObjectTypeBindingsInterface::property_table_values - -// static -const JSC::HashTable JSCObjectTypeBindingsInterface::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCObjectTypeBindingsInterface::property_table_prototype - -// static -const JSC::HashTable* JSCObjectTypeBindingsInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCObjectTypeBindingsInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCObjectTypeBindingsInterface::NonTrivialStaticFields> - JSCObjectTypeBindingsInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCObjectTypeBindingsInterface::s_info = { - "ObjectTypeBindingsInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCObjectTypeBindingsInterface) -}; // JSCObjectTypeBindingsInterface::s_info - -// static -JSC::JSObject* JSCObjectTypeBindingsInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCObjectTypeBindingsInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCObjectTypeBindingsInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCObjectTypeBindingsInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == ObjectTypeBindingsInterface::ObjectTypeBindingsInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match ObjectTypeBindingsInterface::ObjectTypeBindingsInterfaceWrappableType()"; - return NULL; - } - ObjectTypeBindingsInterface* impl_ptr = - base::polymorphic_downcast<ObjectTypeBindingsInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCObjectTypeBindingsInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCObjectTypeBindingsInterface>(global_data.heap)) - JSCObjectTypeBindingsInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCObjectTypeBindingsInterface::JSCObjectTypeBindingsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ObjectTypeBindingsInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCObjectTypeBindingsInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCObjectTypeBindingsInterface::~JSCObjectTypeBindingsInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCObjectTypeBindingsInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCObjectTypeBindingsInterface* this_object = JSC::jsCast<JSCObjectTypeBindingsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCObjectTypeBindingsInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCObjectTypeBindingsInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCObjectTypeBindingsInterface* this_object = JSC::jsCast<JSCObjectTypeBindingsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCObjectTypeBindingsInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCObjectTypeBindingsInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCObjectTypeBindingsInterface* this_object = JSC::jsCast<JSCObjectTypeBindingsInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCObjectTypeBindingsInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSarbitraryObject( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "get arbitraryObject"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->arbitrary_object()); - return result; -} - -void setJSarbitraryObject( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "set arbitraryObject"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<scoped_refptr<ArbitraryInterface> >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_arbitrary_object(cobalt_value); - } -} - -JSC::JSValue getJSbaseInterface( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "get baseInterface"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->base_interface()); - return result; -} - -JSC::JSValue getJSderivedInterface( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "get derivedInterface"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->derived_interface()); - return result; -} - -void setJSderivedInterface( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "set derivedInterface"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<scoped_refptr<DerivedInterface> >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_derived_interface(cobalt_value); - } -} - -JSC::JSValue getJSobjectProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "get objectProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->object_property()); - return result; -} - -void setJSobjectProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCObjectTypeBindingsInterface", "set objectProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - ObjectTypeBindingsInterface* impl = - GetWrappableOrSetException<ObjectTypeBindingsInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<OpaqueHandle >::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_object_property(cobalt_value); - } -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.h deleted file mode 100644 index 54dea0d..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCObjectTypeBindingsInterface_h -#define JSCObjectTypeBindingsInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/object_type_bindings_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCObjectTypeBindingsInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to ObjectTypeBindingsInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCObjectTypeBindingsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<ObjectTypeBindingsInterface>& impl); - ~JSCObjectTypeBindingsInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCObjectTypeBindingsInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc deleted file mode 100644 index 816ea6c..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc +++ /dev/null
@@ -1,1689 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCOperationsTestInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::OperationsTestInterface; -using cobalt::bindings::testing::JSCOperationsTestInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue functionJSlongFunctionNoArgs(JSC::ExecState*); -JSC::EncodedJSValue functionJSobjectFunctionNoArgs(JSC::ExecState*); -JSC::EncodedJSValue functionJSoptionalArgumentWithDefault(JSC::ExecState*); -JSC::EncodedJSValue functionJSoptionalArguments(JSC::ExecState*); -JSC::EncodedJSValue functionJSoptionalNullableArgumentsWithDefaults(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedFunction(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedFunction1(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedFunction2(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedFunction3(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedFunction4(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedFunction5(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedNullable(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedNullable1(JSC::ExecState*); -JSC::EncodedJSValue functionJSoverloadedNullable2(JSC::ExecState*); -JSC::EncodedJSValue functionJSstringFunctionNoArgs(JSC::ExecState*); -JSC::EncodedJSValue functionJSvariadicPrimitiveArguments(JSC::ExecState*); -JSC::EncodedJSValue functionJSvariadicStringArgumentsAfterOptionalArgument(JSC::ExecState*); -JSC::EncodedJSValue functionJSvoidFunctionLongArg(JSC::ExecState*); -JSC::EncodedJSValue functionJSvoidFunctionNoArgs(JSC::ExecState*); -JSC::EncodedJSValue functionJSvoidFunctionObjectArg(JSC::ExecState*); -JSC::EncodedJSValue functionJSvoidFunctionStringArg(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSoverloadedFunction(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSoverloadedFunction1(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSoverloadedFunction2(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCOperationsTestInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCOperationsTestInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCOperationsTestInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { "overloadedFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(staticFunctionJSoverloadedFunction), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCOperationsTestInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCOperationsTestInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCOperationsTestInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCOperationsTestInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCOperationsTestInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCOperationsTestInterface::InterfaceObject::s_info = { - "OperationsTestInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCOperationsTestInterface::InterfaceObject) -}; // JSCOperationsTestInterface::InterfaceObject::s_info - -void JSCOperationsTestInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCOperationsTestInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCOperationsTestInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "OperationsTestInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCOperationsTestInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCOperationsTestInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCOperationsTestInterface::Prototype::property_table_values[] = { - { "longFunctionNoArgs", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSlongFunctionNoArgs), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "objectFunctionNoArgs", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSobjectFunctionNoArgs), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "optionalArgumentWithDefault", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoptionalArgumentWithDefault), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "optionalArguments", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoptionalArguments), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "optionalNullableArgumentsWithDefaults", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoptionalNullableArgumentsWithDefaults), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "overloadedFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoverloadedFunction), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "overloadedNullable", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSoverloadedNullable), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "stringFunctionNoArgs", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSstringFunctionNoArgs), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "variadicPrimitiveArguments", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSvariadicPrimitiveArguments), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "variadicStringArgumentsAfterOptionalArgument", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSvariadicStringArgumentsAfterOptionalArgument), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "voidFunctionLongArg", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSvoidFunctionLongArg), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "voidFunctionNoArgs", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSvoidFunctionNoArgs), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "voidFunctionObjectArg", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSvoidFunctionObjectArg), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "voidFunctionStringArg", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSvoidFunctionStringArg), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCOperationsTestInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCOperationsTestInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCOperationsTestInterface::Prototype::property_table_prototype = { - 46, // compactSize - 31, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCOperationsTestInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCOperationsTestInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCOperationsTestInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCOperationsTestInterface::Prototype::s_info = { - "OperationsTestInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCOperationsTestInterface::Prototype) -}; // JSCOperationsTestInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCOperationsTestInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCOperationsTestInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCOperationsTestInterface::Prototype class - -const JSC::HashTableValue JSCOperationsTestInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCOperationsTestInterface::property_table_values - -// static -const JSC::HashTable JSCOperationsTestInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCOperationsTestInterface::property_table_prototype - -// static -const JSC::HashTable* JSCOperationsTestInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCOperationsTestInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCOperationsTestInterface::NonTrivialStaticFields> - JSCOperationsTestInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCOperationsTestInterface::s_info = { - "OperationsTestInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCOperationsTestInterface) -}; // JSCOperationsTestInterface::s_info - -// static -JSC::JSObject* JSCOperationsTestInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCOperationsTestInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCOperationsTestInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCOperationsTestInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == OperationsTestInterface::OperationsTestInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match OperationsTestInterface::OperationsTestInterfaceWrappableType()"; - return NULL; - } - OperationsTestInterface* impl_ptr = - base::polymorphic_downcast<OperationsTestInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCOperationsTestInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCOperationsTestInterface>(global_data.heap)) - JSCOperationsTestInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCOperationsTestInterface::JSCOperationsTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<OperationsTestInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCOperationsTestInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCOperationsTestInterface::~JSCOperationsTestInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCOperationsTestInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCOperationsTestInterface* this_object = JSC::jsCast<JSCOperationsTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCOperationsTestInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCOperationsTestInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCOperationsTestInterface* this_object = JSC::jsCast<JSCOperationsTestInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCOperationsTestInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCOperationsTestInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCOperationsTestInterface* this_object = JSC::jsCast<JSCOperationsTestInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCOperationsTestInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue functionJSlongFunctionNoArgs( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call longFunctionNoArgs"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<int32_t >::ReturnType return_value = impl->LongFunctionNoArgs(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSobjectFunctionNoArgs( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call objectFunctionNoArgs"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<scoped_refptr<ArbitraryInterface> >::ReturnType return_value = impl->ObjectFunctionNoArgs(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSoptionalArgumentWithDefault( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call optionalArgumentWithDefault"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - // Optional arguments with default values - TypeTraits<double >::ConversionType arg1 = - 2.718; - - size_t num_set_arguments = 1; - if (exec_state->argumentCount() > 0) { - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagRestricted), - &exception_state, - &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - impl->OptionalArgumentWithDefault(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoptionalArguments( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call optionalArguments"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - // Optional arguments - TypeTraits<int32_t >::ConversionType arg2; - TypeTraits<int32_t >::ConversionType arg3; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - size_t num_set_arguments = 1; - if (exec_state->argumentCount() > 1) { - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, - &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - ++num_set_arguments; - } - if (exec_state->argumentCount() > 2) { - FromJSValue(exec_state, - exec_state->argument(2), - kNoConversionFlags, - &exception_state, - &arg3); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - ++num_set_arguments; - } - switch (num_set_arguments) { - case 1: - { - impl->OptionalArguments(arg1); - return JSC::JSValue::encode(JSC::jsUndefined()); - break; - } - case 2: - { - impl->OptionalArguments(arg1, arg2); - return JSC::JSValue::encode(JSC::jsUndefined()); - break; - } - case 3: - { - impl->OptionalArguments(arg1, arg2, arg3); - return JSC::JSValue::encode(JSC::jsUndefined()); - break; - } - default: - NOTREACHED(); - return JSC::JSValue::encode(JSC::jsUndefined()); - } - -} - -JSC::EncodedJSValue functionJSoptionalNullableArgumentsWithDefaults( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call optionalNullableArgumentsWithDefaults"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - // Optional arguments with default values - TypeTraits<base::optional<bool > >::ConversionType arg1 = - base::nullopt; - TypeTraits<scoped_refptr<ArbitraryInterface> >::ConversionType arg2 = - NULL; - - size_t num_set_arguments = 2; - if (exec_state->argumentCount() > 0) { - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagNullable), - &exception_state, - &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - if (exec_state->argumentCount() > 1) { - FromJSValue(exec_state, - exec_state->argument(1), - (kConversionFlagNullable), - &exception_state, - &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - impl->OptionalNullableArgumentsWithDefaults(arg1, arg2); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call overloadedFunction"); - const size_t num_arguments = exec_state->argumentCount(); - switch(num_arguments) { - case(0): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - if (true) { - return functionJSoverloadedFunction1(exec_state); - } - break; - } - case(1): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - JSC::JSValue arg = exec_state->argument(0); - if (arg.isNumber()) { - return functionJSoverloadedFunction2(exec_state); - } - if (true) { - return functionJSoverloadedFunction3(exec_state); - } - if (true) { - return functionJSoverloadedFunction2(exec_state); - } - break; - } - case(3): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - JSC::JSValue arg = exec_state->argument(2); - if (arg.inherits(JSCArbitraryInterface::s_classinfo())) { - return functionJSoverloadedFunction5(exec_state); - } - if (true) { - return functionJSoverloadedFunction4(exec_state); - } - break; - } - } - // Invalid number of args - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - // 4. If S is empty, then throw a TypeError. - return JSC::throwVMTypeError(exec_state); -} - -JSC::EncodedJSValue functionJSoverloadedFunction1( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->OverloadedFunction(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedFunction2( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OverloadedFunction(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedFunction3( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OverloadedFunction(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedFunction4( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 3; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - TypeTraits<int32_t >::ConversionType arg2; - TypeTraits<int32_t >::ConversionType arg3; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(2, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(2), - kNoConversionFlags, - &exception_state, &arg3); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OverloadedFunction(arg1, arg2, arg3); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedFunction5( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 3; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - TypeTraits<int32_t >::ConversionType arg2; - TypeTraits<scoped_refptr<ArbitraryInterface> >::ConversionType arg3; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(2, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(2), - kNoConversionFlags, - &exception_state, &arg3); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OverloadedFunction(arg1, arg2, arg3); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedNullable( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call overloadedNullable"); - const size_t num_arguments = exec_state->argumentCount(); - switch(num_arguments) { - case(1): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - JSC::JSValue arg = exec_state->argument(0); - if (arg.isUndefinedOrNull()) { - return functionJSoverloadedNullable2(exec_state); - } - if (true) { - return functionJSoverloadedNullable1(exec_state); - } - break; - } - } - // Invalid number of args - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - // 4. If S is empty, then throw a TypeError. - return JSC::throwVMTypeError(exec_state); -} - -JSC::EncodedJSValue functionJSoverloadedNullable1( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OverloadedNullable(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSoverloadedNullable2( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<base::optional<bool > >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagNullable), - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->OverloadedNullable(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSstringFunctionNoArgs( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call stringFunctionNoArgs"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<std::string >::ReturnType return_value = impl->StringFunctionNoArgs(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSvariadicPrimitiveArguments( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call variadicPrimitiveArguments"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - // Variadic argument - TypeTraits<std::vector<int32_t> >::ConversionType bools; - - // Get variadic arguments. - const size_t kFirstVariadicArgIndex = 0; - if (exec_state->argumentCount() > kFirstVariadicArgIndex) { - bools.resize(exec_state->argumentCount() - kFirstVariadicArgIndex); - for (int i = 0; i + kFirstVariadicArgIndex < exec_state->argumentCount(); ++i) { - FromJSValue(exec_state, - exec_state->argument(i + kFirstVariadicArgIndex), - kNoConversionFlags, - &exception_state, - &bools[i]); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - } - impl->VariadicPrimitiveArguments(bools); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSvariadicStringArgumentsAfterOptionalArgument( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call variadicStringArgumentsAfterOptionalArgument"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - // Optional arguments - TypeTraits<bool >::ConversionType optional_arg; - // Variadic argument - TypeTraits<std::vector<std::string> >::ConversionType strings; - - size_t num_set_arguments = 0; - if (exec_state->argumentCount() > 0) { - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, - &optional_arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - ++num_set_arguments; - } - - // Get variadic arguments. - const size_t kLastOptionalArgIndex = 1; - if (num_set_arguments == kLastOptionalArgIndex) { - // If the last optional argument has been set, we will call the overload - // that takes the variadic argument, possibly with an empty vector in the - // case that there are no more arguments left. - ++num_set_arguments; - } - const size_t kFirstVariadicArgIndex = 1; - if (exec_state->argumentCount() > kFirstVariadicArgIndex) { - strings.resize(exec_state->argumentCount() - kFirstVariadicArgIndex); - for (int i = 0; i + kFirstVariadicArgIndex < exec_state->argumentCount(); ++i) { - FromJSValue(exec_state, - exec_state->argument(i + kFirstVariadicArgIndex), - kNoConversionFlags, - &exception_state, - &strings[i]); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - } - switch (num_set_arguments) { - case 0: - { - impl->VariadicStringArgumentsAfterOptionalArgument(); - return JSC::JSValue::encode(JSC::jsUndefined()); - break; - } - case 2: - { - impl->VariadicStringArgumentsAfterOptionalArgument(optional_arg, strings); - return JSC::JSValue::encode(JSC::jsUndefined()); - break; - } - default: - NOTREACHED(); - return JSC::JSValue::encode(JSC::jsUndefined()); - } - -} - -JSC::EncodedJSValue functionJSvoidFunctionLongArg( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call voidFunctionLongArg"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->VoidFunctionLongArg(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSvoidFunctionNoArgs( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call voidFunctionNoArgs"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->VoidFunctionNoArgs(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSvoidFunctionObjectArg( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call voidFunctionObjectArg"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<scoped_refptr<ArbitraryInterface> >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->VoidFunctionObjectArg(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSvoidFunctionStringArg( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call voidFunctionStringArg"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - OperationsTestInterface* impl = - GetWrappableOrSetException<OperationsTestInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->VoidFunctionStringArg(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue staticFunctionJSoverloadedFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCOperationsTestInterface", "call overloadedFunction"); - const size_t num_arguments = exec_state->argumentCount(); - switch(num_arguments) { - case(1): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - if (true) { - return staticFunctionJSoverloadedFunction1(exec_state); - } - break; - } - case(2): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - if (true) { - return staticFunctionJSoverloadedFunction2(exec_state); - } - break; - } - } - // Invalid number of args - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - // 4. If S is empty, then throw a TypeError. - return JSC::throwVMTypeError(exec_state); -} - -JSC::EncodedJSValue staticFunctionJSoverloadedFunction1( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<double >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagRestricted), - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - OperationsTestInterface::OverloadedFunction(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue staticFunctionJSoverloadedFunction2( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - const size_t kMinArguments = 2; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<double >::ConversionType arg1; - TypeTraits<double >::ConversionType arg2; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - (kConversionFlagRestricted), - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - (kConversionFlagRestricted), - &exception_state, &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - OperationsTestInterface::OverloadedFunction(arg1, arg2); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.h deleted file mode 100644 index d1158e9..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCOperationsTestInterface_h -#define JSCOperationsTestInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/operations_test_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCOperationsTestInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to OperationsTestInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCOperationsTestInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<OperationsTestInterface>& impl); - ~JSCOperationsTestInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCOperationsTestInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc deleted file mode 100644 index c51d3be..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc +++ /dev/null
@@ -1,833 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCPutForwardsInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::PutForwardsInterface; -using cobalt::bindings::testing::JSCPutForwardsInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSforwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSforwardingAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSstaticForwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSstaticForwardingAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCPutForwardsInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCPutForwardsInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCPutForwardsInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { "staticForwardingAttribute", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSstaticForwardingAttribute), - 0, - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCPutForwardsInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCPutForwardsInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCPutForwardsInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCPutForwardsInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCPutForwardsInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCPutForwardsInterface::InterfaceObject::s_info = { - "PutForwardsInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCPutForwardsInterface::InterfaceObject) -}; // JSCPutForwardsInterface::InterfaceObject::s_info - -void JSCPutForwardsInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCPutForwardsInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCPutForwardsInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "PutForwardsInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCPutForwardsInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCPutForwardsInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCPutForwardsInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCPutForwardsInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCPutForwardsInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCPutForwardsInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCPutForwardsInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCPutForwardsInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCPutForwardsInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCPutForwardsInterface::Prototype::s_info = { - "PutForwardsInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCPutForwardsInterface::Prototype) -}; // JSCPutForwardsInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCPutForwardsInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCPutForwardsInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCPutForwardsInterface::Prototype class - -const JSC::HashTableValue JSCPutForwardsInterface::property_table_values[] = { - { "forwardingAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSforwardingAttribute), - reinterpret_cast<intptr_t>(setJSforwardingAttribute), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCPutForwardsInterface::property_table_values - -// static -const JSC::HashTable JSCPutForwardsInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCPutForwardsInterface::property_table_prototype - -// static -const JSC::HashTable* JSCPutForwardsInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCPutForwardsInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCPutForwardsInterface::NonTrivialStaticFields> - JSCPutForwardsInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCPutForwardsInterface::s_info = { - "PutForwardsInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCPutForwardsInterface) -}; // JSCPutForwardsInterface::s_info - -// static -JSC::JSObject* JSCPutForwardsInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCPutForwardsInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCPutForwardsInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCPutForwardsInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == PutForwardsInterface::PutForwardsInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match PutForwardsInterface::PutForwardsInterfaceWrappableType()"; - return NULL; - } - PutForwardsInterface* impl_ptr = - base::polymorphic_downcast<PutForwardsInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCPutForwardsInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCPutForwardsInterface>(global_data.heap)) - JSCPutForwardsInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCPutForwardsInterface::JSCPutForwardsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<PutForwardsInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCPutForwardsInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCPutForwardsInterface::~JSCPutForwardsInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCPutForwardsInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCPutForwardsInterface* this_object = JSC::jsCast<JSCPutForwardsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCPutForwardsInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCPutForwardsInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCPutForwardsInterface* this_object = JSC::jsCast<JSCPutForwardsInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCPutForwardsInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCPutForwardsInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCPutForwardsInterface* this_object = JSC::jsCast<JSCPutForwardsInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCPutForwardsInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSforwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCPutForwardsInterface", "get forwardingAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - PutForwardsInterface* impl = - GetWrappableOrSetException<PutForwardsInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->forwarding_attribute()); - return result; -} - -void setJSforwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCPutForwardsInterface", "set forwardingAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - PutForwardsInterface* impl = - GetWrappableOrSetException<PutForwardsInterface>(exec_state, this_object); - if (!impl) { - return; - } - { - scoped_refptr<ArbitraryInterface> forwarded_impl = - impl->forwarding_attribute(); - if (!forwarded_impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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()) { - forwarded_impl->set_arbitrary_property(cobalt_value); - } - } - -} - -JSC::JSValue getJSstaticForwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCPutForwardsInterface", "get staticForwardingAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - JSC::JSValue result = ToJSValue( - global_object, - PutForwardsInterface::static_forwarding_attribute()); - return result; -} - -void setJSstaticForwardingAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCPutForwardsInterface", "set staticForwardingAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - { - scoped_refptr<ArbitraryInterface> forwarded_impl = - PutForwardsInterface::static_forwarding_attribute(); - if (!forwarded_impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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()) { - forwarded_impl->set_arbitrary_property(cobalt_value); - } - } - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.h deleted file mode 100644 index 2fbc8e1..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCPutForwardsInterface_h -#define JSCPutForwardsInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/put_forwards_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCPutForwardsInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to PutForwardsInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCPutForwardsInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<PutForwardsInterface>& impl); - ~JSCPutForwardsInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCPutForwardsInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCSequenceUser.cc b/src/cobalt/bindings/generated/jsc/testing/JSCSequenceUser.cc deleted file mode 100644 index 0d06309..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCSequenceUser.cc +++ /dev/null
@@ -1,1175 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCSequenceUser.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::SequenceUser; -using cobalt::bindings::testing::JSCSequenceUser; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue constructorJSSequenceUser(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetInterfaceSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetInterfaceSequenceSequenceSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetLongSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetStringSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetStringSequenceSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetUnionOfStringAndStringSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSgetUnionSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetInterfaceSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetInterfaceSequenceSequenceSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetLongSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetStringSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetStringSequenceSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetUnionOfStringAndStringSequence(JSC::ExecState*); -JSC::EncodedJSValue functionJSsetUnionSequence(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCSequenceUser::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCSequenceUser"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCSequenceUser::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCSequenceUser::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCSequenceUser::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCSequenceUser::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCSequenceUser::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCSequenceUser::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCSequenceUser::InterfaceObject::s_info = { - "SequenceUserConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCSequenceUser::InterfaceObject) -}; // JSCSequenceUser::InterfaceObject::s_info - -void JSCSequenceUser::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCSequenceUser::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCSequenceUser::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJSSequenceUser); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "SequenceUser"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCSequenceUser::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCSequenceUser::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCSequenceUser::Prototype::property_table_values[] = { - { "getInterfaceSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetInterfaceSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "getInterfaceSequenceSequenceSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetInterfaceSequenceSequenceSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "getLongSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetLongSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "getStringSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetStringSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "getStringSequenceSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetStringSequenceSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "getUnionOfStringAndStringSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetUnionOfStringAndStringSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "getUnionSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetUnionSequence), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "setInterfaceSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetInterfaceSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "setInterfaceSequenceSequenceSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetInterfaceSequenceSequenceSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "setLongSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetLongSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "setStringSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetStringSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "setStringSequenceSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetStringSequenceSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "setUnionOfStringAndStringSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetUnionOfStringAndStringSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "setUnionSequence", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSsetUnionSequence), - static_cast<intptr_t>(1), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCSequenceUser::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCSequenceUser::Prototype::property_table_values - -// static -const JSC::HashTable JSCSequenceUser::Prototype::property_table_prototype = { - 46, // compactSize - 31, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCSequenceUser::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCSequenceUser::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCSequenceUser::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCSequenceUser::Prototype::s_info = { - "SequenceUserPrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCSequenceUser::Prototype) -}; // JSCSequenceUser::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCSequenceUser::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCSequenceUser::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCSequenceUser::Prototype class - -const JSC::HashTableValue JSCSequenceUser::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCSequenceUser::property_table_values - -// static -const JSC::HashTable JSCSequenceUser::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCSequenceUser::property_table_prototype - -// static -const JSC::HashTable* JSCSequenceUser::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCSequenceUser::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCSequenceUser::NonTrivialStaticFields> - JSCSequenceUser::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCSequenceUser::s_info = { - "SequenceUser", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCSequenceUser) -}; // JSCSequenceUser::s_info - -// static -JSC::JSObject* JSCSequenceUser::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCSequenceUser::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCSequenceUser::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCSequenceUser::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == SequenceUser::SequenceUserWrappableType())) { - NOTREACHED() << "Type of wrappable does not match SequenceUser::SequenceUserWrappableType()"; - return NULL; - } - SequenceUser* impl_ptr = - base::polymorphic_downcast<SequenceUser*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCSequenceUser* wrapper = - new (NotNull, JSC::allocateCell<JSCSequenceUser>(global_data.heap)) - JSCSequenceUser( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCSequenceUser::JSCSequenceUser( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<SequenceUser>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCSequenceUser::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCSequenceUser::~JSCSequenceUser() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCSequenceUser::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCSequenceUser* this_object = JSC::jsCast<JSCSequenceUser*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCSequenceUser, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCSequenceUser::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCSequenceUser* this_object = JSC::jsCast<JSCSequenceUser*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCSequenceUser, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCSequenceUser::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCSequenceUser* this_object = JSC::jsCast<JSCSequenceUser*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCSequenceUser, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue constructorJSSequenceUser(JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - scoped_refptr<SequenceUser> new_object = - new SequenceUser(); - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); - -} - -JSC::EncodedJSValue functionJSgetInterfaceSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getInterfaceSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::Sequence< scoped_refptr<ArbitraryInterface> > >::ReturnType return_value = impl->GetInterfaceSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSgetInterfaceSequenceSequenceSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getInterfaceSequenceSequenceSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::Sequence< script::Sequence< script::Sequence< scoped_refptr<ArbitraryInterface> > > > >::ReturnType return_value = impl->GetInterfaceSequenceSequenceSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSgetLongSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getLongSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::Sequence< int32_t > >::ReturnType return_value = impl->GetLongSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSgetStringSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getStringSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::Sequence< std::string > >::ReturnType return_value = impl->GetStringSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSgetStringSequenceSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getStringSequenceSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::Sequence< script::Sequence< std::string > > >::ReturnType return_value = impl->GetStringSequenceSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSgetUnionOfStringAndStringSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getUnionOfStringAndStringSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::UnionType2<std::string, script::Sequence< std::string > > >::ReturnType return_value = impl->GetUnionOfStringAndStringSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSgetUnionSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call getUnionSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<script::Sequence< script::UnionType2<std::string, scoped_refptr<ArbitraryInterface> > > >::ReturnType return_value = impl->GetUnionSequence(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSsetInterfaceSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setInterfaceSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::Sequence< scoped_refptr<ArbitraryInterface> > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetInterfaceSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsetInterfaceSequenceSequenceSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setInterfaceSequenceSequenceSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::Sequence< script::Sequence< script::Sequence< scoped_refptr<ArbitraryInterface> > > > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetInterfaceSequenceSequenceSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsetLongSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setLongSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::Sequence< int32_t > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetLongSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsetStringSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setStringSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::Sequence< std::string > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetStringSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsetStringSequenceSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setStringSequenceSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::Sequence< script::Sequence< std::string > > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetStringSequenceSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsetUnionOfStringAndStringSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setUnionOfStringAndStringSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::UnionType2<std::string, script::Sequence< std::string > > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetUnionOfStringAndStringSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSsetUnionSequence( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCSequenceUser", "call setUnionSequence"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - SequenceUser* impl = - GetWrappableOrSetException<SequenceUser>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<script::Sequence< script::UnionType2<std::string, scoped_refptr<ArbitraryInterface> > > >::ConversionType elements; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &elements); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - impl->SetUnionSequence(elements); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCSequenceUser.h b/src/cobalt/bindings/generated/jsc/testing/JSCSequenceUser.h deleted file mode 100644 index 251cec3..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCSequenceUser.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCSequenceUser_h -#define JSCSequenceUser_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/sequence_user.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCSequenceUser - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to SequenceUser. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCSequenceUser( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<SequenceUser>& impl); - ~JSCSequenceUser(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCSequenceUser_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCSingleOperationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCSingleOperationInterface.cc deleted file mode 100644 index 60515f6..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCSingleOperationInterface.cc +++ /dev/null
@@ -1,106 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/callback-interface.h.template - -// clang-format off - - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCSingleOperationInterface.h" -#include "JSCArbitraryInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h" -#include "cobalt/script/javascriptcore/jsc_exception_state.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" - -namespace { -using cobalt::bindings::testing::SingleOperationInterface; -using cobalt::bindings::testing::JSCSingleOperationInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; - -using cobalt::script::javascriptcore::GetCallableForCallbackInterface; -using cobalt::script::javascriptcore::JSCGlobalObject; -using cobalt::script::javascriptcore::JSCExceptionState; -using cobalt::script::javascriptcore::ToJSValue; -using cobalt::script::javascriptcore::util::GetExceptionString; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -JSCSingleOperationInterface::JSCSingleOperationInterface( - JSC::JSObject* implementing_object) - : implementing_object_(implementing_object) { } - -base::optional<int32_t > JSCSingleOperationInterface::HandleCallback( - const scoped_refptr<script::Wrappable>& callback_this, - const scoped_refptr<ArbitraryInterface>& value, - bool* had_exception) const { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(implementing_object_->globalObject()); - JSC::JSGlobalData* global_data = &global_object->globalData(); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSLockHolder lock(*global_data); - - // get callable object - JSC::JSValue callable; - JSC::CallData call_data; - JSC::CallType call_type = GetCallableForCallbackInterface(exec_state, - implementing_object_, "handleCallback", &callable, &call_data); - if (call_type == JSC::CallTypeNone) { - // TypeError - DLOG(INFO) << "User object was not callable."; - *had_exception = true; - return base::optional<int32_t >(); - } - - JSC::JSValue js_this = ToJSValue(global_object, callback_this); - - // Convert args. - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, value)); - - // call - JSC::DynamicGlobalObjectScope global_object_scope(*global_data, global_object); - JSC::JSValue js_return_value = - JSC::call(exec_state, callable, call_type, call_data, js_this, args); - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << GetExceptionString(exec_state); - exec_state->clearException(); - *had_exception = true; - return base::optional<int32_t >(); - } - JSCExceptionState exception_state(global_object); - base::optional<int32_t > cobalt_return_value; - FromJSValue(exec_state, js_return_value, 0, &exception_state, &cobalt_return_value); - - *had_exception = exception_state.is_exception_set(); - return cobalt_return_value; -} - -} // namespace bindings -} // namespace testing -} // namespace cobalt -
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCSingleOperationInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCSingleOperationInterface.h deleted file mode 100644 index 6b8be4c..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCSingleOperationInterface.h +++ /dev/null
@@ -1,60 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/callback-interface.h.template - -// clang-format off - -#ifndef JSCSingleOperationInterface_h -#define JSCSingleOperationInterface_h - -#include "cobalt/script/wrappable.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "cobalt/bindings/testing/single_operation_interface.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCSingleOperationInterface : public SingleOperationInterface { - public: - JSCSingleOperationInterface(JSC::JSObject* implementing_object); - base::optional<int32_t > HandleCallback( - const scoped_refptr<script::Wrappable>& callback_this, - const scoped_refptr<ArbitraryInterface>& value, - bool* had_exception) const OVERRIDE; - JSC::JSObject* implementing_object() const { return implementing_object_; } - - private: - JSC::JSObject* implementing_object_; -}; - -} // namespace bindings -} // namespace testing -namespace script { -// Explicit instantiation of CallbackInterfaceTraits struct so we can infer -// the type of the generated class from the type of the callback interface. -template<> -struct CallbackInterfaceTraits<bindings::testing::SingleOperationInterface> { - typedef bindings::testing::JSCSingleOperationInterface JSCCallbackInterfaceClass; -}; - -} // namespace script -} // namespace cobalt - -#endif // JSCSingleOperationInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc deleted file mode 100644 index d791d04..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc +++ /dev/null
@@ -1,971 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCStaticPropertiesInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::StaticPropertiesInterface; -using cobalt::bindings::testing::JSCStaticPropertiesInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSstaticAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSstaticAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue staticFunctionJSstaticFunction(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSstaticFunction1(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSstaticFunction2(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSstaticFunction3(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSstaticFunction4(JSC::ExecState*); -JSC::EncodedJSValue staticFunctionJSstaticFunction5(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCStaticPropertiesInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCStaticPropertiesInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStaticPropertiesInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { "staticAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSstaticAttribute), - reinterpret_cast<intptr_t>(setJSstaticAttribute), - JSC::NoIntrinsic - }, - { "staticFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(staticFunctionJSstaticFunction), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStaticPropertiesInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCStaticPropertiesInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStaticPropertiesInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCStaticPropertiesInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStaticPropertiesInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCStaticPropertiesInterface::InterfaceObject::s_info = { - "StaticPropertiesInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStaticPropertiesInterface::InterfaceObject) -}; // JSCStaticPropertiesInterface::InterfaceObject::s_info - -void JSCStaticPropertiesInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCStaticPropertiesInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCStaticPropertiesInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "StaticPropertiesInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCStaticPropertiesInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCStaticPropertiesInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStaticPropertiesInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCStaticPropertiesInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStaticPropertiesInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCStaticPropertiesInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStaticPropertiesInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCStaticPropertiesInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStaticPropertiesInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCStaticPropertiesInterface::Prototype::s_info = { - "StaticPropertiesInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStaticPropertiesInterface::Prototype) -}; // JSCStaticPropertiesInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCStaticPropertiesInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCStaticPropertiesInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCStaticPropertiesInterface::Prototype class - -const JSC::HashTableValue JSCStaticPropertiesInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStaticPropertiesInterface::property_table_values - -// static -const JSC::HashTable JSCStaticPropertiesInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStaticPropertiesInterface::property_table_prototype - -// static -const JSC::HashTable* JSCStaticPropertiesInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStaticPropertiesInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCStaticPropertiesInterface::NonTrivialStaticFields> - JSCStaticPropertiesInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCStaticPropertiesInterface::s_info = { - "StaticPropertiesInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStaticPropertiesInterface) -}; // JSCStaticPropertiesInterface::s_info - -// static -JSC::JSObject* JSCStaticPropertiesInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCStaticPropertiesInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCStaticPropertiesInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCStaticPropertiesInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == StaticPropertiesInterface::StaticPropertiesInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match StaticPropertiesInterface::StaticPropertiesInterfaceWrappableType()"; - return NULL; - } - StaticPropertiesInterface* impl_ptr = - base::polymorphic_downcast<StaticPropertiesInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCStaticPropertiesInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCStaticPropertiesInterface>(global_data.heap)) - JSCStaticPropertiesInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCStaticPropertiesInterface::JSCStaticPropertiesInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StaticPropertiesInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCStaticPropertiesInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCStaticPropertiesInterface::~JSCStaticPropertiesInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCStaticPropertiesInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCStaticPropertiesInterface* this_object = JSC::jsCast<JSCStaticPropertiesInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCStaticPropertiesInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCStaticPropertiesInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCStaticPropertiesInterface* this_object = JSC::jsCast<JSCStaticPropertiesInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCStaticPropertiesInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCStaticPropertiesInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCStaticPropertiesInterface* this_object = JSC::jsCast<JSCStaticPropertiesInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCStaticPropertiesInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSstaticAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCStaticPropertiesInterface", "get staticAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - JSC::JSValue result = ToJSValue( - global_object, - StaticPropertiesInterface::static_attribute()); - return result; -} - -void setJSstaticAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCStaticPropertiesInterface", "set staticAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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()) { - StaticPropertiesInterface::set_static_attribute(cobalt_value); - } -} - -JSC::EncodedJSValue staticFunctionJSstaticFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCStaticPropertiesInterface", "call staticFunction"); - const size_t num_arguments = exec_state->argumentCount(); - switch(num_arguments) { - case(0): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - if (true) { - return staticFunctionJSstaticFunction1(exec_state); - } - break; - } - case(1): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - JSC::JSValue arg = exec_state->argument(0); - if (arg.isNumber()) { - return staticFunctionJSstaticFunction2(exec_state); - } - if (true) { - return staticFunctionJSstaticFunction3(exec_state); - } - if (true) { - return staticFunctionJSstaticFunction2(exec_state); - } - break; - } - case(3): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - JSC::JSValue arg = exec_state->argument(2); - if (arg.inherits(JSCArbitraryInterface::s_classinfo())) { - return staticFunctionJSstaticFunction5(exec_state); - } - if (true) { - return staticFunctionJSstaticFunction4(exec_state); - } - break; - } - } - // Invalid number of args - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - // 4. If S is empty, then throw a TypeError. - return JSC::throwVMTypeError(exec_state); -} - -JSC::EncodedJSValue staticFunctionJSstaticFunction1( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - StaticPropertiesInterface::StaticFunction(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue staticFunctionJSstaticFunction2( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - StaticPropertiesInterface::StaticFunction(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue staticFunctionJSstaticFunction3( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - const size_t kMinArguments = 1; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<std::string >::ConversionType arg; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - StaticPropertiesInterface::StaticFunction(arg); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue staticFunctionJSstaticFunction4( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - const size_t kMinArguments = 3; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - TypeTraits<int32_t >::ConversionType arg2; - TypeTraits<int32_t >::ConversionType arg3; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(2, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(2), - kNoConversionFlags, - &exception_state, &arg3); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - StaticPropertiesInterface::StaticFunction(arg1, arg2, arg3); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue staticFunctionJSstaticFunction5( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - const size_t kMinArguments = 3; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } - // Non-optional arguments - TypeTraits<int32_t >::ConversionType arg1; - TypeTraits<int32_t >::ConversionType arg2; - TypeTraits<scoped_refptr<ArbitraryInterface> >::ConversionType arg3; - - DCHECK_LT(0, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(0), - kNoConversionFlags, - &exception_state, &arg1); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(1, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(1), - kNoConversionFlags, - &exception_state, &arg2); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - - DCHECK_LT(2, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument(2), - kNoConversionFlags, - &exception_state, &arg3); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - StaticPropertiesInterface::StaticFunction(arg1, arg2, arg3); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.h deleted file mode 100644 index dbb5bf8..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCStaticPropertiesInterface_h -#define JSCStaticPropertiesInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/static_properties_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCStaticPropertiesInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to StaticPropertiesInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCStaticPropertiesInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StaticPropertiesInterface>& impl); - ~JSCStaticPropertiesInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCStaticPropertiesInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc deleted file mode 100644 index 87dd022..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc +++ /dev/null
@@ -1,725 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCStringifierAnonymousOperationInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::StringifierAnonymousOperationInterface; -using cobalt::bindings::testing::JSCStringifierAnonymousOperationInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue StringifierJS(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCStringifierAnonymousOperationInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCStringifierAnonymousOperationInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStringifierAnonymousOperationInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierAnonymousOperationInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCStringifierAnonymousOperationInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierAnonymousOperationInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCStringifierAnonymousOperationInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierAnonymousOperationInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCStringifierAnonymousOperationInterface::InterfaceObject::s_info = { - "StringifierAnonymousOperationInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierAnonymousOperationInterface::InterfaceObject) -}; // JSCStringifierAnonymousOperationInterface::InterfaceObject::s_info - -void JSCStringifierAnonymousOperationInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCStringifierAnonymousOperationInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCStringifierAnonymousOperationInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "StringifierAnonymousOperationInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCStringifierAnonymousOperationInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCStringifierAnonymousOperationInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStringifierAnonymousOperationInterface::Prototype::property_table_values[] = { - { "toString", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(StringifierJS), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCStringifierAnonymousOperationInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierAnonymousOperationInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCStringifierAnonymousOperationInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierAnonymousOperationInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCStringifierAnonymousOperationInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierAnonymousOperationInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCStringifierAnonymousOperationInterface::Prototype::s_info = { - "StringifierAnonymousOperationInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierAnonymousOperationInterface::Prototype) -}; // JSCStringifierAnonymousOperationInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCStringifierAnonymousOperationInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCStringifierAnonymousOperationInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCStringifierAnonymousOperationInterface::Prototype class - -const JSC::HashTableValue JSCStringifierAnonymousOperationInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierAnonymousOperationInterface::property_table_values - -// static -const JSC::HashTable JSCStringifierAnonymousOperationInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierAnonymousOperationInterface::property_table_prototype - -// static -const JSC::HashTable* JSCStringifierAnonymousOperationInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierAnonymousOperationInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCStringifierAnonymousOperationInterface::NonTrivialStaticFields> - JSCStringifierAnonymousOperationInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCStringifierAnonymousOperationInterface::s_info = { - "StringifierAnonymousOperationInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierAnonymousOperationInterface) -}; // JSCStringifierAnonymousOperationInterface::s_info - -// static -JSC::JSObject* JSCStringifierAnonymousOperationInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCStringifierAnonymousOperationInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCStringifierAnonymousOperationInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCStringifierAnonymousOperationInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == StringifierAnonymousOperationInterface::StringifierAnonymousOperationInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match StringifierAnonymousOperationInterface::StringifierAnonymousOperationInterfaceWrappableType()"; - return NULL; - } - StringifierAnonymousOperationInterface* impl_ptr = - base::polymorphic_downcast<StringifierAnonymousOperationInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCStringifierAnonymousOperationInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCStringifierAnonymousOperationInterface>(global_data.heap)) - JSCStringifierAnonymousOperationInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCStringifierAnonymousOperationInterface::JSCStringifierAnonymousOperationInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StringifierAnonymousOperationInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCStringifierAnonymousOperationInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCStringifierAnonymousOperationInterface::~JSCStringifierAnonymousOperationInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCStringifierAnonymousOperationInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCStringifierAnonymousOperationInterface* this_object = JSC::jsCast<JSCStringifierAnonymousOperationInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCStringifierAnonymousOperationInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCStringifierAnonymousOperationInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCStringifierAnonymousOperationInterface* this_object = JSC::jsCast<JSCStringifierAnonymousOperationInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCStringifierAnonymousOperationInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCStringifierAnonymousOperationInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCStringifierAnonymousOperationInterface* this_object = JSC::jsCast<JSCStringifierAnonymousOperationInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCStringifierAnonymousOperationInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -JSC::EncodedJSValue StringifierJS(JSC::ExecState* exec_state) { - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - StringifierAnonymousOperationInterface* impl = - GetWrappableOrSetException<StringifierAnonymousOperationInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - JSC::JSValue result = ToJSValue(global_object, impl->AnonymousStringifier()); - return JSC::JSValue::encode(result); -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.h deleted file mode 100644 index ac79ef5..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCStringifierAnonymousOperationInterface_h -#define JSCStringifierAnonymousOperationInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/stringifier_anonymous_operation_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCStringifierAnonymousOperationInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to StringifierAnonymousOperationInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCStringifierAnonymousOperationInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StringifierAnonymousOperationInterface>& impl); - ~JSCStringifierAnonymousOperationInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCStringifierAnonymousOperationInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc deleted file mode 100644 index 3b0dfed..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc +++ /dev/null
@@ -1,785 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCStringifierAttributeInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::StringifierAttributeInterface; -using cobalt::bindings::testing::JSCStringifierAttributeInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJStheStringifierAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJStheStringifierAttribute( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::EncodedJSValue StringifierJS(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCStringifierAttributeInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCStringifierAttributeInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStringifierAttributeInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierAttributeInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCStringifierAttributeInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierAttributeInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCStringifierAttributeInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierAttributeInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCStringifierAttributeInterface::InterfaceObject::s_info = { - "StringifierAttributeInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierAttributeInterface::InterfaceObject) -}; // JSCStringifierAttributeInterface::InterfaceObject::s_info - -void JSCStringifierAttributeInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCStringifierAttributeInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCStringifierAttributeInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "StringifierAttributeInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCStringifierAttributeInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCStringifierAttributeInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStringifierAttributeInterface::Prototype::property_table_values[] = { - { "toString", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(StringifierJS), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCStringifierAttributeInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierAttributeInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCStringifierAttributeInterface::Prototype::property_table_prototype = { - 9, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierAttributeInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCStringifierAttributeInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierAttributeInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCStringifierAttributeInterface::Prototype::s_info = { - "StringifierAttributeInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierAttributeInterface::Prototype) -}; // JSCStringifierAttributeInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCStringifierAttributeInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCStringifierAttributeInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCStringifierAttributeInterface::Prototype class - -const JSC::HashTableValue JSCStringifierAttributeInterface::property_table_values[] = { - { "theStringifierAttribute", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJStheStringifierAttribute), - reinterpret_cast<intptr_t>(setJStheStringifierAttribute), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierAttributeInterface::property_table_values - -// static -const JSC::HashTable JSCStringifierAttributeInterface::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierAttributeInterface::property_table_prototype - -// static -const JSC::HashTable* JSCStringifierAttributeInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierAttributeInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCStringifierAttributeInterface::NonTrivialStaticFields> - JSCStringifierAttributeInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCStringifierAttributeInterface::s_info = { - "StringifierAttributeInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierAttributeInterface) -}; // JSCStringifierAttributeInterface::s_info - -// static -JSC::JSObject* JSCStringifierAttributeInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCStringifierAttributeInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCStringifierAttributeInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCStringifierAttributeInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == StringifierAttributeInterface::StringifierAttributeInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match StringifierAttributeInterface::StringifierAttributeInterfaceWrappableType()"; - return NULL; - } - StringifierAttributeInterface* impl_ptr = - base::polymorphic_downcast<StringifierAttributeInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCStringifierAttributeInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCStringifierAttributeInterface>(global_data.heap)) - JSCStringifierAttributeInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCStringifierAttributeInterface::JSCStringifierAttributeInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StringifierAttributeInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCStringifierAttributeInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCStringifierAttributeInterface::~JSCStringifierAttributeInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCStringifierAttributeInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCStringifierAttributeInterface* this_object = JSC::jsCast<JSCStringifierAttributeInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCStringifierAttributeInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCStringifierAttributeInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCStringifierAttributeInterface* this_object = JSC::jsCast<JSCStringifierAttributeInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCStringifierAttributeInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCStringifierAttributeInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCStringifierAttributeInterface* this_object = JSC::jsCast<JSCStringifierAttributeInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCStringifierAttributeInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJStheStringifierAttribute( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCStringifierAttributeInterface", "get theStringifierAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - StringifierAttributeInterface* impl = - GetWrappableOrSetException<StringifierAttributeInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->the_stringifier_attribute()); - return result; -} - -void setJStheStringifierAttribute( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCStringifierAttributeInterface", "set theStringifierAttribute"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - StringifierAttributeInterface* impl = - GetWrappableOrSetException<StringifierAttributeInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_the_stringifier_attribute(cobalt_value); - } -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -JSC::EncodedJSValue StringifierJS(JSC::ExecState* exec_state) { - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - StringifierAttributeInterface* impl = - GetWrappableOrSetException<StringifierAttributeInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - JSC::JSValue result = ToJSValue(global_object, impl->the_stringifier_attribute()); - return JSC::JSValue::encode(result); -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.h deleted file mode 100644 index 3d84c36..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCStringifierAttributeInterface_h -#define JSCStringifierAttributeInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/stringifier_attribute_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCStringifierAttributeInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to StringifierAttributeInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCStringifierAttributeInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StringifierAttributeInterface>& impl); - ~JSCStringifierAttributeInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCStringifierAttributeInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc deleted file mode 100644 index db2d4b4..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc +++ /dev/null
@@ -1,751 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCStringifierOperationInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::StringifierOperationInterface; -using cobalt::bindings::testing::JSCStringifierOperationInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue functionJStheStringifierOperation(JSC::ExecState*); -JSC::EncodedJSValue StringifierJS(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCStringifierOperationInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCStringifierOperationInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStringifierOperationInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierOperationInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCStringifierOperationInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierOperationInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCStringifierOperationInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierOperationInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCStringifierOperationInterface::InterfaceObject::s_info = { - "StringifierOperationInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierOperationInterface::InterfaceObject) -}; // JSCStringifierOperationInterface::InterfaceObject::s_info - -void JSCStringifierOperationInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCStringifierOperationInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCStringifierOperationInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "StringifierOperationInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCStringifierOperationInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCStringifierOperationInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCStringifierOperationInterface::Prototype::property_table_values[] = { - { "theStringifierOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJStheStringifierOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "toString", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(StringifierJS), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCStringifierOperationInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierOperationInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCStringifierOperationInterface::Prototype::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierOperationInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCStringifierOperationInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierOperationInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCStringifierOperationInterface::Prototype::s_info = { - "StringifierOperationInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierOperationInterface::Prototype) -}; // JSCStringifierOperationInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCStringifierOperationInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCStringifierOperationInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCStringifierOperationInterface::Prototype class - -const JSC::HashTableValue JSCStringifierOperationInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCStringifierOperationInterface::property_table_values - -// static -const JSC::HashTable JSCStringifierOperationInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCStringifierOperationInterface::property_table_prototype - -// static -const JSC::HashTable* JSCStringifierOperationInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCStringifierOperationInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCStringifierOperationInterface::NonTrivialStaticFields> - JSCStringifierOperationInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCStringifierOperationInterface::s_info = { - "StringifierOperationInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCStringifierOperationInterface) -}; // JSCStringifierOperationInterface::s_info - -// static -JSC::JSObject* JSCStringifierOperationInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCStringifierOperationInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCStringifierOperationInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCStringifierOperationInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == StringifierOperationInterface::StringifierOperationInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match StringifierOperationInterface::StringifierOperationInterfaceWrappableType()"; - return NULL; - } - StringifierOperationInterface* impl_ptr = - base::polymorphic_downcast<StringifierOperationInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCStringifierOperationInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCStringifierOperationInterface>(global_data.heap)) - JSCStringifierOperationInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCStringifierOperationInterface::JSCStringifierOperationInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StringifierOperationInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCStringifierOperationInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCStringifierOperationInterface::~JSCStringifierOperationInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCStringifierOperationInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCStringifierOperationInterface* this_object = JSC::jsCast<JSCStringifierOperationInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCStringifierOperationInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCStringifierOperationInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCStringifierOperationInterface* this_object = JSC::jsCast<JSCStringifierOperationInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCStringifierOperationInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCStringifierOperationInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCStringifierOperationInterface* this_object = JSC::jsCast<JSCStringifierOperationInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCStringifierOperationInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue functionJStheStringifierOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCStringifierOperationInterface", "call theStringifierOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - StringifierOperationInterface* impl = - GetWrappableOrSetException<StringifierOperationInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<std::string >::ReturnType return_value = impl->TheStringifierOperation(); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -JSC::EncodedJSValue StringifierJS(JSC::ExecState* exec_state) { - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - StringifierOperationInterface* impl = - GetWrappableOrSetException<StringifierOperationInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - JSC::JSValue result = ToJSValue(global_object, impl->TheStringifierOperation()); - return JSC::JSValue::encode(result); -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.h deleted file mode 100644 index f20c26d..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCStringifierOperationInterface_h -#define JSCStringifierOperationInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/stringifier_operation_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCStringifierOperationInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to StringifierOperationInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCStringifierOperationInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<StringifierOperationInterface>& impl); - ~JSCStringifierOperationInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCStringifierOperationInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc deleted file mode 100644 index 0dbd16b..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc +++ /dev/null
@@ -1,755 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCTargetInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::TargetInterface; -using cobalt::bindings::testing::JSCTargetInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::EncodedJSValue functionJSimplementedInterfaceFunction(JSC::ExecState*); -JSC::EncodedJSValue functionJSpartialInterfaceFunction(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCTargetInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCTargetInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCTargetInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCTargetInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCTargetInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCTargetInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCTargetInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCTargetInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCTargetInterface::InterfaceObject::s_info = { - "TargetInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCTargetInterface::InterfaceObject) -}; // JSCTargetInterface::InterfaceObject::s_info - -void JSCTargetInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCTargetInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCTargetInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "TargetInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCTargetInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCTargetInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCTargetInterface::Prototype::property_table_values[] = { - { "implementedInterfaceFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSimplementedInterfaceFunction), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "partialInterfaceFunction", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSpartialInterfaceFunction), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCTargetInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCTargetInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCTargetInterface::Prototype::property_table_prototype = { - 10, // compactSize - 7, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCTargetInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCTargetInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCTargetInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCTargetInterface::Prototype::s_info = { - "TargetInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCTargetInterface::Prototype) -}; // JSCTargetInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCTargetInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCTargetInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCTargetInterface::Prototype class - -const JSC::HashTableValue JSCTargetInterface::property_table_values[] = { - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCTargetInterface::property_table_values - -// static -const JSC::HashTable JSCTargetInterface::property_table_prototype = { - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCTargetInterface::property_table_prototype - -// static -const JSC::HashTable* JSCTargetInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCTargetInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCTargetInterface::NonTrivialStaticFields> - JSCTargetInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCTargetInterface::s_info = { - "TargetInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCTargetInterface) -}; // JSCTargetInterface::s_info - -// static -JSC::JSObject* JSCTargetInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCTargetInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCTargetInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCTargetInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == TargetInterface::TargetInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match TargetInterface::TargetInterfaceWrappableType()"; - return NULL; - } - TargetInterface* impl_ptr = - base::polymorphic_downcast<TargetInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCTargetInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCTargetInterface>(global_data.heap)) - JSCTargetInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCTargetInterface::JSCTargetInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<TargetInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCTargetInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCTargetInterface::~JSCTargetInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCTargetInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCTargetInterface* this_object = JSC::jsCast<JSCTargetInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCTargetInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCTargetInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCTargetInterface* this_object = JSC::jsCast<JSCTargetInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCTargetInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCTargetInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCTargetInterface* this_object = JSC::jsCast<JSCTargetInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCTargetInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::EncodedJSValue functionJSimplementedInterfaceFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCTargetInterface", "call implementedInterfaceFunction"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - TargetInterface* impl = - GetWrappableOrSetException<TargetInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->ImplementedInterfaceFunction(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} - -JSC::EncodedJSValue functionJSpartialInterfaceFunction( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCTargetInterface", "call partialInterfaceFunction"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - TargetInterface* impl = - GetWrappableOrSetException<TargetInterface>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->PartialInterfaceFunction(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.h deleted file mode 100644 index 511a979..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCTargetInterface_h -#define JSCTargetInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/target_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCTargetInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to TargetInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCTargetInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<TargetInterface>& impl); - ~JSCTargetInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCTargetInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc deleted file mode 100644 index e1a3fce..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc +++ /dev/null
@@ -1,951 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCUnionTypesInterface.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCArbitraryInterface.h" -#include "JSCBaseInterface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" -#include "cobalt/bindings/testing/base_interface.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::UnionTypesInterface; -using cobalt::bindings::testing::JSCUnionTypesInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::BaseInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::bindings::testing::JSCBaseInterface; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSunionProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunionProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSunionWithNullableMemberProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunionWithNullableMemberProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSnullableUnionProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSnullableUnionProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSunionBaseProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSunionBaseProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = true; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCUnionTypesInterface::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCUnionTypesInterface"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCUnionTypesInterface::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCUnionTypesInterface::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCUnionTypesInterface::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCUnionTypesInterface::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCUnionTypesInterface::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCUnionTypesInterface::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCUnionTypesInterface::InterfaceObject::s_info = { - "UnionTypesInterfaceConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCUnionTypesInterface::InterfaceObject) -}; // JSCUnionTypesInterface::InterfaceObject::s_info - -void JSCUnionTypesInterface::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCUnionTypesInterface::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCUnionTypesInterface::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "UnionTypesInterface"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCUnionTypesInterface::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCUnionTypesInterface::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCUnionTypesInterface::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCUnionTypesInterface::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCUnionTypesInterface::Prototype::property_table_values - -// static -const JSC::HashTable JSCUnionTypesInterface::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCUnionTypesInterface::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCUnionTypesInterface::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCUnionTypesInterface::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCUnionTypesInterface::Prototype::s_info = { - "UnionTypesInterfacePrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCUnionTypesInterface::Prototype) -}; // JSCUnionTypesInterface::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCUnionTypesInterface::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCUnionTypesInterface::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = global_object->objectPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCUnionTypesInterface::Prototype class - -const JSC::HashTableValue JSCUnionTypesInterface::property_table_values[] = { - { "unionProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunionProperty), - reinterpret_cast<intptr_t>(setJSunionProperty), - JSC::NoIntrinsic - }, - { "unionWithNullableMemberProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunionWithNullableMemberProperty), - reinterpret_cast<intptr_t>(setJSunionWithNullableMemberProperty), - JSC::NoIntrinsic - }, - { "nullableUnionProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSnullableUnionProperty), - reinterpret_cast<intptr_t>(setJSnullableUnionProperty), - JSC::NoIntrinsic - }, - { "unionBaseProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSunionBaseProperty), - reinterpret_cast<intptr_t>(setJSunionBaseProperty), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCUnionTypesInterface::property_table_values - -// static -const JSC::HashTable JSCUnionTypesInterface::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCUnionTypesInterface::property_table_prototype - -// static -const JSC::HashTable* JSCUnionTypesInterface::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCUnionTypesInterface::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCUnionTypesInterface::NonTrivialStaticFields> - JSCUnionTypesInterface::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCUnionTypesInterface::s_info = { - "UnionTypesInterface", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCUnionTypesInterface) -}; // JSCUnionTypesInterface::s_info - -// static -JSC::JSObject* JSCUnionTypesInterface::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCUnionTypesInterface::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCUnionTypesInterface::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -JSC::JSObject* JSCUnionTypesInterface::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == UnionTypesInterface::UnionTypesInterfaceWrappableType())) { - NOTREACHED() << "Type of wrappable does not match UnionTypesInterface::UnionTypesInterfaceWrappableType()"; - return NULL; - } - UnionTypesInterface* impl_ptr = - base::polymorphic_downcast<UnionTypesInterface*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - JSCUnionTypesInterface* wrapper = - new (NotNull, JSC::allocateCell<JSCUnionTypesInterface>(global_data.heap)) - JSCUnionTypesInterface( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); - return wrapper; -} -JSCUnionTypesInterface::JSCUnionTypesInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<UnionTypesInterface>& impl) - : BaseClass(global_data, structure, script_object_registry, impl) { -} - -void JSCUnionTypesInterface::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCUnionTypesInterface::~JSCUnionTypesInterface() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCUnionTypesInterface::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCUnionTypesInterface* this_object = JSC::jsCast<JSCUnionTypesInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property_slot = JSC::getStaticValueSlot<JSCUnionTypesInterface, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCUnionTypesInterface::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCUnionTypesInterface* this_object = JSC::jsCast<JSCUnionTypesInterface*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ - } - - if (!property_handled) { - JSC::lookupPut<JSCUnionTypesInterface, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCUnionTypesInterface::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCUnionTypesInterface* this_object = JSC::jsCast<JSCUnionTypesInterface*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCUnionTypesInterface, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSunionProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCUnionTypesInterface", "get unionProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->union_property()); - return result; -} - -void setJSunionProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCUnionTypesInterface", "set unionProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<script::UnionType4<std::string, bool, scoped_refptr<ArbitraryInterface>, int32_t > >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_union_property(cobalt_value); - } -} - -JSC::JSValue getJSunionWithNullableMemberProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCUnionTypesInterface", "get unionWithNullableMemberProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->union_with_nullable_member_property()); - return result; -} - -void setJSunionWithNullableMemberProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCUnionTypesInterface", "set unionWithNullableMemberProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<base::optional<script::UnionType2<double, std::string > > >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_union_with_nullable_member_property(cobalt_value); - } -} - -JSC::JSValue getJSnullableUnionProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCUnionTypesInterface", "get nullableUnionProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->nullable_union_property()); - return result; -} - -void setJSnullableUnionProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCUnionTypesInterface", "set nullableUnionProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<base::optional<script::UnionType2<double, std::string > > >::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_nullable_union_property(cobalt_value); - } -} - -JSC::JSValue getJSunionBaseProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCUnionTypesInterface", "get unionBaseProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->union_base_property()); - return result; -} - -void setJSunionBaseProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCUnionTypesInterface", "set unionBaseProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - UnionTypesInterface* impl = - GetWrappableOrSetException<UnionTypesInterface>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<script::UnionType2<scoped_refptr<BaseInterface>, std::string > >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_union_base_property(cobalt_value); - } -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.h b/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.h deleted file mode 100644 index ddc64d2..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.h +++ /dev/null
@@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCUnionTypesInterface_h -#define JSCUnionTypesInterface_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "cobalt/bindings/testing/union_types_interface.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCUnionTypesInterface - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to UnionTypesInterface. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCUnionTypesInterface( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - const scoped_refptr<UnionTypesInterface>& impl); - ~JSCUnionTypesInterface(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCUnionTypesInterface_h
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc b/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc deleted file mode 100644 index b1720fd..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc +++ /dev/null
@@ -1,1229 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.cc.template - -// clang-format off - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -#include "JSCWindow.h" - -#include "base/debug/trace_event.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" -#include "JSCAnonymousIndexedGetterInterface.h" -#include "JSCAnonymousNamedGetterInterface.h" -#include "JSCAnonymousNamedIndexedGetterInterface.h" -#include "JSCArbitraryInterface.h" -#include "JSCBaseInterface.h" -#include "JSCBooleanTypeTestInterface.h" -#include "JSCCallbackFunctionInterface.h" -#include "JSCCallbackInterfaceInterface.h" -#include "JSCConditionalInterface.h" -#include "JSCConstantsInterface.h" -#include "JSCConstructorInterface.h" -#include "JSCConstructorWithArgumentsInterface.h" -#include "JSCDOMStringTestInterface.h" -#include "JSCDerivedGetterSetterInterface.h" -#include "JSCDerivedInterface.h" -#include "JSCDisabledInterface.h" -#include "JSCEnumerationInterface.h" -#include "JSCExceptionObjectInterface.h" -#include "JSCExceptionsInterface.h" -#include "JSCExtendedIDLAttributesInterface.h" -#include "JSCGarbageCollectionTestInterface.h" -#include "JSCGetOpaqueRootInterface.h" -#include "JSCGlobalInterfaceParent.h" -#include "JSCImplementedInterface.h" -#include "JSCIndexedGetterInterface.h" -#include "JSCInterfaceWithUnsupportedProperties.h" -#include "JSCNamedConstructorInterface.h" -#include "JSCNamedGetterInterface.h" -#include "JSCNamedIndexedGetterInterface.h" -#include "JSCNestedPutForwardsInterface.h" -#include "JSCNoConstructorInterface.h" -#include "JSCNoInterfaceObjectInterface.h" -#include "JSCNullableTypesTestInterface.h" -#include "JSCNumericTypesTestInterface.h" -#include "JSCObjectTypeBindingsInterface.h" -#include "JSCOperationsTestInterface.h" -#include "JSCPutForwardsInterface.h" -#include "JSCSequenceUser.h" -#include "JSCSingleOperationInterface.h" -#include "JSCStaticPropertiesInterface.h" -#include "JSCStringifierAnonymousOperationInterface.h" -#include "JSCStringifierAttributeInterface.h" -#include "JSCStringifierOperationInterface.h" -#include "JSCTargetInterface.h" -#include "JSCUnionTypesInterface.h" -#include "JSCWindow.h" -#include "cobalt/bindings/testing/anonymous_indexed_getter_interface.h" -#include "cobalt/bindings/testing/anonymous_named_getter_interface.h" -#include "cobalt/bindings/testing/anonymous_named_indexed_getter_interface.h" -#include "cobalt/bindings/testing/arbitrary_interface.h" -#include "cobalt/bindings/testing/base_interface.h" -#include "cobalt/bindings/testing/boolean_type_test_interface.h" -#include "cobalt/bindings/testing/callback_function_interface.h" -#include "cobalt/bindings/testing/callback_interface_interface.h" -#include "cobalt/bindings/testing/conditional_interface.h" -#include "cobalt/bindings/testing/constants_interface.h" -#include "cobalt/bindings/testing/constructor_interface.h" -#include "cobalt/bindings/testing/constructor_with_arguments_interface.h" -#include "cobalt/bindings/testing/derived_getter_setter_interface.h" -#include "cobalt/bindings/testing/derived_interface.h" -#include "cobalt/bindings/testing/disabled_interface.h" -#include "cobalt/bindings/testing/dom_string_test_interface.h" -#include "cobalt/bindings/testing/enumeration_interface.h" -#include "cobalt/bindings/testing/exception_object_interface.h" -#include "cobalt/bindings/testing/exceptions_interface.h" -#include "cobalt/bindings/testing/extended_idl_attributes_interface.h" -#include "cobalt/bindings/testing/garbage_collection_test_interface.h" -#include "cobalt/bindings/testing/get_opaque_root_interface.h" -#include "cobalt/bindings/testing/global_interface_parent.h" -#include "cobalt/bindings/testing/implemented_interface.h" -#include "cobalt/bindings/testing/indexed_getter_interface.h" -#include "cobalt/bindings/testing/interface_with_unsupported_properties.h" -#include "cobalt/bindings/testing/named_constructor_interface.h" -#include "cobalt/bindings/testing/named_getter_interface.h" -#include "cobalt/bindings/testing/named_indexed_getter_interface.h" -#include "cobalt/bindings/testing/nested_put_forwards_interface.h" -#include "cobalt/bindings/testing/no_constructor_interface.h" -#include "cobalt/bindings/testing/no_interface_object_interface.h" -#include "cobalt/bindings/testing/nullable_types_test_interface.h" -#include "cobalt/bindings/testing/numeric_types_test_interface.h" -#include "cobalt/bindings/testing/object_type_bindings_interface.h" -#include "cobalt/bindings/testing/operations_test_interface.h" -#include "cobalt/bindings/testing/put_forwards_interface.h" -#include "cobalt/bindings/testing/sequence_user.h" -#include "cobalt/bindings/testing/single_operation_interface.h" -#include "cobalt/bindings/testing/static_properties_interface.h" -#include "cobalt/bindings/testing/stringifier_anonymous_operation_interface.h" -#include "cobalt/bindings/testing/stringifier_attribute_interface.h" -#include "cobalt/bindings/testing/stringifier_operation_interface.h" -#include "cobalt/bindings/testing/target_interface.h" -#include "cobalt/bindings/testing/union_types_interface.h" -#include "cobalt/bindings/testing/window.h" - -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" - -namespace { -using cobalt::bindings::testing::Window; -using cobalt::bindings::testing::JSCWindow; -using cobalt::bindings::testing::AnonymousIndexedGetterInterface; -using cobalt::bindings::testing::AnonymousNamedGetterInterface; -using cobalt::bindings::testing::AnonymousNamedIndexedGetterInterface; -using cobalt::bindings::testing::ArbitraryInterface; -using cobalt::bindings::testing::BaseInterface; -using cobalt::bindings::testing::BooleanTypeTestInterface; -using cobalt::bindings::testing::CallbackFunctionInterface; -using cobalt::bindings::testing::CallbackInterfaceInterface; -#if defined(ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::ConditionalInterface; -#endif // defined(ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::ConstantsInterface; -using cobalt::bindings::testing::ConstructorInterface; -using cobalt::bindings::testing::ConstructorWithArgumentsInterface; -using cobalt::bindings::testing::DOMStringTestInterface; -using cobalt::bindings::testing::DerivedGetterSetterInterface; -using cobalt::bindings::testing::DerivedInterface; -#if defined(NO_ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::DisabledInterface; -#endif // defined(NO_ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::EnumerationInterface; -using cobalt::bindings::testing::ExceptionObjectInterface; -using cobalt::bindings::testing::ExceptionsInterface; -using cobalt::bindings::testing::ExtendedIDLAttributesInterface; -using cobalt::bindings::testing::GarbageCollectionTestInterface; -using cobalt::bindings::testing::GetOpaqueRootInterface; -using cobalt::bindings::testing::GlobalInterfaceParent; -using cobalt::bindings::testing::ImplementedInterface; -using cobalt::bindings::testing::IndexedGetterInterface; -using cobalt::bindings::testing::InterfaceWithUnsupportedProperties; -using cobalt::bindings::testing::JSCAnonymousIndexedGetterInterface; -using cobalt::bindings::testing::JSCAnonymousNamedGetterInterface; -using cobalt::bindings::testing::JSCAnonymousNamedIndexedGetterInterface; -using cobalt::bindings::testing::JSCArbitraryInterface; -using cobalt::bindings::testing::JSCBaseInterface; -using cobalt::bindings::testing::JSCBooleanTypeTestInterface; -using cobalt::bindings::testing::JSCCallbackFunctionInterface; -using cobalt::bindings::testing::JSCCallbackInterfaceInterface; -#if defined(ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::JSCConditionalInterface; -#endif // defined(ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::JSCConstantsInterface; -using cobalt::bindings::testing::JSCConstructorInterface; -using cobalt::bindings::testing::JSCConstructorWithArgumentsInterface; -using cobalt::bindings::testing::JSCDOMStringTestInterface; -using cobalt::bindings::testing::JSCDerivedGetterSetterInterface; -using cobalt::bindings::testing::JSCDerivedInterface; -#if defined(NO_ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::JSCDisabledInterface; -#endif // defined(NO_ENABLE_CONDITIONAL_INTERFACE) -using cobalt::bindings::testing::JSCEnumerationInterface; -using cobalt::bindings::testing::JSCExceptionObjectInterface; -using cobalt::bindings::testing::JSCExceptionsInterface; -using cobalt::bindings::testing::JSCExtendedIDLAttributesInterface; -using cobalt::bindings::testing::JSCGarbageCollectionTestInterface; -using cobalt::bindings::testing::JSCGetOpaqueRootInterface; -using cobalt::bindings::testing::JSCGlobalInterfaceParent; -using cobalt::bindings::testing::JSCImplementedInterface; -using cobalt::bindings::testing::JSCIndexedGetterInterface; -using cobalt::bindings::testing::JSCInterfaceWithUnsupportedProperties; -using cobalt::bindings::testing::JSCNamedConstructorInterface; -using cobalt::bindings::testing::JSCNamedGetterInterface; -using cobalt::bindings::testing::JSCNamedIndexedGetterInterface; -using cobalt::bindings::testing::JSCNestedPutForwardsInterface; -using cobalt::bindings::testing::JSCNoConstructorInterface; -using cobalt::bindings::testing::JSCNoInterfaceObjectInterface; -using cobalt::bindings::testing::JSCNullableTypesTestInterface; -using cobalt::bindings::testing::JSCNumericTypesTestInterface; -using cobalt::bindings::testing::JSCObjectTypeBindingsInterface; -using cobalt::bindings::testing::JSCOperationsTestInterface; -using cobalt::bindings::testing::JSCPutForwardsInterface; -using cobalt::bindings::testing::JSCSequenceUser; -using cobalt::bindings::testing::JSCSingleOperationInterface; -using cobalt::bindings::testing::JSCStaticPropertiesInterface; -using cobalt::bindings::testing::JSCStringifierAnonymousOperationInterface; -using cobalt::bindings::testing::JSCStringifierAttributeInterface; -using cobalt::bindings::testing::JSCStringifierOperationInterface; -using cobalt::bindings::testing::JSCTargetInterface; -using cobalt::bindings::testing::JSCUnionTypesInterface; -using cobalt::bindings::testing::JSCWindow; -using cobalt::bindings::testing::NamedConstructorInterface; -using cobalt::bindings::testing::NamedGetterInterface; -using cobalt::bindings::testing::NamedIndexedGetterInterface; -using cobalt::bindings::testing::NestedPutForwardsInterface; -using cobalt::bindings::testing::NoConstructorInterface; -using cobalt::bindings::testing::NoInterfaceObjectInterface; -using cobalt::bindings::testing::NullableTypesTestInterface; -using cobalt::bindings::testing::NumericTypesTestInterface; -using cobalt::bindings::testing::ObjectTypeBindingsInterface; -using cobalt::bindings::testing::OperationsTestInterface; -using cobalt::bindings::testing::PutForwardsInterface; -using cobalt::bindings::testing::SequenceUser; -using cobalt::bindings::testing::SingleOperationInterface; -using cobalt::bindings::testing::StaticPropertiesInterface; -using cobalt::bindings::testing::StringifierAnonymousOperationInterface; -using cobalt::bindings::testing::StringifierAttributeInterface; -using cobalt::bindings::testing::StringifierOperationInterface; -using cobalt::bindings::testing::TargetInterface; -using cobalt::bindings::testing::UnionTypesInterface; -using cobalt::bindings::testing::Window; -using cobalt::script::CallbackInterfaceTraits; -using cobalt::script::GlobalEnvironment; -using cobalt::script::OpaqueHandle; -using cobalt::script::OpaqueHandleHolder; -using cobalt::script::ScriptObject; -using cobalt::script::Wrappable; - -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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::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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -} // namespace - -namespace cobalt { -namespace bindings { -namespace testing { - -namespace { -JSC::JSValue getJSwindowProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -void setJSwindowProperty( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -JSC::JSValue getJSwindow( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -JSC::EncodedJSValue functionJSgetStackTrace(JSC::ExecState*); -JSC::EncodedJSValue functionJSwindowOperation(JSC::ExecState*); - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = false; -const bool s_has_named_setter = false; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = false; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -} // namespace - -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class JSCWindow::InterfaceObject : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - InterfaceObject* this_object = JSC::jsCast<InterfaceObject*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<InterfaceObject>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for JSCWindow"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - InterfaceObject(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCWindow::InterfaceObject::property_table_values[] = { - // static functions will also go here. - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCWindow::InterfaceObject::property_table_values - -// static -const JSC::HashTable -JSCWindow::InterfaceObject::property_table_prototype = { - // Sizes will be calculated based on the number of static functions as well. - 2, // compactSize - 1, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCWindow::InterfaceObject::property_table_prototype - -// static -const JSC::HashTable* -JSCWindow::InterfaceObject::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCWindow::InterfaceObject::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo JSCWindow::InterfaceObject::s_info = { - "WindowConstructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCWindow::InterfaceObject) -}; // JSCWindow::InterfaceObject::s_info - -void JSCWindow::InterfaceObject::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - JSCWindow::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* JSCWindow::InterfaceObject::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); - - // Create the new interface object. - InterfaceObject* new_interface_object = - new (NotNull, JSC::allocateCell<InterfaceObject>(global_data.heap)) - InterfaceObject(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "Window"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of JSCWindow::InterfaceObject class - -// Class that defines a JS Object representing this interface's prototype -class JSCWindow::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue JSCWindow::Prototype::property_table_values[] = { - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>(JSCWindow::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCWindow::Prototype::property_table_values - -// static -const JSC::HashTable JSCWindow::Prototype::property_table_prototype = { - 4, // compactSize - 3, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCWindow::Prototype::property_table_prototype - -// static -const JSC::HashTable* JSCWindow::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCWindow::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo JSCWindow::Prototype::s_info = { - "WindowPrototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCWindow::Prototype) -}; // JSCWindow::Prototype::s_info - -// Look up property slot for querying property values. -bool JSCWindow::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* JSCWindow::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - - JSC::JSObject* parent_prototype = - bindings::testing::JSCGlobalInterfaceParent::GetPrototype(global_object); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of JSCWindow::Prototype class - -const JSC::HashTableValue JSCWindow::property_table_values[] = { - { "windowProperty", - JSC::DontDelete , - reinterpret_cast<intptr_t>(getJSwindowProperty), - reinterpret_cast<intptr_t>(setJSwindowProperty), - JSC::NoIntrinsic - }, - { "window", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJSwindow), - 0, - JSC::NoIntrinsic - }, - { "getStackTrace", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSgetStackTrace), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { "windowOperation", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJSwindowOperation), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // JSCWindow::property_table_values - -// static -const JSC::HashTable JSCWindow::property_table_prototype = { - 19, // compactSize - 15, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // JSCWindow::property_table_prototype - -// static -const JSC::HashTable* JSCWindow::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - JSCWindow::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<JSCWindow::NonTrivialStaticFields> - JSCWindow::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo JSCWindow::s_info = { - "Window", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE(JSCWindow) -}; // JSCWindow::s_info - -// static -JSC::JSObject* JSCWindow::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -// static -JSC::JSObject* JSCWindow::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue JSCWindow::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} - -// static -script::javascriptcore::JSCGlobalObject* JSCWindow::Create( - const scoped_refptr<Window>& global_interface, - script::EnvironmentSettings* environment_settings, - JSC::JSGlobalData* global_data, - ScriptObjectRegistry* script_object_registry) { - scoped_ptr<script::javascriptcore::WrapperFactory> wrapper_factory = - make_scoped_ptr(new script::javascriptcore::WrapperFactory()); - wrapper_factory->RegisterWrappableType( - AnonymousIndexedGetterInterface::AnonymousIndexedGetterInterfaceWrappableType(), - JSCAnonymousIndexedGetterInterface::s_classinfo(), - JSCAnonymousIndexedGetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - AnonymousNamedGetterInterface::AnonymousNamedGetterInterfaceWrappableType(), - JSCAnonymousNamedGetterInterface::s_classinfo(), - JSCAnonymousNamedGetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - AnonymousNamedIndexedGetterInterface::AnonymousNamedIndexedGetterInterfaceWrappableType(), - JSCAnonymousNamedIndexedGetterInterface::s_classinfo(), - JSCAnonymousNamedIndexedGetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ArbitraryInterface::ArbitraryInterfaceWrappableType(), - JSCArbitraryInterface::s_classinfo(), - JSCArbitraryInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - BaseInterface::BaseInterfaceWrappableType(), - JSCBaseInterface::s_classinfo(), - JSCBaseInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - BooleanTypeTestInterface::BooleanTypeTestInterfaceWrappableType(), - JSCBooleanTypeTestInterface::s_classinfo(), - JSCBooleanTypeTestInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - CallbackFunctionInterface::CallbackFunctionInterfaceWrappableType(), - JSCCallbackFunctionInterface::s_classinfo(), - JSCCallbackFunctionInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - CallbackInterfaceInterface::CallbackInterfaceInterfaceWrappableType(), - JSCCallbackInterfaceInterface::s_classinfo(), - JSCCallbackInterfaceInterface::GetCreateWrapperFunction()); -#if defined(ENABLE_CONDITIONAL_INTERFACE) - wrapper_factory->RegisterWrappableType( - ConditionalInterface::ConditionalInterfaceWrappableType(), - JSCConditionalInterface::s_classinfo(), - JSCConditionalInterface::GetCreateWrapperFunction()); -#endif // defined(ENABLE_CONDITIONAL_INTERFACE) - wrapper_factory->RegisterWrappableType( - ConstantsInterface::ConstantsInterfaceWrappableType(), - JSCConstantsInterface::s_classinfo(), - JSCConstantsInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ConstructorInterface::ConstructorInterfaceWrappableType(), - JSCConstructorInterface::s_classinfo(), - JSCConstructorInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ConstructorWithArgumentsInterface::ConstructorWithArgumentsInterfaceWrappableType(), - JSCConstructorWithArgumentsInterface::s_classinfo(), - JSCConstructorWithArgumentsInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - DOMStringTestInterface::DOMStringTestInterfaceWrappableType(), - JSCDOMStringTestInterface::s_classinfo(), - JSCDOMStringTestInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - DerivedGetterSetterInterface::DerivedGetterSetterInterfaceWrappableType(), - JSCDerivedGetterSetterInterface::s_classinfo(), - JSCDerivedGetterSetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - DerivedInterface::DerivedInterfaceWrappableType(), - JSCDerivedInterface::s_classinfo(), - JSCDerivedInterface::GetCreateWrapperFunction()); -#if defined(NO_ENABLE_CONDITIONAL_INTERFACE) - wrapper_factory->RegisterWrappableType( - DisabledInterface::DisabledInterfaceWrappableType(), - JSCDisabledInterface::s_classinfo(), - JSCDisabledInterface::GetCreateWrapperFunction()); -#endif // defined(NO_ENABLE_CONDITIONAL_INTERFACE) - wrapper_factory->RegisterWrappableType( - EnumerationInterface::EnumerationInterfaceWrappableType(), - JSCEnumerationInterface::s_classinfo(), - JSCEnumerationInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ExceptionObjectInterface::ExceptionObjectInterfaceWrappableType(), - JSCExceptionObjectInterface::s_classinfo(), - JSCExceptionObjectInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ExceptionsInterface::ExceptionsInterfaceWrappableType(), - JSCExceptionsInterface::s_classinfo(), - JSCExceptionsInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ExtendedIDLAttributesInterface::ExtendedIDLAttributesInterfaceWrappableType(), - JSCExtendedIDLAttributesInterface::s_classinfo(), - JSCExtendedIDLAttributesInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - GarbageCollectionTestInterface::GarbageCollectionTestInterfaceWrappableType(), - JSCGarbageCollectionTestInterface::s_classinfo(), - JSCGarbageCollectionTestInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - GetOpaqueRootInterface::GetOpaqueRootInterfaceWrappableType(), - JSCGetOpaqueRootInterface::s_classinfo(), - JSCGetOpaqueRootInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - GlobalInterfaceParent::GlobalInterfaceParentWrappableType(), - JSCGlobalInterfaceParent::s_classinfo(), - JSCGlobalInterfaceParent::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ImplementedInterface::ImplementedInterfaceWrappableType(), - JSCImplementedInterface::s_classinfo(), - JSCImplementedInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - IndexedGetterInterface::IndexedGetterInterfaceWrappableType(), - JSCIndexedGetterInterface::s_classinfo(), - JSCIndexedGetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - InterfaceWithUnsupportedProperties::InterfaceWithUnsupportedPropertiesWrappableType(), - JSCInterfaceWithUnsupportedProperties::s_classinfo(), - JSCInterfaceWithUnsupportedProperties::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NamedConstructorInterface::NamedConstructorInterfaceWrappableType(), - JSCNamedConstructorInterface::s_classinfo(), - JSCNamedConstructorInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NamedGetterInterface::NamedGetterInterfaceWrappableType(), - JSCNamedGetterInterface::s_classinfo(), - JSCNamedGetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NamedIndexedGetterInterface::NamedIndexedGetterInterfaceWrappableType(), - JSCNamedIndexedGetterInterface::s_classinfo(), - JSCNamedIndexedGetterInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NestedPutForwardsInterface::NestedPutForwardsInterfaceWrappableType(), - JSCNestedPutForwardsInterface::s_classinfo(), - JSCNestedPutForwardsInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NoConstructorInterface::NoConstructorInterfaceWrappableType(), - JSCNoConstructorInterface::s_classinfo(), - JSCNoConstructorInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NoInterfaceObjectInterface::NoInterfaceObjectInterfaceWrappableType(), - JSCNoInterfaceObjectInterface::s_classinfo(), - JSCNoInterfaceObjectInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NullableTypesTestInterface::NullableTypesTestInterfaceWrappableType(), - JSCNullableTypesTestInterface::s_classinfo(), - JSCNullableTypesTestInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - NumericTypesTestInterface::NumericTypesTestInterfaceWrappableType(), - JSCNumericTypesTestInterface::s_classinfo(), - JSCNumericTypesTestInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - ObjectTypeBindingsInterface::ObjectTypeBindingsInterfaceWrappableType(), - JSCObjectTypeBindingsInterface::s_classinfo(), - JSCObjectTypeBindingsInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - OperationsTestInterface::OperationsTestInterfaceWrappableType(), - JSCOperationsTestInterface::s_classinfo(), - JSCOperationsTestInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - PutForwardsInterface::PutForwardsInterfaceWrappableType(), - JSCPutForwardsInterface::s_classinfo(), - JSCPutForwardsInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - SequenceUser::SequenceUserWrappableType(), - JSCSequenceUser::s_classinfo(), - JSCSequenceUser::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - StaticPropertiesInterface::StaticPropertiesInterfaceWrappableType(), - JSCStaticPropertiesInterface::s_classinfo(), - JSCStaticPropertiesInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - StringifierAnonymousOperationInterface::StringifierAnonymousOperationInterfaceWrappableType(), - JSCStringifierAnonymousOperationInterface::s_classinfo(), - JSCStringifierAnonymousOperationInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - StringifierAttributeInterface::StringifierAttributeInterfaceWrappableType(), - JSCStringifierAttributeInterface::s_classinfo(), - JSCStringifierAttributeInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - StringifierOperationInterface::StringifierOperationInterfaceWrappableType(), - JSCStringifierOperationInterface::s_classinfo(), - JSCStringifierOperationInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - TargetInterface::TargetInterfaceWrappableType(), - JSCTargetInterface::s_classinfo(), - JSCTargetInterface::GetCreateWrapperFunction()); - wrapper_factory->RegisterWrappableType( - UnionTypesInterface::UnionTypesInterfaceWrappableType(), - JSCUnionTypesInterface::s_classinfo(), - JSCUnionTypesInterface::GetCreateWrapperFunction()); - - JSC::JSLockHolder lock(global_data); - JSC::Structure* structure = JSC::Structure::create( - *global_data, - NULL, // JSC::JSGlobalObject* - JSC::jsNull(), // prototype - JSC::TypeInfo(JSC::GlobalObjectType, StructureFlags), - &s_info); - JSCWindow* global_wrapper = - new (NotNull, JSC::allocateCell<JSCWindow>(global_data->heap)) - JSCWindow( - global_data, - structure, - script_object_registry, - wrapper_factory.Pass(), - environment_settings, - global_interface); - global_wrapper->finishCreation(*global_data); - global_data->heap.addFinalizer(global_wrapper, JSCWindow::destroy); - global_wrapper->setPrototype( - global_wrapper->globalData(), - JSCWindow::GetPrototype(global_wrapper)); - - return global_wrapper; -} -JSCWindow::JSCWindow( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - scoped_ptr<script::javascriptcore::WrapperFactory> wrapper_factory, - script::EnvironmentSettings* environment_settings, - const scoped_refptr<Window>& impl) - : BaseClass(global_data, structure, script_object_registry, impl, - wrapper_factory.Pass(), environment_settings) { -} - -void JSCWindow::finishCreation(JSC::JSGlobalData& global_data) { - BaseClass::finishCreation(global_data); - DCHECK(inherits(&s_info)); -} - -JSCWindow::~JSCWindow() { - // Empty destructor -} - -// Look up property slot for querying property values. -bool JSCWindow::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - JSCWindow* this_object = JSC::jsCast<JSCWindow*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - // Global interface may have both operations and properties as own properties - // so we cannot use getStaticValueSlot. - bool found_property_slot = JSC::getStaticPropertySlot<JSCWindow, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} - -// Look up property slot and put the |value|. -void JSCWindow::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - JSCWindow* this_object = JSC::jsCast<JSCWindow*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } - } - - if (!property_handled) { - JSC::lookupPut<JSCWindow, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} - -bool JSCWindow::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - JSCWindow* this_object = JSC::jsCast<JSCWindow*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<JSCWindow, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { - -JSC::JSValue getJSwindowProperty( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCWindow", "get windowProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - Window* impl = - GetWrappableOrSetException<Window>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->window_property()); - return result; -} - -void setJSwindowProperty( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("JSCWindow", "set windowProperty"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - Window* impl = - GetWrappableOrSetException<Window>(exec_state, this_object); - if (!impl) { - return; - } - TypeTraits<std::string >::ConversionType cobalt_value; - FromJSValue(exec_state, value, - kNoConversionFlags, &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_window_property(cobalt_value); - } -} - -JSC::JSValue getJSwindow( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("JSCWindow", "get window"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - Window* impl = - GetWrappableOrSetException<Window>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - - JSC::JSValue result = ToJSValue( - global_object, - impl->window()); - return result; -} - -JSC::EncodedJSValue functionJSgetStackTrace( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCWindow", "call getStackTrace"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - Window* impl = - GetWrappableOrSetException<Window>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - TypeTraits<std::string >::ReturnType return_value = impl->GetStackTrace(global_object->GetStackTrace()); - return JSC::JSValue::encode(ToJSValue(global_object, return_value)); - -} - -JSC::EncodedJSValue functionJSwindowOperation( - JSC::ExecState* exec_state) { - TRACE_EVENT0("JSCWindow", "call windowOperation"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - Window* impl = - GetWrappableOrSetException<Window>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - - impl->WindowOperation(); - return JSC::JSValue::encode(JSC::jsUndefined()); - -} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - return false; -} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace - -} // namespace testing -} // namespace bindings - -namespace script { - -template<> -void GlobalEnvironment::CreateGlobalObject<Window>( - const scoped_refptr<Window>& global_interface, - EnvironmentSettings* environment_settings) { - 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_environment->SetGlobalObject(global_object); -} - -// MSVS compiler does not need this explicit instantiation, and generates a -// compiler error. -#if !defined(_MSC_VER) -// Explicitly instantiate the template function for template type Window -// This is needed to prevent link errors when trying to resolve the template -// instantiation. -template -void GlobalEnvironment::CreateGlobalObject<Window>( - const scoped_refptr<Window>& global_interface, - EnvironmentSettings* environment_settings); -#endif - -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCWindow.h b/src/cobalt/bindings/generated/jsc/testing/JSCWindow.h deleted file mode 100644 index 337e702..0000000 --- a/src/cobalt/bindings/generated/jsc/testing/JSCWindow.h +++ /dev/null
@@ -1,128 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY! -// Auto-generated from template: bindings/javascriptcore/templates/interface.h.template - -// clang-format off - -#ifndef JSCWindow_h -#define JSCWindow_h - -#include "base/hash_tables.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "JSCGlobalInterfaceParent.h" -#include "cobalt/bindings/testing/window.h" - -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace bindings { -namespace testing { - -class JSCWindow - : public script::javascriptcore::JSCGlobalObject { - typedef script::javascriptcore::JSCGlobalObject BaseClass; - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); - - static script::javascriptcore::JSCGlobalObject* Create( - const scoped_refptr<Window>& global_interface, - script::EnvironmentSettings* environment_settings, - JSC::JSGlobalData* global_data, - script::javascriptcore::ScriptObjectRegistry* script_object_registry); - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - JSCWindow( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, - scoped_ptr<script::javascriptcore::WrapperFactory> wrapper_factory, - script::EnvironmentSettings* environment_settings, - const scoped_refptr<Window>& impl); - ~JSCWindow(); - - private: - class InterfaceObject; - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; - -} // namespace bindings -} // namespace testing -} // namespace cobalt - -#endif // JSCWindow_h
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc index 1431c98..99f4334 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc index a8d43f5..d0582d8 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc index 3c2595d..b0c6695 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc index 44c9b63..4f4784df 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc index cdc9be8..132b075 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc index 9a99f9a..e410fed 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc index 3be6905..1a096d0 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/arbitrary_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc index 10ac0df..f48c900 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/single_operation_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc index 9cdd93d..6212ba4 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -61,24 +61,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc index bcdf5b9..03c4196 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc index 8f70977..1bc6ac8 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc index 133af7b..f0e18bd 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc index 9f8c0df..b3bd4dd 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc index bd6275e..4675e1d 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc index 91b1f0a..208da07 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc index ee423a0..0375829 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -61,24 +61,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc index 8a1d44d..69d01c4 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; // Declare and define these in the same namespace that the other overloads // were brought into with the using declaration. void ToJSValue(
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc index bd69c56..225b3e4 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -60,24 +60,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc index 57c7eb2..99d0bd4 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc index e3fc612..637bd2d 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc index 898f998..af6ac31 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/garbage_collection_test_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc index 0c5b553..000b086 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc index 7c3b03f..008fe1d 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc index 84c8d65..9c30841 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc index abefc97..e6eb894 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc index 24c5476..89c25ee 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc index 600a69b..39327ca 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc index 4bac6ac..d94c42e 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc index 0cd1892..cc2a0d3 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/put_forwards_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc index 2c2c72a..fda94fd 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc index 7fcd823..5dc3462 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc index 7744590..c84d0da 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/arbitrary_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc index 127a4f1..c69246b 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc index fd32f75..eee7181 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc
@@ -34,11 +34,11 @@ #include "cobalt/bindings/testing/derived_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -71,24 +71,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc index 884fca6..97906a1 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/arbitrary_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc index 93471b0..85d028c 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/arbitrary_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsSequenceUser.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsSequenceUser.cc index 164ed3c..3612c6c 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsSequenceUser.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsSequenceUser.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc index 9c2fe11..083be93 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc
@@ -30,11 +30,11 @@ #include "cobalt/bindings/testing/arbitrary_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -63,24 +63,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc index bb8be7c..2f8dbd5 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc index 2313691..591fce5 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc index 0eae6b1..aa4ccda 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc index c680c08..afd7fcf 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc
@@ -28,11 +28,11 @@ #include "cobalt/script/script_object.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -59,24 +59,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc index 709d054..2c61789 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc
@@ -32,11 +32,11 @@ #include "cobalt/bindings/testing/base_interface.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -67,24 +67,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; } // namespace namespace cobalt {
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc index 69c6ccb..acb3053 100644 --- a/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc +++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc
@@ -120,11 +120,11 @@ #include "cobalt/bindings/testing/window.h" #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -251,24 +251,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; JSObject* DummyFunctor( JSContext* context, const scoped_refptr<Wrappable>& wrappable) { NOTREACHED(); @@ -788,6 +788,7 @@ MozjsWindow::CreateProxy( context, global_interface); mozjs_global_environment->SetEnvironmentSettings(environment_settings); + mozjs_global_environment->EvaluateAutomatics(); WrapperFactory* wrapper_factory = mozjs_global_environment->wrapper_factory();
diff --git a/src/cobalt/bindings/javascriptcore/__init__.py b/src/cobalt/bindings/javascriptcore/__init__.py deleted file mode 100644 index ef65bee..0000000 --- a/src/cobalt/bindings/javascriptcore/__init__.py +++ /dev/null
@@ -1 +0,0 @@ -# Required for Python to search this directory for module files
diff --git a/src/cobalt/bindings/javascriptcore/code_generator.py b/src/cobalt/bindings/javascriptcore/code_generator.py deleted file mode 100644 index 89f3e71..0000000 --- a/src/cobalt/bindings/javascriptcore/code_generator.py +++ /dev/null
@@ -1,103 +0,0 @@ -# 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. -"""JSC-specific implementation of CodeGeneratorCobalt. - -Defines CodeGeneratorJsc and ExpressionGeneratorJsc classes. -""" - -import os -import sys - -# Add the bindings directory to the path. -module_path, module_filename = os.path.split(os.path.realpath(__file__)) -cobalt_bindings_dir = os.path.normpath(os.path.join(module_path, os.pardir)) -sys.path.append(cobalt_bindings_dir) - -from code_generator_cobalt import CodeGeneratorCobalt # pylint: disable=g-import-not-at-top -from expression_generator import ExpressionGenerator - -TEMPLATES_DIR = os.path.normpath(os.path.join(module_path, 'templates')) - - -def calculate_jsc_lookup_size(num_properties): - """Calculate the number of entries to allocate in JSC::Lookup hash table.""" - # JSC::Lookup uses an array internally to represent hash entries. - # The first |size_mask + 1| entries are hash buckets, and the remaining - # entries starting from entries[size_mask+1] are used for hash collisions. - # In the worst case where all keys collide, we will need - # (size_mask +1) + (num_properties - 1) entries, to account for properties[0] - # getting assigned to a hash bucket, and the remaining N-1 properties getting - # assigned to overflow entries. - # TODO: WebKit's bindings generation script calculates the actual - # required number of entries by duplicating the JSC::Lookup logic in the - # script and determining the number of collisions. If we want to reduce the - # number of entries allocated we can do something similar. - size_mask = calculate_jsc_lookup_size_mask(num_properties) - return (size_mask + 1) + max(0, (num_properties - 1)) - - -def calculate_jsc_lookup_size_mask(num_properties): - """Calculate the number of hash buckets to use in JSC::Lookup hash table.""" - # 2 * num_properties is the heuristic used in WebKit's JSC bindings generation - # script to determine the number of hash buckets for the property hash table - num_hash_buckets = max(1, 2 * num_properties) - # JSC::Lookup hash table implementation uses a bitmask of the Identifier's - # hash to determine which bucket a Property goes into. This also rounds the - # number of buckets up to the closest power of 2. - return pow(2, num_hash_buckets.bit_length()) - 1 - - -class ExpressionGeneratorJsc(ExpressionGenerator): - """Implementation of ExpressionGenerator for JavaScriptCore.""" - - def is_undefined(self, arg): - return '%s.isUndefined()' % arg - - def is_undefined_or_null(self, arg): - return '%s.isUndefinedOrNull()' % arg - - def inherits_interface(self, interface_name, arg): - return '%s.inherits(JSC%s::s_classinfo())' % (arg, interface_name) - - def is_number(self, arg): - return '%s.isNumber()' % arg - - -class CodeGeneratorJsc(CodeGeneratorCobalt): - """Code generator class for JavaScriptCore bindings.""" - - _expression_generator = ExpressionGeneratorJsc() - - def __init__(self, interfaces_info, cache_dir, output_dir): - CodeGeneratorCobalt.__init__(self, interfaces_info, TEMPLATES_DIR, - cache_dir, output_dir) - - @property - def generated_file_prefix(self): - return 'JSC' - - @property - def expression_generator(self): - return CodeGeneratorJsc._expression_generator - - def build_interface_context(self, interface, interface_info, definitions): - """Overrides CodeGeneratorCobalt.build_interface_context.""" - context = super(CodeGeneratorJsc, self).build_interface_context( - interface, interface_info, definitions) - jsc_lookup_info = { - 'calculate_jsc_lookup_size': calculate_jsc_lookup_size, - 'calculate_jsc_lookup_size_mask': calculate_jsc_lookup_size_mask, - } - context.update(jsc_lookup_info) - return context
diff --git a/src/cobalt/bindings/javascriptcore/idl_compiler.py b/src/cobalt/bindings/javascriptcore/idl_compiler.py deleted file mode 100644 index 9277e29..0000000 --- a/src/cobalt/bindings/javascriptcore/idl_compiler.py +++ /dev/null
@@ -1,31 +0,0 @@ -# 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. -"""Compile an .idl file to Cobalt JSC bindings (.h and .cpp files). - -Calls into idl_compiler_cobalt.shared_main specifying the JavaScriptCore -CodeGenerator class. -""" - -import os -import sys - -module_path, module_filename = os.path.split(os.path.realpath(__file__)) -bindings_dir = os.path.normpath(os.path.join(module_path, os.pardir)) -sys.path.append(bindings_dir) - -from idl_compiler_cobalt import generate_bindings # pylint: disable=g-import-not-at-top -from javascriptcore.code_generator import CodeGeneratorJsc - -if __name__ == '__main__': - sys.exit(generate_bindings(CodeGeneratorJsc))
diff --git a/src/cobalt/bindings/javascriptcore/templates/callback-interface.cc.template b/src/cobalt/bindings/javascriptcore/templates/callback-interface.cc.template deleted file mode 100644 index 6768199..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/callback-interface.cc.template +++ /dev/null
@@ -1,118 +0,0 @@ -{# - # 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. - #} -{% extends "callback-interface-base.cc.template" %} -{% block includes %} -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -{{ super() }} -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h" -#include "cobalt/script/javascriptcore/jsc_exception_state.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -{% endblock includes %} - -{% block using_directives %} -{{ super() }} -using cobalt::script::javascriptcore::GetCallableForCallbackInterface; -using cobalt::script::javascriptcore::JSCGlobalObject; -using cobalt::script::javascriptcore::JSCExceptionState; -using cobalt::script::javascriptcore::ToJSValue; -using cobalt::script::javascriptcore::util::GetExceptionString; -{% endblock using_directives %} - -{% block implementation %} -namespace cobalt { -{% for component in components %} -namespace {{component}} { -{% endfor %} - -{{binding_class}}::{{binding_class}}( - JSC::JSObject* implementing_object) - : implementing_object_(implementing_object) { } - -{% for operation in operations %} -{% for overload in operation.overloads %} -{{overload.type}} {{binding_class}}::{{overload.name}}( - const scoped_refptr<script::Wrappable>& callback_this, - {% for arg in overload.arguments %} - {{arg.arg_type}} {{arg.name}}, - {% endfor %} - bool* had_exception) const { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(implementing_object_->globalObject()); - JSC::JSGlobalData* global_data = &global_object->globalData(); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSLockHolder lock(*global_data); - - // get callable object - JSC::JSValue callable; - JSC::CallData call_data; - JSC::CallType call_type = GetCallableForCallbackInterface(exec_state, - implementing_object_, "{{overload.idl_name}}", &callable, &call_data); - if (call_type == JSC::CallTypeNone) { - // TypeError - DLOG(INFO) << "User object was not callable."; - *had_exception = true; -{% if overload.type == 'void' %} - return; -{% else %} - return {{overload.type}}(); -{% endif %} - } - - JSC::JSValue js_this = ToJSValue(global_object, callback_this); - - // Convert args. - JSC::MarkedArgumentBuffer args; - {% for arg in overload.arguments %} - args.append(ToJSValue(global_object, {{arg.name}})); - {% endfor %} - - // call - JSC::DynamicGlobalObjectScope global_object_scope(*global_data, global_object); - JSC::JSValue js_return_value = - JSC::call(exec_state, callable, call_type, call_data, js_this, args); - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << GetExceptionString(exec_state); - exec_state->clearException(); - *had_exception = true; -{% if overload.type == 'void' %} - return; -{% else %} - return {{overload.type}}(); -{% endif %} - } -{% if overload.type != 'void' %} - JSCExceptionState exception_state(global_object); - {{overload.type}} cobalt_return_value; - FromJSValue(exec_state, js_return_value, 0, &exception_state, &cobalt_return_value); - - *had_exception = exception_state.is_exception_set(); - return cobalt_return_value; -{% else %} - *had_exception = false; -{% endif %} -} -{% endfor %} -{% endfor %} - -{% for component in components %} -} // namespace {{component}} -{% endfor %} -} // namespace cobalt -{% endblock implementation %}
diff --git a/src/cobalt/bindings/javascriptcore/templates/callback-interface.h.template b/src/cobalt/bindings/javascriptcore/templates/callback-interface.h.template deleted file mode 100644 index 3a399c6..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/callback-interface.h.template +++ /dev/null
@@ -1,65 +0,0 @@ -{# - # 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. - #} -{% extends "callback-interface-base.h.template" %} - -{% block includes %} -#include "cobalt/script/wrappable.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -{% for include in header_includes %} -#include "{{include}}" -{% endfor %} -{% endblock includes %} - -{% block implementation %} -namespace cobalt { -{% for component in components %} -namespace {{component}} { -{% endfor %} - -class {{binding_class}} : public {{impl_class}} { - public: - {{binding_class}}(JSC::JSObject* implementing_object); -{% for operation in operations %} -{% for overload in operation.overloads %} - {{overload.type}} {{overload.name}}( - const scoped_refptr<script::Wrappable>& callback_this, - {% for arg in overload.arguments %} - {{arg.arg_type}} {{arg.name}}, - {% endfor %} - bool* had_exception) const OVERRIDE; -{% endfor %} -{% endfor %} - JSC::JSObject* implementing_object() const { return implementing_object_; } - - private: - JSC::JSObject* implementing_object_; -}; - -{% for component in components %} -} // namespace {{component}} -{% endfor %} -namespace script { -// Explicit instantiation of CallbackInterfaceTraits struct so we can infer -// the type of the generated class from the type of the callback interface. -template<> -struct CallbackInterfaceTraits<{{fully_qualified_impl_class}}> { - typedef {{fully_qualified_binding_class}} JSCCallbackInterfaceClass; -}; - -} // namespace script -} // namespace cobalt -{% endblock implementation %}
diff --git a/src/cobalt/bindings/javascriptcore/templates/interface-object.template b/src/cobalt/bindings/javascriptcore/templates/interface-object.template deleted file mode 100644 index 325ea41..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/interface-object.template +++ /dev/null
@@ -1,233 +0,0 @@ -{# - # 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. - #} - -{% macro create_interface_object(interface_object_class_name, interface_object_name) -%} -// Class that defines a JS Object representing this interface's Interface Object -// https://www.w3.org/TR/WebIDL/#interface-object -class {{binding_class}}::{{interface_object_class_name}} : public ConstructorBase { - public: - // Get the Interface Object. Will create a new Interface Object if necessary, - // otherwise it will return the cached one. - static JSC::JSObject* GetInstance(JSC::ExecState* exec); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - {{interface_object_class_name}}* this_object = JSC::jsCast<{{interface_object_class_name}}*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - - // Same process as JSC::getStaticPropertySlot<>, which is defined in Lookup.h - // Since JSFunction::getOwnPropertySlot is protected, we can't call it from - // the helper function. - const JSC::HashEntry* entry = - GetPropertyTable(exec)->entry(exec, property_name); - - if (!entry) // not found, forward to parent - return Base::getOwnPropertySlot(this_object, exec, property_name, slot); - - if (entry->attributes() & JSC::Function) - return setUpStaticFunctionSlot(exec, entry, this_object, property_name, slot); - - slot.setCacheableCustom(this_object, entry->propertyGetter()); - return true; - } - - // static override. Needed to support setting a property. - static void put(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - {{interface_object_class_name}}* this_object = JSC::jsCast<{{interface_object_class_name}}*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool found_property = JSC::lookupPut<{{interface_object_class_name}}>( - exec_state, property_name, value, GetPropertyTable(exec_state), - this_object, slot.isStrictMode()); - DLOG_IF(INFO, !found_property) << "Did not find property named " << - WTF::String(property_name.publicName()).utf8().data() << - " to set on interface object for {{binding_class}}"; - if (!found_property) { - BaseClass::put(cell, exec_state, property_name, value, slot); - } - } - - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - -{% if not constructor %} - // static override. This prevents this object from being called as a - // constructor, throwing a TypeError if the user attempts to do so. - // - // This method is defined when no constructors are defined on the IDL. - static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&) { - return JSC::ConstructTypeNone; - } -{% endif %} - - private: - typedef ConstructorBase BaseClass; - - static const unsigned StructureFlags = - JSC::ImplementsHasInstance | - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - {{interface_object_class_name}}(JSC::ExecState* exec_state, JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(exec_state, global_object, structure) { } - void finishCreation(JSC::ExecState* exec_state, - JSC::NativeExecutable* native_executable, int length, - const String& name); - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue {{binding_class}}::{{interface_object_class_name}}::property_table_values[] = { - // static functions will also go here. -{% for attribute in static_attributes %} -{% if attribute.conditional %} -#if defined({{attribute.conditional}}) -{% endif %} - { "{{attribute.idl_name}}", - JSC::DontDelete {{'| JSC::ReadOnly' if attribute.is_read_only}}, - reinterpret_cast<intptr_t>(getJS{{attribute.idl_name}}), - {% if attribute.is_read_only %} - 0, - {% else %} - reinterpret_cast<intptr_t>(setJS{{attribute.idl_name}}), - {% endif %} - JSC::NoIntrinsic - }, -{% if attribute.conditional %} -#endif // defined({{attribute.conditional}}) -{% endif %} -{% endfor %} -{% for operation in static_operations %} -{% if operation.conditional %} -#if defined({{operation.conditional}}) -{% endif %} - { "{{operation.idl_name}}", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(staticFunctionJS{{operation.idl_name}}), - static_cast<intptr_t>({{operation.length}}), - JSC::NoIntrinsic - }, -{% if operation.conditional %} -#endif // defined({{operation.conditional}}) -{% endif %} -{% endfor %} -{% for constant in constants %} - { "{{constant.idl_name}}", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJS{{constant.idl_name}}), - 0, - JSC::NoIntrinsic - }, -{% endfor %} - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // {{binding_class}}::{{interface_object_class_name}}::property_table_values - -// static -const JSC::HashTable -{{binding_class}}::{{interface_object_class_name}}::property_table_prototype = { -{% set num_properties = constants|length + static_attributes|length + static_operations|length %} - // Sizes will be calculated based on the number of static functions as well. - {{ calculate_jsc_lookup_size(num_properties) }}, // compactSize - {{ calculate_jsc_lookup_size_mask(num_properties) }}, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // {{binding_class}}::{{interface_object_class_name}}::property_table_prototype - -// static -const JSC::HashTable* -{{binding_class}}::{{interface_object_class_name}}::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - {{binding_class}}::{{interface_object_class_name}}::s_classinfo(), - property_table_prototype); -} - -const JSC::ClassInfo {{binding_class}}::{{interface_object_class_name}}::s_info = { - "{{interface_name}}Constructor", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE({{binding_class}}::{{interface_object_class_name}}) -}; // {{binding_class}}::{{interface_object_class_name}}::s_info - -void {{binding_class}}::{{interface_object_class_name}}::finishCreation( - JSC::ExecState* exec_state, JSC::NativeExecutable* native_executable, - int length, const String& name) { - BaseClass::finishCreation(exec_state, native_executable, length, name); - ASSERT(inherits(&s_info)); - // Add a 'prototype' property whose value is the prototype object. - putDirect(exec_state->globalData(), - exec_state->propertyNames().prototype, - {{binding_class}}::GetPrototype(exec_state->lexicalGlobalObject()), - JSC::DontDelete | JSC::ReadOnly | JSC::DontEnum); - DCHECK(hasOwnProperty(exec_state, JSC::Identifier(exec_state, "prototype"))); -} - -// static -JSC::JSObject* {{binding_class}}::{{interface_object_class_name}}::GetInstance( - JSC::ExecState* exec_state) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached interface object, and create a new one if needed. - JSC::JSObject* interface_object = global_object->object_cache()->GetCachedConstructor(&s_info); - if (interface_object == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSObject* parent_prototype = global_object->functionPrototype(); - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - -{% if constructor %} - const int kNumArguments = {{constructor.length}}; - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, &constructorJS{{impl_class}}); -{% else %} - const int kNumArguments = 0; - // NativeExecutable must be non-null even if this is not actually callable. - JSC::NativeExecutable* executable = global_data.getHostFunction(NULL, NULL); -{% endif %} - - // Create the new interface object. - {{interface_object_class_name}}* new_interface_object = - new (NotNull, JSC::allocateCell<{{interface_object_class_name}}>(global_data.heap)) - {{interface_object_class_name}}(exec_state, global_object, structure); - new_interface_object->finishCreation(exec_state, executable, kNumArguments, "{{interface_object_name}}"); - // Add the interface object to the cache. - global_object->object_cache()->CacheConstructor(&s_info, new_interface_object); - interface_object = new_interface_object; - } - DCHECK_EQ(global_object->object_cache()->GetCachedConstructor(&s_info), interface_object); - return interface_object; -} - -// End of {{binding_class}}::{{interface_object_class_name}} class -{% endmacro %}
diff --git a/src/cobalt/bindings/javascriptcore/templates/interface.cc.template b/src/cobalt/bindings/javascriptcore/templates/interface.cc.template deleted file mode 100644 index 4958230..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/interface.cc.template +++ /dev/null
@@ -1,1126 +0,0 @@ -{# - # Copyright 2015 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. - #} -{% extends "interface-base.cc.template" %} -{% block includes %} -#include "third_party/WebKit/Source/JavaScriptCore/config.h" - -{{ super() }} -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#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_object_handle.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -{% if named_property_getter %} -#include "cobalt/script/javascriptcore/jsc_property_enumerator.h" -{% endif %} -#include "cobalt/script/javascriptcore/type_traits.h" -#include "cobalt/script/javascriptcore/util/binding_helpers.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -{% if is_exception_interface %} -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ErrorPrototype.h" -{% endif %} -#include "third_party/WebKit/Source/JavaScriptCore/runtime/FunctionPrototype.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ObjectPrototype.h" -{% endblock includes %} -{% block using_directives %} -{{ super() }} -using cobalt::script::javascriptcore::kConversionFlagNullable; -using cobalt::script::javascriptcore::kConversionFlagRestricted; -using cobalt::script::javascriptcore::kConversionFlagTreatNullAsEmptyString; -using cobalt::script::javascriptcore::kConversionFlagTreatUndefinedAsEmptyString; -using cobalt::script::javascriptcore::kNoConversionFlags; -using cobalt::script::javascriptcore::ConstructorBase; -using cobalt::script::javascriptcore::GetWrappableOrSetException; -using cobalt::script::javascriptcore::FromJSValue; -using cobalt::script::javascriptcore::FromWTFString; -using cobalt::script::javascriptcore::JSCCallbackFunction; -using cobalt::script::javascriptcore::JSCCallbackFunctionHolder; -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; -{% 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::WrapperBase; -using cobalt::script::javascriptcore::util::HasPropertyOnPrototype; -using cobalt::script::javascriptcore::util::GetStackTrace; -{% endblock using_directives %} -{% block enumeration_declarations %} -{% if enumerations|length %} -// Declare and define these in the same namespace that the other overloads -// were brought into with the using declaration. -{% for enumeration in enumerations %} -JSC::JSValue ToJSValue(JSCGlobalObject*, {{impl_class}}::{{enumeration.name}} in_enum); -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, JSCExceptionState* exception_state, - {{impl_class}}::{{enumeration.name}}* out_enum); -{% endfor %} -{% endif %} -{% endblock enumeration_declarations %} - -{% from 'macros.cc.template' import add_extra_arguments %} -{% from 'macros.cc.template' import call_function %} -{% from 'macros.cc.template' import constructor_implementation with context %} -{% from 'macros.cc.template' import function_implementation with context %} -{% from 'macros.cc.template' import overload_resolution_implementation with context %} -{% from 'macros.cc.template' import set_attribute_implementation with context %} -{% from 'interface-object.template' import create_interface_object with context %} - -{% block implementation %} -namespace { -{% for constant in constants %} -JSC::JSValue getJS{{constant.idl_name}}( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -{% endfor %} -{% for attribute in attributes + static_attributes %} -{% if attribute.conditional %} -#if defined({{attribute.conditional}}) -{% endif %} -JSC::JSValue getJS{{attribute.idl_name}}( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -{% if attribute.has_setter %} -void setJS{{attribute.idl_name}}( - JSC::ExecState* exec, - JSC::JSObject* this_object, - JSC::JSValue value); -{% endif %} -{% if attribute.conditional %} -#endif // defined({{attribute.conditional}}) -{% endif %} -{% endfor %} -{% if constructor %} -JSC::EncodedJSValue constructorJS{{impl_class}}(JSC::ExecState*); -{% for overload in constructor.overloads if constructor.overloads|length > 1 %} -JSC::EncodedJSValue constructorJS{{impl_class}}{{overload.overload_index}}(JSC::ExecState*); -{% endfor %} -{% endif %} -{% for operation in operations + static_operations %} -{% if operation.conditional %} -#if defined({{operation.conditional}}) -{% endif %} -{% set boundFunctionPrefix = "staticFunctionJS" if operation.is_static else "functionJS" %} -JSC::EncodedJSValue {{boundFunctionPrefix}}{{operation.idl_name}}(JSC::ExecState*); -{% for overload in operation.overloads if operation.overloads|length > 1 %} -JSC::EncodedJSValue {{boundFunctionPrefix}}{{overload.idl_name}}{{overload.overload_index}}(JSC::ExecState*); -{% endfor %} -{% if operation.conditional %} -#endif // defined({{operation.conditional}}) -{% endif %} -{% endfor %} -{% if indexed_property_getter %} -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index); -{% endif %} -{% if indexed_property_setter %} -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value); -{% endif %} -{% if stringifier %} -JSC::EncodedJSValue StringifierJS(JSC::ExecState*); -{% endif %} - -// These are declared unconditionally, but only defined if needed by the -// interface. -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value); -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name); -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name); -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value); - -const bool s_has_named_getter = {{'true' if named_property_getter else 'false'}}; -const bool s_has_named_setter = {{'true' if named_property_setter else 'false'}}; -#if !defined(COBALT_BUILD_TYPE_GOLD) -const bool s_use_debug_missing_property_handler = {{'true' if not parent_interface else 'false'}}; -#else -const bool s_use_debug_missing_property_handler = false; -#endif -{% if get_opaque_root %} -scoped_refptr<Wrappable> GetOpaqueRootFromWrappable( - const scoped_refptr<Wrappable>& wrappable) { - {{impl_class}}* impl = - base::polymorphic_downcast<{{impl_class}}*>(wrappable.get()); - Wrappable* opaque_root = impl->{{get_opaque_root}}(); - return make_scoped_refptr<Wrappable>(opaque_root); -} -{% endif %} -} // namespace - -{% if has_interface_object %} -{{create_interface_object("InterfaceObject", impl_class)}} -{% endif %} -{% if named_constructor %} -{{create_interface_object("NamedInterfaceObject", named_constructor)}} -{% endif %} -{% include "prototype-object.template" %} - -const JSC::HashTableValue {{binding_class}}::property_table_values[] = { -{% for attribute in attributes %} -{% if attribute.conditional %} -#if defined({{attribute.conditional}}) -{% endif %} - { "{{attribute.idl_name}}", - JSC::DontDelete {{'| JSC::ReadOnly' if not attribute.has_setter}}, - reinterpret_cast<intptr_t>(getJS{{attribute.idl_name}}), - {% if attribute.has_setter %} - reinterpret_cast<intptr_t>(setJS{{attribute.idl_name}}), - {% else %} - 0, - {% endif %} - JSC::NoIntrinsic - }, -{% if attribute.conditional %} -#endif // defined({{attribute.conditional}}) -{% endif %} -{% endfor %} -{% if is_global_interface %} -{% for operation in operations %} -{% if operation.conditional %} -#if defined({{operation.conditional}}) -{% endif %} - { "{{operation.idl_name}}", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJS{{operation.idl_name}}), - static_cast<intptr_t>({{operation.length}}), - JSC::NoIntrinsic - }, -{% if operation.conditional %} -#endif // defined({{operation.conditional}}) -{% endif %} -{% endfor %} -{% endif %} - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // {{binding_class}}::property_table_values - -// static -const JSC::HashTable {{binding_class}}::property_table_prototype = { -{# This doesn't take into account disabled properties, but this is okay. This - value must be at least as large as the number of properties. #} -{% set num_properties = attributes|length %} -{% if is_global_interface %} -{% set num_properties = num_properties + operations|length %} -{% endif %} - {{ calculate_jsc_lookup_size(num_properties) }}, // compactSize - {{ calculate_jsc_lookup_size_mask(num_properties) }}, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // {{binding_class}}::property_table_prototype - -// static -const JSC::HashTable* {{binding_class}}::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - {{binding_class}}::s_classinfo(), property_table_prototype); -} - -#ifdef __LB_SHELL__FORCE_LOGGING__ -base::LazyInstance<{{binding_class}}::NonTrivialStaticFields> - {{binding_class}}::non_trivial_static_fields = LAZY_INSTANCE_INITIALIZER; -#endif // __LB_SHELL__FORCE_LOGGING__ - -const JSC::ClassInfo {{binding_class}}::s_info = { - "{{interface_name}}", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE({{binding_class}}) -}; // {{binding_class}}::s_info - -// static -JSC::JSObject* {{binding_class}}::GetPrototype( - JSC::JSGlobalObject* global_object) { - return Prototype::GetInstance(global_object); -} - -{% if has_interface_object %} -// static -JSC::JSObject* {{binding_class}}::GetConstructor( - JSC::ExecState* exec_state) { - return InterfaceObject::GetInstance(exec_state); -} - -// static -JSC::JSValue {{binding_class}}::Prototype::GetConstructor( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - return JSC::JSValue(InterfaceObject::GetInstance(exec_state)); -} -{% endif %} -{% if named_constructor %} -JSC::JSObject* {{binding_class}}::GetNamedConstructor( - JSC::ExecState* exec_state) { - return NamedInterfaceObject::GetInstance(exec_state); -} -{% endif %} -{% if is_global_interface %} - -// static -script::javascriptcore::JSCGlobalObject* {{binding_class}}::Create( - const scoped_refptr<{{impl_class}}>& global_interface, - script::EnvironmentSettings* environment_settings, - JSC::JSGlobalData* global_data, - ScriptObjectRegistry* script_object_registry) { - scoped_ptr<script::javascriptcore::WrapperFactory> wrapper_factory = - make_scoped_ptr(new script::javascriptcore::WrapperFactory()); -{% for interface in all_interfaces %} -{% if interface.conditional %} -#if defined({{interface.conditional}}) -{% endif %} - {# Don't register a create method for the global interface, since we do not - create a wrapper for it directly. #} - {% if interface.name != impl_class %} - wrapper_factory->RegisterWrappableType( - {{interface.name}}::{{interface.name}}WrappableType(), - JSC{{interface.name}}::s_classinfo(), - JSC{{interface.name}}::GetCreateWrapperFunction()); - {% endif %} -{% if interface.conditional %} -#endif // defined({{interface.conditional}}) -{% endif %} -{% endfor %} - - JSC::JSLockHolder lock(global_data); - JSC::Structure* structure = JSC::Structure::create( - *global_data, - NULL, // JSC::JSGlobalObject* - JSC::jsNull(), // prototype - JSC::TypeInfo(JSC::GlobalObjectType, StructureFlags), - &s_info); - {{binding_class}}* global_wrapper = - new (NotNull, JSC::allocateCell<{{binding_class}}>(global_data->heap)) - {{binding_class}}( - global_data, - structure, - script_object_registry, - wrapper_factory.Pass(), - environment_settings, - global_interface); - global_wrapper->finishCreation(*global_data); - global_data->heap.addFinalizer(global_wrapper, {{binding_class}}::destroy); - global_wrapper->setPrototype( - global_wrapper->globalData(), - {{binding_class}}::GetPrototype(global_wrapper)); - - return global_wrapper; -} -{% else %} - -// static -JSC::JSObject* {{binding_class}}::Create( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) { - if (!(wrappable->GetWrappableType() == {{impl_class}}::{{impl_class}}WrappableType())) { - NOTREACHED() << "Type of wrappable does not match {{impl_class}}::{{impl_class}}WrappableType()"; - return NULL; - } - {{impl_class}}* impl_ptr = - base::polymorphic_downcast<{{impl_class}}*>(wrappable.get()); - - JSC::JSGlobalData& global_data = global_object->globalData(); - - // Get or Create the prototype object for this interface. - JSC::JSObject* prototype = Prototype::GetInstance(global_object); - DCHECK(prototype); - - JSC::JSLockHolder lock(global_data); - // Create a JSC::Structure object for this instance. -{% if is_exception_interface %} - JSC::TypeInfo type_info(JSC::ErrorInstanceType, StructureFlags); -{% else %} - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); -{% endif %} - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(prototype), - type_info, - &s_info); - - // Instantiate a new garbage-collected wrapper object. - {{binding_class}}* wrapper = - new (NotNull, JSC::allocateCell<{{binding_class}}>(global_data.heap)) - {{binding_class}}( - &global_data, - structure, - global_object->script_object_registry(), - make_scoped_refptr(impl_ptr)); - wrapper->finishCreation(global_data); -{% if is_exception_interface %} - global_data.heap.addFinalizer(wrapper, destroy); -{% endif %} - return wrapper; -} -{% endif %} -{{binding_class}}::{{binding_class}}( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, -{% if is_global_interface %} - scoped_ptr<script::javascriptcore::WrapperFactory> wrapper_factory, - script::EnvironmentSettings* environment_settings, -{% endif %} - const scoped_refptr<{{impl_class}}>& impl) - : BaseClass(global_data, structure, script_object_registry, impl{% if is_global_interface %}, - wrapper_factory.Pass(), environment_settings{% endif %}) { -{% if get_opaque_root %} - set_get_opaque_root_function(base::Bind(&GetOpaqueRootFromWrappable)); -{% endif %} -} - -void {{binding_class}}::finishCreation(JSC::JSGlobalData& global_data) { -{% if is_exception_interface %} - WTF::String error_message = ToWTFString(wrappable()->message()); - BaseClass::finishCreation(global_data, error_message); -{% else %} - BaseClass::finishCreation(global_data); -{% endif %} - DCHECK(inherits(&s_info)); -} - -{{binding_class}}::~{{binding_class}}() { - // Empty destructor -} -{% if add_opaque_roots %} - -void {{binding_class}}::visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor) { - WrapperBase<JSC::JSDestructibleObject, Wrappable>::visitChildren( - cell, visitor); - - JSCGlobalObject* global_object = JSC::jsCast<JSCGlobalObject*>( - JSC::jsCast<JSObject*>(cell)->globalObject()); - - {{impl_class}}* impl = base::polymorphic_downcast<{{impl_class}}*>( - JSC::jsCast<WrapperBase*>(cell)->wrappable().get()); - -{% for opaque_root in add_opaque_roots %} - Wrappable* opaque_root{{loop.index0}} = impl->{{opaque_root}}(); - if (opaque_root{{loop.index0}}) { - visitor.addOpaqueRoot(opaque_root{{loop.index0}}); - } -{% endfor %} -} -{% endif %} - -// Look up property slot for querying property values. -bool {{binding_class}}::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - {{binding_class}}* this_object = JSC::jsCast<{{binding_class}}*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); -{% if is_global_interface %} - // Global interface may have both operations and properties as own properties - // so we cannot use getStaticValueSlot. - bool found_property_slot = JSC::getStaticPropertySlot<{{binding_class}}, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -{% else %} - bool found_property_slot = JSC::getStaticValueSlot<{{binding_class}}, BaseClass>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -{% endif %} - if (s_has_named_getter || s_use_debug_missing_property_handler) { - bool found_property_on_prototype_chain = false; - if (!found_property_slot && cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - found_property_on_prototype_chain = - prototype->hasProperty(exec, property_name); - } - } - if (s_has_named_getter) { - if (!found_property_slot && !found_property_on_prototype_chain) { - if (QueryNamedProperty(this_object, exec, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - found_property_slot = true; - } - } - } - if (s_use_debug_missing_property_handler) { - // The property was not found as an own-property, nor was it found on the - // prototype chain, so set the missing property handler to be called - // when getting this property value. - if (!found_property_slot && !found_property_on_prototype_chain) { - slot.setCustom(cell, &OnGetMissingProperty); - found_property_slot = true; - } - } - } - return found_property_slot; -} -{% if indexed_property_getter or named_property_getter %} - -// static -bool {{binding_class}}::getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::PropertySlot& slot) { - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (!impl) { - return false; - } -{% if indexed_property_getter %} - if (index < impl->length()) { - slot.setCustomIndex(cell, index, IndexedPropertyGetter); - return true; - } -{% endif %} - if (s_has_named_getter) { - {{binding_class}}* this_object = JSC::jsCast<{{binding_class}}*>(cell); - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - if (QueryNamedProperty(this_object, exec_state, property_name)) { - slot.setCustom(cell, &NamedPropertyGetter); - return true; - } - } - } - return Base::getOwnPropertySlotByIndex(cell, exec_state, index, slot); -} - -void {{binding_class}}::getOwnPropertyNames(JSC::JSObject* object, - JSC::ExecState* exec_state, JSC::PropertyNameArray& property_names, - JSC::EnumerationMode mode) { - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, object); - if (impl) { -{% if indexed_property_getter %} - for (uint32 i = 0; i < impl->length(); ++i) { - property_names.add(JSC::Identifier::from(exec_state, i)); - } -{% endif %} -{% if named_property_getter %} - JSCPropertyEnumerator enumerator(exec_state, &property_names); - impl->EnumerateNamedProperties(&enumerator); -{% endif %} - Base::getOwnPropertyNames(object, exec_state, property_names, mode); - } -} -{% endif %} - -// Look up property slot and put the |value|. -void {{binding_class}}::put(JSC::JSCell* cell, JSC::ExecState* exec, - JSC::PropertyName property_name, JSC::JSValue value, - JSC::PutPropertySlot& slot) { - {{binding_class}}* this_object = JSC::jsCast<{{binding_class}}*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - bool property_handled = false; - if (s_has_named_setter || s_use_debug_missing_property_handler) { - // Need to look up the property manually. - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec, property_name); - - if (s_has_named_setter) { - // We didn't find the property on the object or prototype chain, so - // set or create a new named property. - if (!has_property) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - NamedPropertySetter(cell, exec, property_name, value); - property_handled = true; - } - } - if (s_use_debug_missing_property_handler) { - if (!has_property && !property_handled) { - property_handled = OnSetMissingProperty(cell, exec, property_name, value); - } - } -{% if not is_global_interface and not parent_interface %} -#ifdef __LB_SHELL__FORCE_LOGGING__ - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - - base::AutoLock lock(non_trivial_static_fields.Get().lock_); - base::hash_set<std::string>& properties_warned_about = - non_trivial_static_fields.Get().properties_warned_about; - - if (properties_warned_about.find(property_name_utf8) == - properties_warned_about.end()) { - properties_warned_about.insert(property_name_utf8); - WTF::String class_name = cell->className(); - DLOG_IF(WARNING, !has_property) << "Did not find property named " << - property_name_utf8 << " to set on wrapper for " - << FromWTFString(class_name) - << std::endl << StackTraceToString(GetStackTrace(exec, 32)) - << std::endl; - } -#endif // __LB_SHELL__FORCE_LOGGING__ -{% endif %} - } - - if (!property_handled) { - JSC::lookupPut<{{binding_class}}, BaseClass>( - exec, property_name, value, GetPropertyTable(exec), this_object, slot); - } -} -{% if indexed_property_setter or named_property_setter %} - -// static -void {{binding_class}}::putByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue value, - bool should_throw) { - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (impl) { - bool property_handled = false; -{% if indexed_property_setter %} - if (index < impl->length()) { - IndexedPropertySetter(cell, exec_state, index, value); - property_handled = true; - } -{% endif %} - if (s_has_named_setter) { - if (!property_handled) { - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property) { - NamedPropertySetter(cell, exec_state, property_name, value); - property_handled = true; - } - } - } - if (!property_handled) { - Base::putByIndex(cell, exec_state, index, value, should_throw); - } - } -} - -{% endif %} -{% if supports_named_properties %} - -bool {{binding_class}}::deleteProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - TRACE_EVENT1("{{binding_class}}", "deleteProperty", "property", - TRACE_STR_COPY(WTF::String(property_name.publicName()).utf8().data())); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (impl) { - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deleteProperty(cell, exec_state, property_name); - } - return false; -} -{% endif %} -{% if supports_named_properties or supports_indexed_properties %} - -bool {{binding_class}}::deletePropertyByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index) { - TRACE_EVENT0("{{binding_class}}", "deletePropertyByIndex"); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (impl) { -{% if supports_indexed_properties %} - // https://heycam.github.io/webidl/#delete - // Return true if index is not a supported property index. - return index >= impl->length(); -{% elif supports_named_properties %} - JSC::PropertyName property_name = JSC::Identifier::from(exec_state, index); - bool has_property = HasOwnPropertyOrPrototypeProperty( - cell, exec_state, property_name); - if (!has_property && - QueryNamedProperty(cell, exec_state, property_name)) { - return NamedPropertyDeleter(cell, exec_state, property_name); - } - return Base::deletePropertyByIndex(cell, exec_state, index); -{% endif %} - } - return false; -} -{% endif %} - -bool {{binding_class}}::HasOwnPropertyOrPrototypeProperty( - JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - {{binding_class}}* this_object = JSC::jsCast<{{binding_class}}*>(cell); - JSC::PropertySlot lookup_slot; - bool has_property = JSC::getStaticPropertySlot<{{binding_class}}, BaseClass>( - exec_state, GetPropertyTable(exec_state), this_object, property_name, - lookup_slot); - return has_property || HasPropertyOnPrototype(exec_state, cell, property_name); -} - -namespace { -{% for constant in constants %} - -JSC::JSValue getJS{{constant.idl_name}}( - JSC::ExecState* exec_state, JSC::JSValue, JSC::PropertyName) { - TRACE_EVENT0("{{binding_class}}", "get {{constant.idl_name}}"); -{% if constant.can_use_compile_assert %} - COMPILE_ASSERT({{impl_class}}::{{constant.name}} == {{constant.value}}, - ValueFor{{impl_class}}_{{constant.name}}DoesNotMatchIDL); -{% else %} - DCHECK_EQ({{constant.value}}, {{impl_class}}::{{constant.name}}) << - "The value for {{impl_class}}::{{constant.name}} does not match " - "the value in the interface definition."; -{% endif %} - // JSCGlobalObject* is only needed for non-primitive types. - return ToJSValue(NULL, {{constant.value}}); -} -{% endfor %} -{% for attribute in attributes + static_attributes %} - -{% if attribute.conditional %} -#if defined({{attribute.conditional}}) -{% endif %} -JSC::JSValue getJS{{attribute.idl_name}}( - JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name) { - TRACE_EVENT0("{{binding_class}}", "get {{attribute.idl_name}}"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); -{% if not attribute.is_static %} - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } -{% endif %} -{% if attribute.raises_exception %} - JSCExceptionState exception_state(global_object); -{% endif %} - -{% if attribute.is_named_constructor_attribute %} - JSC::JSObject* constructor_object = - JSC{{attribute.interface_name}}::GetNamedConstructor( - global_object->globalExec()); - DCHECK(constructor_object) - << "NULL constructor returned for {{attribute.interface_name}}."; - return JSC::JSValue(constructor_object); -{% elif attribute.is_constructor_attribute %} - JSC::JSObject* constructor_object = - JSC{{attribute.interface_name}}::GetConstructor( - global_object->globalExec()); - DCHECK(constructor_object) - << "NULL constructor returned for {{attribute.interface_name}}."; - return JSC::JSValue(constructor_object); -{% else %} -{% call(arguments_list) add_extra_arguments('global_object', [], attribute) %} - JSC::JSValue result = ToJSValue( - global_object, - {{ call_function("impl", impl_class, attribute.getter_function_name, arguments_list, attribute.is_static) -}}); -{% if attribute.raises_exception %} - if (exception_state.is_exception_set()) { - return JSC::throwError(exec_state, exception_state.exception_object()); - } -{% endif %} - return result; -{% endcall %} -{% endif %} -} -{% if attribute.has_setter %} - -void setJS{{attribute.idl_name}}( - JSC::ExecState* exec_state, - JSC::JSObject* this_object, - JSC::JSValue value) { - TRACE_EVENT0("{{binding_class}}", "set {{attribute.idl_name}}"); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); -{% if not attribute.is_static %} - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, this_object); - if (!impl) { - return; - } -{% endif %} -{{ set_attribute_implementation(attribute, impl_class, "impl") }} -} -{% endif %} -{% if attribute.conditional %} -#endif // defined({{attribute.conditional}}) -{% endif %} -{% endfor %} -{% if constructor %} - -JSC::EncodedJSValue constructorJS{{impl_class}}(JSC::ExecState* exec_state) { -{% if constructor.overloads|length == 1 %} -{{constructor_implementation(constructor.overloads[0])}} -{% else %} -{{overload_resolution_implementation(constructor, 'constructorJS' + impl_class)}} -{% endif %} -} -{% for overload in constructor.overloads if constructor.overloads|length > 1 %} - -JSC::EncodedJSValue constructorJS{{impl_class}}{{overload.overload_index}}(JSC::ExecState* exec_state) { -{{constructor_implementation(overload)}} -} -{% endfor %} -{% endif %} -{% for operation in operations + static_operations %} -{% if operation.conditional %} -#if defined({{operation.conditional}}) -{% endif %} - -{% set boundFunctionPrefix = "staticFunctionJS" if operation.is_static else "functionJS" %} -JSC::EncodedJSValue {{boundFunctionPrefix}}{{operation.idl_name}}( - JSC::ExecState* exec_state) { - TRACE_EVENT0("{{binding_class}}", "call {{operation.idl_name}}"); -{% if operation.overloads|length == 1 %} -{{function_implementation(operation.overloads[0])}} -{% else %} -{{overload_resolution_implementation(operation, boundFunctionPrefix + operation.idl_name)}} -{% endif %} -} -{% for overload in operation.overloads if operation.overloads|length > 1 %} - -JSC::EncodedJSValue {{boundFunctionPrefix}}{{operation.idl_name}}{{overload.overload_index}}( - JSC::ExecState* exec_state) { -{{function_implementation(overload)}} -} -{% endfor %} -{% if operation.conditional %} -#endif // defined({{operation.conditional}}) -{% endif %} -{% endfor %} -{% if indexed_property_getter %} - -JSC::JSValue IndexedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, uint32_t index) { - TRACE_EVENT0("{{binding_class}}", "IndexedPropertyGetter"); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); -{% call(arguments_list) - add_extra_arguments('global_object', ['index'], indexed_property_getter) %} - JSC::JSValue result = ToJSValue( - global_object, - {{ call_function("impl", impl_class, indexed_property_getter.name, - arguments_list, False) -}}); -{% if indexed_property_getter.raises_exception %} - if (exception_state.is_exception_set()) { - return JSC::throwError(exec_state, exception_state.exception_object()); - } -{% endif %} - return result; -{% endcall %} -} -{% endif %} -{% if indexed_property_setter %} - -void IndexedPropertySetter(JSC::JSCell* cell, - JSC::ExecState* exec_state, uint32_t index, JSC::JSValue jsc_value) { - TRACE_EVENT0("{{binding_class}}", "IndexedPropertySetter"); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - {{indexed_property_setter.type}} value; - FromJSValue(exec_state, jsc_value, - {{indexed_property_setter.conversion_flags}}, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } -{% call(arguments_list) add_extra_arguments( - 'global_object', ['index', 'value'], indexed_property_setter) %} - {{ call_function("impl", impl_class, indexed_property_setter.name, - arguments_list, False) -}}; -{% if indexed_property_setter.raises_exception %} - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - } -{% endif %} -{% endcall %} -} -{% endif %} -{% if named_property_getter %} - -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - TRACE_EVENT0("{{binding_class}}", "NamedPropertyGetter"); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, slot_base); - if (!impl) { - return exec_state->exception(); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - std::string property_name_utf8 = FromWTFString(property_name.publicName()); -{% call(arguments_list) add_extra_arguments('global_object', ['property_name_utf8'], named_property_getter) %} - JSC::JSValue result = ToJSValue( - global_object, - {{ call_function("impl", impl_class, named_property_getter.name, arguments_list, False) -}}); -{% if named_property_getter.raises_exception %} - if (exception_state.is_exception_set()) { - return JSC::throwError(exec_state, exception_state.exception_object()); - } -{% endif %} - return result; -{% endcall %} -} - -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (!impl) { - return false; - } - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - return impl->CanQueryNamedProperty(property_name_utf8); -} -{% else %} -JSC::JSValue NamedPropertyGetter(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool QueryNamedProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { - NOTREACHED(); - return false; -} -{% endif %} -{% if named_property_setter %} - -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - TRACE_EVENT0("{{binding_class}}", "NamedPropertySetter"); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (!impl) { - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - {{named_property_setter.type}} value; - FromJSValue(exec_state, jsc_value, - {{named_property_setter.conversion_flags}}, - &exception_state, &value); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } -{% call(arguments_list) add_extra_arguments( - 'global_object', ['property_name_utf8', 'value'], named_property_setter) %} - {{ call_function( - "impl", impl_class, named_property_setter.name, arguments_list, False) -}}; -{% if named_property_setter.raises_exception %} - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - } -{% endif %} -{% endcall %} -} -{% else %} -void NamedPropertySetter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue jsc_value) { - NOTREACHED(); -} -{% endif %} - -bool NamedPropertyDeleter(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name) { -{% if named_property_deleter %} - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, cell); - if (impl) { - std::string property_name_utf8 = FromWTFString(property_name.publicName()); - impl->{{named_property_deleter.name}}(property_name_utf8); - return true; - } -{% endif %} - return false; -} -{% if stringifier %} - -JSC::EncodedJSValue StringifierJS(JSC::ExecState* exec_state) { - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - JSC::JSValue result = ToJSValue(global_object, impl->{{stringifier.name}}()); - return JSC::JSValue::encode(result); -} -{% endif %} - -#if !defined(COBALT_BUILD_TYPE_GOLD) -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onGetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onGetMissingProperty exists, so call this and - // return the result as the value for this property. - JSC::MarkedArgumentBuffer args; - args.append(slot_base); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval; - } - } - return JSC::jsUndefined(); -} - -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSC::JSValue callable = global_object->get( - exec_state, JSC::Identifier(exec_state, "__onSetMissingProperty")); - if (!callable.isUndefined()) { - JSC::CallData call_data; - JSC::CallType call_type = JSC::getCallData(callable, call_data); - if (call_type != JSC::CallTypeNone) { - // The function called __onSetMissingProperty exists, so call this with - // the value to be set. The missing property handler returns true if it - // has handled the setting of this property. - JSC::MarkedArgumentBuffer args; - args.append(cell); - args.append(JSC::JSValue( - JSC::JSString::create( - global_object->globalData(), property_name.publicName()))); - args.append(value); - JSC::JSValue retval = JSC::call( - exec_state, callable, call_type, call_data, global_object, args); - return retval.toBoolean(exec_state); - } - } - return false; -} -#else -JSC::JSValue OnGetMissingProperty(JSC::ExecState* exec_state, - JSC::JSValue slot_base, JSC::PropertyName property_name) { - NOTREACHED(); - return JSC::jsUndefined(); -} -bool OnSetMissingProperty(JSC::JSCell* cell, JSC::ExecState* exec_state, - JSC::PropertyName property_name, JSC::JSValue value) { - NOTREACHED(); - return false; -} -#endif -} // namespace -{% endblock implementation %} - -{% block create_global_object_impl %} - 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_environment->SetGlobalObject(global_object); -{% endblock create_global_object_impl %} - -{% block enumeration_definitions %} -{% for enumeration in enumerations %} -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, {{impl_class}}::{{enumeration.name}} in_enum) { - JSC::JSGlobalData* global_data = &(global_object->globalData()); - switch (in_enum) { -{% for value, idl_value in enumeration.value_pairs %} - case {{impl_class}}::{{value}}: return JSC::jsString(global_data, "{{idl_value}}"); -{% endfor %} - default: - NOTREACHED(); - return JSC::jsUndefined(); - } -} -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, JSCExceptionState* exception_state, - {{impl_class}}::{{enumeration.name}}* out_enum) { - DCHECK_EQ(0, conversion_flags) << "Unexpected conversion flags."; - // JSValue -> IDL enum algorithm described here: - // http://heycam.github.io/webidl/#es-enumeration - - // 1. Let S be the result of calling ToString(V). - JSC::JSString* js_string = jsvalue.toString(exec_state); - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception converting value to string"; - return; - } - const WTF::String& wtf_string = js_string->tryGetValue(); - // 3. Return the enumeration value of type E that is equal to S. -{% for value, idl_value in enumeration.value_pairs %} - {{-" else " if not loop.first}}if (wtf_string == "{{idl_value}}") { - *out_enum = {{impl_class}}::{{value}}; - }{% endfor %} else { - // 2. If S is not one of E's enumeration values, then throw a TypeError. - JSC::throwTypeError(exec_state); - } -} -{% endfor %} -{% endblock enumeration_definitions %}
diff --git a/src/cobalt/bindings/javascriptcore/templates/interface.h.template b/src/cobalt/bindings/javascriptcore/templates/interface.h.template deleted file mode 100644 index 0fb76e8..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/interface.h.template +++ /dev/null
@@ -1,176 +0,0 @@ -{# - # Copyright 2015 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. - #} -{% extends "interface-base.h.template" %} -{% block includes %} -{{ super() }} -#include "base/threading/thread_local_storage.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/thread_local_hash_table.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -{% if is_exception_interface %} -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ErrorInstance.h" -{% endif %} -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" -{% endblock includes%} - -{% block implementation %} -class {{binding_class}} -{% if is_global_interface %} - : public script::javascriptcore::JSCGlobalObject { - typedef script::javascriptcore::JSCGlobalObject BaseClass; -{% elif is_exception_interface %} - : public script::javascriptcore::ExceptionBase { - typedef script::javascriptcore::ExceptionBase BaseClass; -{% elif parent_interface %} - : public {{parent_interface}} { - typedef {{parent_interface}} BaseClass; -{% else %} - : public script::javascriptcore::InterfaceBase { - typedef script::javascriptcore::InterfaceBase BaseClass; -{% endif %} - public: - - // Get the prototype object for this wrapper class. - static JSC::JSObject* GetPrototype(JSC::JSGlobalObject* global_object); -{% if has_interface_object %} - - // Get the interface object for this wrapper class. - static JSC::JSObject* GetConstructor(JSC::ExecState* exec_state); -{% endif %} -{% if named_constructor %} - - // Get the named constructor for this wrapper class. - static JSC::JSObject* GetNamedConstructor(JSC::ExecState* exec_state); -{% endif %} - - // JavaScriptCore functions and members - - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); -{% if indexed_property_getter or named_property_getter %} - - static bool getOwnPropertySlotByIndex(JSC::JSCell* cell, - JSC::ExecState* exec_state, - uint32_t index, - JSC::PropertySlot& slot); - - static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, - JSC::PropertyNameArray&, - JSC::EnumerationMode); -{% endif %} -{% if indexed_property_setter or named_property_setter %} - - static void putByIndex(JSC::JSCell* cell, JSC::ExecState* exec_state, - uint32_t index, JSC::JSValue value, bool should_throw); -{% endif %} - - // static override. Needed to support setting a property. - static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, - JSC::JSValue, JSC::PutPropertySlot&); -{% if supports_named_properties %} - - static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName); -{% endif %} -{% if supports_indexed_properties or supports_named_properties %} - - static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, uint32_t); -{% endif %} - - // static override. This function will be called after a new object has - // been created. - void finishCreation(JSC::JSGlobalData& global_data); -{% if not is_global_interface %} - - static script::javascriptcore::WrapperFactory::CreateWrapperFunction - GetCreateWrapperFunction() { - return base::Bind(&Create); - } - - private: - // Create a new wrapper for |wrappable|, which will be cast to {{impl_class}}. - static JSC::JSObject* Create( - script::javascriptcore::JSCGlobalObject* global_object, - const scoped_refptr<script::Wrappable>& wrappable); -{% else %} - - static script::javascriptcore::JSCGlobalObject* Create( - const scoped_refptr<{{impl_class}}>& global_interface, - script::EnvironmentSettings* environment_settings, - JSC::JSGlobalData* global_data, - script::javascriptcore::ScriptObjectRegistry* script_object_registry); -{% endif %} - - protected: - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - {{binding_class}}( - JSC::JSGlobalData* global_data, - JSC::Structure* structure, - script::javascriptcore::ScriptObjectRegistry* script_object_registry, -{% if is_global_interface %} - scoped_ptr<script::javascriptcore::WrapperFactory> wrapper_factory, - script::EnvironmentSettings* environment_settings, -{% endif %} - const scoped_refptr<{{impl_class}}>& impl); - ~{{binding_class}}(); - {% if add_opaque_roots %} - - static void visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor); - {% endif %} - - private: -{% if has_interface_object %} - class InterfaceObject; -{% endif %} -{% if named_constructor %} - class NamedInterfaceObject; -{% endif %} - class Prototype; - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; - static base::LazyInstance< - cobalt::script::javascriptcore::ThreadLocalHashTable> - thread_local_property_table; - - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static bool HasOwnPropertyOrPrototypeProperty(JSC::JSCell* cell, - JSC::ExecState* exec_state, JSC::PropertyName property_name); - -#ifdef __LB_SHELL__FORCE_LOGGING__ - struct NonTrivialStaticFields { - // TODO: Only log attempts of usage of unsupported Web APIs. - base::hash_set<std::string> properties_warned_about; - base::Lock lock_; - }; - static base::LazyInstance<NonTrivialStaticFields> non_trivial_static_fields; -#endif // __LB_SHELL__FORCE_LOGGING__ -}; -{% endblock implementation %}
diff --git a/src/cobalt/bindings/javascriptcore/templates/macros.cc.template b/src/cobalt/bindings/javascriptcore/templates/macros.cc.template deleted file mode 100644 index a3a20fe..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/macros.cc.template +++ /dev/null
@@ -1,325 +0,0 @@ -{# - # Extract and marshal arguments that will be passed to a function-like call. - # Parameters: - # operation: An IdlOperation object - # Passed to caller: - # A string that can be used as the parameters for a function call. It will - # be either empty, or a comma-separated list of variable names. - #} -{% macro extract_arguments(operation) %} -{% set non_optional_arguments = operation.arguments|rejectattr('is_optional')|rejectattr('is_variadic')|list %} -{% set optional_arguments = operation.arguments|selectattr('is_optional')|list %} -{% set num_default_arguments = optional_arguments|rejectattr('default_value', 'none')|list|length %} -{% set variadic_argument = operation.arguments|last if (operation.arguments|length > 0) and (operation.arguments|last).is_variadic %} -{% set has_non_default_optional_arguments = optional_arguments|length > num_default_arguments %} - -{%- if non_optional_arguments|length > 0 %} - const size_t kMinArguments = {{non_optional_arguments|length}}; - if (exec_state->argumentCount() < kMinArguments) { - return JSC::throwVMNotEnoughArgumentsError(exec_state); - } -{% endif -%} - -{# Declare variables for all arguments #} -{% for argument in non_optional_arguments %} -{% if loop.first %} - // Non-optional arguments -{% endif %} - TypeTraits<{{argument.type}} >::ConversionType {{argument.name}}; -{% endfor %} -{% for argument in optional_arguments if argument.default_value %} -{% if loop.first %} - // Optional arguments with default values -{% endif %} - TypeTraits<{{argument.type}} >::ConversionType {{argument.name}} = - {{argument.default_value}}; -{% endfor %} -{% for argument in optional_arguments if not argument.default_value %} -{% if loop.first %} - // Optional arguments -{% endif %} - TypeTraits<{{argument.type}} >::ConversionType {{argument.name}}; -{% endfor %} -{% if variadic_argument %} - // Variadic argument - TypeTraits<{{variadic_argument.type}} >::ConversionType {{variadic_argument.name}}; -{% endif -%} - -{% for argument in non_optional_arguments %} - - DCHECK_LT({{loop.index0}}, exec_state->argumentCount()); - FromJSValue(exec_state, - exec_state->argument({{loop.index0}}), - {{argument.conversion_flags}}, - &exception_state, &{{argument.name}}); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } -{% endfor -%} -{% for argument in optional_arguments %} -{% if loop.first %} - - size_t num_set_arguments = {{non_optional_arguments|length + num_default_arguments}}; -{% endif %} - if (exec_state->argumentCount() > {{loop.index0 + non_optional_arguments|length}}) { - FromJSValue(exec_state, - exec_state->argument({{loop.index0 + non_optional_arguments|length}}), - {{argument.conversion_flags}}, - &exception_state, - &{{argument.name}}); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } -{% if not argument.default_value %} - ++num_set_arguments; -{% endif %} - } -{% endfor %} -{% if variadic_argument %} - - // Get variadic arguments. -{% if optional_arguments|length %} - const size_t kLastOptionalArgIndex = {{non_optional_arguments|length + optional_arguments|length}}; - if (num_set_arguments == kLastOptionalArgIndex) { - // If the last optional argument has been set, we will call the overload - // that takes the variadic argument, possibly with an empty vector in the - // case that there are no more arguments left. - ++num_set_arguments; - } -{% endif %} - const size_t kFirstVariadicArgIndex = {{operation.arguments|length - 1}}; - if (exec_state->argumentCount() > kFirstVariadicArgIndex) { - {{variadic_argument.name}}.resize(exec_state->argumentCount() - kFirstVariadicArgIndex); - for (int i = 0; i + kFirstVariadicArgIndex < exec_state->argumentCount(); ++i) { - FromJSValue(exec_state, - exec_state->argument(i + kFirstVariadicArgIndex), - {{variadic_argument.conversion_flags}}, - &exception_state, - &{{variadic_argument.name}}[i]); - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } - } - } -{% endif -%} - -{# Call the implementation function, based on the number of set arguments. #} -{% if has_non_default_optional_arguments %} - switch (num_set_arguments) { -{% for num_arguments in range(non_optional_arguments|length + num_default_arguments, operation.arguments|length + 1) %} -{# If no variadic arguments have been set, we still call the function with - signature that has the variadic argument and pass an empty vector. There is - no such function signature that takes the optional parameter immediately - preceeding the variadic argument but does not take the variadic arguments. #} -{% if loop.last or not operation.arguments[num_arguments].is_variadic %} -{% set function_arguments = operation.arguments[0:num_arguments]|map(attribute='name')|list %} - case {{num_arguments}}: - { - {# whitespace control block #} - {{-caller(function_arguments)|indent(8, True)}} - break; - } -{% endif %} -{% endfor %} - default: - NOTREACHED(); - return JSC::JSValue::encode(JSC::jsUndefined()); - } -{% else %} {#- has_non_default_optional_arguments #} -{% set function_arguments = operation.arguments|map(attribute='name')|list %} - {# whitespace control block #} - {{-caller(function_arguments)|indent(2, True)}} -{% endif %} -{% endmacro %} - -{# - # Append extra arguments that should be passed to a cobalt function. - # Specifically, this will prepend parameters specified on IDLs using the - # [CallWith=] extended attribute. - # Parameters: - # global_object: A C++ expression to retrieve a JSCGlobalObject pointer. - # arguments_list: A list of C++ expressions that represent a sequence of - # arguments that will be passed to a function. - # idl_object: An IDL object that may have the extended attribute that - # we are interested in. - # is_constructor: True if we are extracting the extended attribute for - # a constructor. - # Passed to caller: - # arguments_list, possibly with extra arguments prepended. - #} -{% macro add_extra_arguments(global_object, arguments_list, context) %} -{% set prepend = [] %} -{% set append = [] %} -{% if context.call_with %} -{% set prepend = ['%s->Get%s()'|format(global_object, context.call_with)] %} -{% endif %} -{% if context.raises_exception %} -{% set append = ['&exception_state'] %} -{% endif %} -{{caller(prepend + arguments_list + append)}} -{%- endmacro %} - -{# - # Create an expression to call a member function, which might be static, - # with the given arguments. - # Parameters: - # this_object: A string that is the name of a C++ variable that is a - # pointer to an instance of the implementation class. - # class_name: A string that is the name of the C++ implementation class. - # function_name: A string that is the name of the function to be called. - # arguments_list: A list of C++ expressions that represent a sequence of - # arguments that will be passed to a function. - # is_static: True if the method is static. - #} -{% macro call_function(this_object, class_name, function_name, arguments_list, is_static) %} -{% if is_static %} -{{class_name}}::{{function_name}}({{arguments_list|join(', ')}}) -{%- else %} -{{this_object}}->{{function_name}}({{arguments_list|join(', ')}}) -{%- endif %} -{%- endmacro %} - -{# - # Function body for operation bindings. - # Parameters: - # operation: The operation context object - #} -{% macro function_implementation(operation) %} - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); -{% if not operation.is_static %} - JSC::JSObject* this_object = - exec_state->hostThisValue().toThisObject(exec_state); - {{impl_class}}* impl = - GetWrappableOrSetException<{{impl_class}}>(exec_state, this_object); - if (!impl) { - return JSC::JSValue::encode(exec_state->exception()); - } -{% endif %} - -{% call(arguments_list) extract_arguments(operation) %} -{% call(arguments_list) add_extra_arguments('global_object', arguments_list, operation) %} -{{ 'TypeTraits<%s >::ReturnType return_value = '|format(operation.type) if operation.type != 'void'}} -{{- call_function("impl", impl_class, operation.name, arguments_list, operation.is_static) -}}; -{% if operation.raises_exception %} -if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); -} -{% endif %} -return JSC::JSValue::encode({{'ToJSValue(global_object, return_value)' if operation.type != 'void' else 'JSC::jsUndefined()'}}); -{% endcall %} -{% endcall %} -{%- endmacro %} - -{# - # Function body for constructor bindings. - # Parameters: - # operation: The constructor context object - #} -{% macro constructor_implementation(constructor) %} - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); -{% call(arguments_list) extract_arguments(constructor) %} -{% call(arguments_list) add_extra_arguments('global_object', arguments_list, constructor) %} - scoped_refptr<{{impl_class}}> new_object = - new {{impl_class}}({{arguments_list|join(', ')}}); -{% if constructor.raises_exception %} - if (exception_state.is_exception_set()) { - return JSC::throwVMError(exec_state, exception_state.exception_object()); - } -{% endif %} - return JSC::JSValue::encode(ToJSValue(global_object, new_object)); -{% endcall %} -{% endcall %} -{%- endmacro %} - -{# - # Function body for overload resolution function. - # Parameters: - # overload_context: The overload context object. - # bound_function_prefix: The prefix of the function to be called on - # resolution. The overload index will be appended to this. - #} -{% macro overload_resolution_implementation(overload_context, bound_function_prefix) %} - const size_t num_arguments = exec_state->argumentCount(); - switch(num_arguments) { -{% for length, distinguishing_argument_index, resolution_tests in overload_context.overload_resolution_by_length %} - case({{length}}): { - // Overload resolution algorithm details found here: - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm -{# In the case there is only one resolution condition, we don't need the arg. #} -{% if resolution_tests|length > 1 %} - JSC::JSValue arg = exec_state->argument({{distinguishing_argument_index}}); -{% endif %} -{% for test, overload in resolution_tests %} - if ({{test("arg")}}) { - return {{bound_function_prefix}}{{overload.overload_index}}(exec_state); - } -{% endfor %} - break; - } -{% endfor %} - } - // Invalid number of args - // http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm - // 4. If S is empty, then throw a TypeError. - return JSC::throwVMTypeError(exec_state); -{%- endmacro %} - -{# - # Function body for setting an attribute value. - # Parameters: - # attribute: The attribute context object. - # impl_class: Cobalt class name of the Cobalt implementation of the - # interface on which the attribute is a member. - # cobalt_impl: Variable name of a pointer to a Cobalt implementation of the - # interface on which the attribute is a member. - #} -{% macro set_attribute_implementation(attribute, impl_class, cobalt_impl) %} -{% if attribute.is_constructor_attribute %} - NOTIMPLEMENTED() << "Setting constructors not yet supported."; -{% else %} -{% if attribute.put_forwards %} - { - {{attribute.type}} forwarded_{{cobalt_impl}} = - {{call_function(cobalt_impl, impl_class, attribute.getter_function_name, - arguments_list, attribute.is_static)-}}; - if (!forwarded_{{cobalt_impl}}) { - return; - } -{{ set_attribute_implementation(attribute.put_forwards, attribute.type, - "forwarded_" + cobalt_impl) }} - } -{% else %} {#- if attribute.put_forwards #} - TypeTraits<{{attribute.type}} >::ConversionType cobalt_value; -{% if attribute.is_event_listener %} - ToEventListenerAttribute(exec_state, value, {{attribute.conversion_flags}}, - &exception_state, this_object, &cobalt_value); -{% else %} - FromJSValue(exec_state, value, - {{attribute.conversion_flags}}, &exception_state, - &cobalt_value); -{% endif %} - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return; - } -{% call(arguments_list) add_extra_arguments('global_object', ['cobalt_value'], - attribute) %} - // Check if argument conversion raised an exception. - if (!exec_state->hadException()) { - {{ call_function(cobalt_impl, impl_class, attribute.setter_function_name, - arguments_list, attribute.is_static) -}}; -{% if attribute.raises_exception %} - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - } -{% endif %} - } -{%- endcall %} -{% endif %} {#- attribute.put_forwards #} -{% endif %} {#- attribute.is_constructor_attribute #} -{%- endmacro %} -
diff --git a/src/cobalt/bindings/javascriptcore/templates/prototype-object.template b/src/cobalt/bindings/javascriptcore/templates/prototype-object.template deleted file mode 100644 index 603493f..0000000 --- a/src/cobalt/bindings/javascriptcore/templates/prototype-object.template +++ /dev/null
@@ -1,179 +0,0 @@ -{# - # 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. - #} -// Class that defines a JS Object representing this interface's prototype -class {{binding_class}}::Prototype : public PrototypeBase { - public: - // Get the prototype. Will create a new prototype if necessary, otherwise it - // will return a cached prototype. - static JSC::JSObject* GetInstance(JSC::JSGlobalObject* global_object); - DECLARE_CLASSINFO(); - - // Needed when JSC::OverridesGetOwnPropertySlot StructureFlag is set - // Must be public so that it can be accessible from getStaticValueSlot<>. - static bool getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, - JSC::PropertyName, - JSC::PropertySlot&); - - private: - typedef PrototypeBase BaseClass; - - static const unsigned StructureFlags = - JSC::OverridesGetOwnPropertySlot | - BaseClass::StructureFlags; - - Prototype(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : BaseClass(global_object, structure) { } - -{% if has_interface_object %} - static JSC::JSValue GetConstructor(JSC::ExecState* exec_state, - JSC::JSValue slot_base, - JSC::PropertyName property_name); -{% endif %} - static const JSC::HashTable* GetPropertyTable(JSC::ExecState* exec_state); - - static const JSC::HashTableValue property_table_values[]; - static const JSC::HashTable property_table_prototype; -}; - -const JSC::HashTableValue {{binding_class}}::Prototype::property_table_values[] = { -{% for operation in operations if not is_global_interface %} -{% if operation.conditional %} -#if defined({{operation.conditional}}) -{% endif %} - { "{{operation.idl_name}}", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(functionJS{{operation.idl_name}}), - static_cast<intptr_t>({{operation.length}}), - JSC::NoIntrinsic - }, -{% if operation.conditional %} -#endif // defined({{operation.conditional}}) -{% endif %} -{% endfor %} -{% if stringifier %} - { "toString", - JSC::DontDelete | JSC::Function, - reinterpret_cast<intptr_t>(StringifierJS), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, -{% endif %} -{% for constant in constants %} - { "{{constant.idl_name}}", - JSC::DontDelete | JSC::ReadOnly, - reinterpret_cast<intptr_t>(getJS{{constant.idl_name}}), - 0, - JSC::NoIntrinsic - }, -{% endfor %} -{% if has_interface_object %} - { "constructor", - JSC::DontDelete | JSC::DontEnum, - reinterpret_cast<intptr_t>({{binding_class}}::Prototype::GetConstructor), - static_cast<intptr_t>(0), - JSC::NoIntrinsic - }, -{% endif %} - { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) } -}; // {{binding_class}}::Prototype::property_table_values - -// static -const JSC::HashTable {{binding_class}}::Prototype::property_table_prototype = { -{% set num_prototype_properties = constants|length %} -{% if not is_global_interface %} -{% set num_prototype_properties = num_prototype_properties + operations|length %} -{% endif %} -{% if has_interface_object %} -{% set num_prototype_properties = num_prototype_properties + 1 %} -{% endif %} -{% if stringifier %} -{% set num_prototype_properties = num_prototype_properties + 1 %} -{% endif %} - {{ calculate_jsc_lookup_size(num_prototype_properties) }}, // compactSize - {{ calculate_jsc_lookup_size_mask(num_prototype_properties) }}, // compactSizeMask - property_table_values, - NULL // table allocated at runtime -}; // {{binding_class}}::Prototype::property_table_prototype - -// static -const JSC::HashTable* {{binding_class}}::Prototype::GetPropertyTable( - JSC::ExecState* exec_state) { - return ThreadLocalHashTable::GetInstance()->GetHashTable( - {{binding_class}}::Prototype::s_classinfo(), property_table_prototype); -} - -const JSC::ClassInfo {{binding_class}}::Prototype::s_info = { - "{{interface_name}}Prototype", // className - BaseClass::s_classinfo(), // parentClass - NULL, // static hash-table of properties (not used) - GetPropertyTable, // function pointer to get hash-table of properties - CREATE_METHOD_TABLE({{binding_class}}::Prototype) -}; // {{binding_class}}::Prototype::s_info - -// Look up property slot for querying property values. -bool {{binding_class}}::Prototype::getOwnPropertySlot(JSC::JSCell* cell, - JSC::ExecState* exec, JSC::PropertyName property_name, - JSC::PropertySlot& slot) { - Prototype* this_object = JSC::jsCast<Prototype*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, &s_info); - return JSC::getStaticPropertySlot<Prototype, JSC::JSObject>( - exec, GetPropertyTable(exec), this_object, property_name, slot); -} - -// static -JSC::JSObject* {{binding_class}}::Prototype::GetInstance( - JSC::JSGlobalObject* base_global_object) { - JSCGlobalObject* global_object = - static_cast<JSCGlobalObject*>(base_global_object); - ASSERT_GC_OBJECT_INHERITS(global_object, JSCGlobalObject::s_classinfo()); - - // Try to get the cached prototype, and create a new one if needed. - JSC::JSObject* prototype = global_object->object_cache()->GetCachedPrototype(&s_info); - if (prototype == NULL) { - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSLockHolder lock(&global_data); - -{% if parent_interface %} - JSC::JSObject* parent_prototype = - {{parent_interface}}::GetPrototype(global_object); -{% elif is_exception_interface %} - JSC::JSObject* parent_prototype = global_object->errorPrototype(); -{% else %} - JSC::JSObject* parent_prototype = global_object->objectPrototype(); -{% endif %} - JSC::TypeInfo type_info(JSC::ObjectType, StructureFlags); - JSC::Structure* structure = JSC::Structure::create( - global_data, - global_object, - JSC::JSValue(parent_prototype), - type_info, - &s_info); - - // Create the new prototype object. - Prototype* new_prototype = - new (NotNull, JSC::allocateCell<Prototype>( - global_data.heap)) - Prototype(global_object, structure); - new_prototype->finishCreation(global_data); - // Add the prototype to the cache. - global_object->object_cache()->CachePrototype(&s_info, new_prototype); - prototype = new_prototype; - } - DCHECK_EQ(global_object->object_cache()->GetCachedPrototype(&s_info), prototype); - return prototype; -} - -// End of {{binding_class}}::Prototype class
diff --git a/src/cobalt/bindings/mozjs/templates/interface.cc.template b/src/cobalt/bindings/mozjs/templates/interface.cc.template index 90ed015..06c23c3 100644 --- a/src/cobalt/bindings/mozjs/templates/interface.cc.template +++ b/src/cobalt/bindings/mozjs/templates/interface.cc.template
@@ -27,11 +27,11 @@ {% block includes %} {{ super() }} #include "base/lazy_instance.h" -#include "cobalt/script/mozjs/callback_function_conversion.h" #include "cobalt/script/exception_state.h" +#include "cobalt/script/mozjs/callback_function_conversion.h" #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_exception_state.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" @@ -53,24 +53,24 @@ using cobalt::script::CallbackFunction; using cobalt::script::CallbackInterfaceTraits; using cobalt::script::ExceptionState; +using cobalt::script::Wrappable; using cobalt::script::mozjs::FromJSValue; +using cobalt::script::mozjs::InterfaceData; +using cobalt::script::mozjs::MozjsCallbackFunction; +using cobalt::script::mozjs::MozjsExceptionState; +using cobalt::script::mozjs::MozjsGlobalEnvironment; +using cobalt::script::mozjs::MozjsPropertyEnumerator; +using cobalt::script::mozjs::MozjsUserObjectHolder; +using cobalt::script::mozjs::ProxyHandler; +using cobalt::script::mozjs::ToJSValue; +using cobalt::script::mozjs::TypeTraits; +using cobalt::script::mozjs::WrapperFactory; +using cobalt::script::mozjs::WrapperPrivate; using cobalt::script::mozjs::kConversionFlagNullable; using cobalt::script::mozjs::kConversionFlagRestricted; using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString; using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString; using cobalt::script::mozjs::kNoConversionFlags; -using cobalt::script::mozjs::InterfaceData; -using cobalt::script::mozjs::MozjsCallbackFunction; -using cobalt::script::mozjs::MozjsExceptionState; -using cobalt::script::mozjs::MozjsGlobalEnvironment; -using cobalt::script::mozjs::MozjsUserObjectHolder; -using cobalt::script::mozjs::MozjsPropertyEnumerator; -using cobalt::script::mozjs::ProxyHandler; -using cobalt::script::mozjs::ToJSValue; -using cobalt::script::mozjs::TypeTraits; -using cobalt::script::mozjs::WrapperPrivate; -using cobalt::script::mozjs::WrapperFactory; -using cobalt::script::Wrappable; {% endblock using_directives %} {% block enumeration_declarations %} {% if enumerations|length %} @@ -945,6 +945,7 @@ {{binding_class}}::CreateProxy( context, global_interface); mozjs_global_environment->SetEnvironmentSettings(environment_settings); + mozjs_global_environment->EvaluateAutomatics(); WrapperFactory* wrapper_factory = mozjs_global_environment->wrapper_factory();
diff --git a/src/cobalt/bindings/run_cobalt_bindings_tests.bat b/src/cobalt/bindings/run_cobalt_bindings_tests.bat index e26fc8d..2df4a48 100644 --- a/src/cobalt/bindings/run_cobalt_bindings_tests.bat +++ b/src/cobalt/bindings/run_cobalt_bindings_tests.bat
@@ -14,5 +14,4 @@ @rem limitations under the License. @rem -@python run_cobalt_bindings_tests.py jsc %* @python run_cobalt_bindings_tests.py mozjs %*
diff --git a/src/cobalt/bindings/run_cobalt_bindings_tests.py b/src/cobalt/bindings/run_cobalt_bindings_tests.py index 4aa69b8..a364191 100644 --- a/src/cobalt/bindings/run_cobalt_bindings_tests.py +++ b/src/cobalt/bindings/run_cobalt_bindings_tests.py
@@ -37,7 +37,6 @@ # Add cobalt's bindings generation scripts to the path. sys.path.append(cobalt_bindings_dir) from idl_compiler_cobalt import IdlCompilerCobalt # pylint: disable=g-import-not-at-top -from javascriptcore.code_generator import CodeGeneratorJsc from mozjs.code_generator import CodeGeneratorMozjs CodeGeneratorMozjs45 = __import__( # pylint: disable=invalid-name 'mozjs-45.code_generator').code_generator.CodeGeneratorMozjs @@ -54,9 +53,7 @@ parser.add_argument('engine') args = parser.parse_args(argv[1:]) - if args.engine.lower() == 'jsc': - generator = CodeGeneratorJsc - elif args.engine.lower() == 'mozjs': + if args.engine.lower() == 'mozjs': generator = CodeGeneratorMozjs elif args.engine.lower() == 'mozjs-45': generator = CodeGeneratorMozjs45
diff --git a/src/cobalt/bindings/run_cobalt_bindings_tests.sh b/src/cobalt/bindings/run_cobalt_bindings_tests.sh index 3cce2da..12ff255 100755 --- a/src/cobalt/bindings/run_cobalt_bindings_tests.sh +++ b/src/cobalt/bindings/run_cobalt_bindings_tests.sh
@@ -19,6 +19,5 @@ # Ensure we are in the bindings directory. cd "$(dirname "${BASH_SOURCE[0]}")" -python run_cobalt_bindings_tests.py jsc "$@" python run_cobalt_bindings_tests.py mozjs "$@" python run_cobalt_bindings_tests.py mozjs-45 "$@"
diff --git a/src/cobalt/bindings/testing/global_constructors_idls_idl_files_list.tmp b/src/cobalt/bindings/testing/global_constructors_idls_idl_files_list.tmp deleted file mode 100644 index bb7227e..0000000 --- a/src/cobalt/bindings/testing/global_constructors_idls_idl_files_list.tmp +++ /dev/null
@@ -1,46 +0,0 @@ -AnonymousIndexedGetterInterface.idl -AnonymousNamedGetterInterface.idl -AnonymousNamedIndexedGetterInterface.idl -ArbitraryInterface.idl -BaseInterface.idl -BooleanTypeTestInterface.idl -CallbackFunctionInterface.idl -CallbackInterfaceInterface.idl -ConditionalInterface.idl -ConstantsInterface.idl -ConstructorInterface.idl -ConstructorWithArgumentsInterface.idl -DerivedGetterSetterInterface.idl -DerivedInterface.idl -DisabledInterface.idl -DOMStringTestInterface.idl -EnumerationInterface.idl -ExceptionObjectInterface.idl -ExceptionsInterface.idl -ExtendedIDLAttributesInterface.idl -GarbageCollectionTestInterface.idl -GetOpaqueRootInterface.idl -GlobalInterfaceParent.idl -IndexedGetterInterface.idl -InterfaceWithUnsupportedProperties.idl -NamedConstructorInterface.idl -NamedGetterInterface.idl -NamedIndexedGetterInterface.idl -NestedPutForwardsInterface.idl -NoConstructorInterface.idl -NoInterfaceObjectInterface.idl -NullableTypesTestInterface.idl -NumericTypesTestInterface.idl -ObjectTypeBindingsInterface.idl -OperationsTestInterface.idl -PutForwardsInterface.idl -SequenceUser.idl -SingleOperationInterface.idl -StaticPropertiesInterface.idl -StringifierAnonymousOperationInterface.idl -StringifierAttributeInterface.idl -StringifierOperationInterface.idl -TargetInterface.idl -UnionTypesInterface.idl -Window.idl -UnsupportedInterface.idl
diff --git a/src/cobalt/bindings/testing/global_objects_idl_files_list.tmp b/src/cobalt/bindings/testing/global_objects_idl_files_list.tmp deleted file mode 100644 index 3b0f3da..0000000 --- a/src/cobalt/bindings/testing/global_objects_idl_files_list.tmp +++ /dev/null
@@ -1,45 +0,0 @@ -AnonymousIndexedGetterInterface.idl -AnonymousNamedGetterInterface.idl -AnonymousNamedIndexedGetterInterface.idl -ArbitraryInterface.idl -BaseInterface.idl -BooleanTypeTestInterface.idl -CallbackFunctionInterface.idl -CallbackInterfaceInterface.idl -ConditionalInterface.idl -ConstantsInterface.idl -ConstructorInterface.idl -ConstructorWithArgumentsInterface.idl -DerivedGetterSetterInterface.idl -DerivedInterface.idl -DisabledInterface.idl -DOMStringTestInterface.idl -EnumerationInterface.idl -ExceptionObjectInterface.idl -ExceptionsInterface.idl -ExtendedIDLAttributesInterface.idl -GarbageCollectionTestInterface.idl -GetOpaqueRootInterface.idl -GlobalInterfaceParent.idl -IndexedGetterInterface.idl -InterfaceWithUnsupportedProperties.idl -NamedConstructorInterface.idl -NamedGetterInterface.idl -NamedIndexedGetterInterface.idl -NestedPutForwardsInterface.idl -NoConstructorInterface.idl -NoInterfaceObjectInterface.idl -NullableTypesTestInterface.idl -NumericTypesTestInterface.idl -ObjectTypeBindingsInterface.idl -OperationsTestInterface.idl -PutForwardsInterface.idl -SequenceUser.idl -SingleOperationInterface.idl -StaticPropertiesInterface.idl -StringifierAnonymousOperationInterface.idl -StringifierAttributeInterface.idl -StringifierOperationInterface.idl -TargetInterface.idl -UnionTypesInterface.idl -Window.idl
diff --git a/src/cobalt/bindings/testing/interfaces_info_individual_static_idl_files_list.tmp b/src/cobalt/bindings/testing/interfaces_info_individual_static_idl_files_list.tmp deleted file mode 100644 index ea6cdb9..0000000 --- a/src/cobalt/bindings/testing/interfaces_info_individual_static_idl_files_list.tmp +++ /dev/null
@@ -1,49 +0,0 @@ -AnonymousIndexedGetterInterface.idl -AnonymousNamedGetterInterface.idl -AnonymousNamedIndexedGetterInterface.idl -ArbitraryInterface.idl -BaseInterface.idl -BooleanTypeTestInterface.idl -CallbackFunctionInterface.idl -CallbackInterfaceInterface.idl -ConditionalInterface.idl -ConstantsInterface.idl -ConstructorInterface.idl -ConstructorWithArgumentsInterface.idl -DerivedGetterSetterInterface.idl -DerivedInterface.idl -DisabledInterface.idl -DOMStringTestInterface.idl -EnumerationInterface.idl -ExceptionObjectInterface.idl -ExceptionsInterface.idl -ExtendedIDLAttributesInterface.idl -GarbageCollectionTestInterface.idl -GetOpaqueRootInterface.idl -GlobalInterfaceParent.idl -IndexedGetterInterface.idl -InterfaceWithUnsupportedProperties.idl -NamedConstructorInterface.idl -NamedGetterInterface.idl -NamedIndexedGetterInterface.idl -NestedPutForwardsInterface.idl -NoConstructorInterface.idl -NoInterfaceObjectInterface.idl -NullableTypesTestInterface.idl -NumericTypesTestInterface.idl -ObjectTypeBindingsInterface.idl -OperationsTestInterface.idl -PutForwardsInterface.idl -SequenceUser.idl -SingleOperationInterface.idl -StaticPropertiesInterface.idl -StringifierAnonymousOperationInterface.idl -StringifierAttributeInterface.idl -StringifierOperationInterface.idl -TargetInterface.idl -UnionTypesInterface.idl -Window.idl -ImplementedInterface.idl -PartialInterface.idl -InterfaceWithUnsupportedProperties_partial.idl -UnsupportedInterface.idl
diff --git a/src/cobalt/browser/application.cc b/src/cobalt/browser/application.cc index 765ee14..0f6eb18 100644 --- a/src/cobalt/browser/application.cc +++ b/src/cobalt/browser/application.cc
@@ -260,7 +260,9 @@ const char kYouTubeTvLocationPolicy[] = "h5vcc-location-src " "https://www.youtube.com/tv " + "https://www.youtube.com/tv/ " "https://web-release-qa.youtube.com/tv " + "https://web-release-qa.youtube.com/tv/ " #if defined(ENABLE_ABOUT_SCHEME) "about: " #endif
diff --git a/src/cobalt/browser/browser.gyp b/src/cobalt/browser/browser.gyp index c544756..755d85f 100644 --- a/src/cobalt/browser/browser.gyp +++ b/src/cobalt/browser/browser.gyp
@@ -58,6 +58,7 @@ 'COBALT_IMAGE_CACHE_SIZE_IN_BYTES=<(image_cache_size_in_bytes)', 'COBALT_REMOTE_TYPEFACE_CACHE_SIZE_IN_BYTES=<(remote_typeface_cache_size_in_bytes)', 'COBALT_IMAGE_CACHE_CAPACITY_MULTIPLIER_WHEN_PLAYING_VIDEO=<(image_cache_capacity_multiplier_when_playing_video)', + 'COBALT_MESH_CACHE_SIZE_IN_BYTES=<(mesh_cache_size_in_bytes)', ], 'dependencies': [ '<(DEPTH)/cobalt/accessibility/accessibility.gyp:accessibility',
diff --git a/src/cobalt/browser/browser_bindings.gyp b/src/cobalt/browser/browser_bindings.gyp index 5d6e627..802b803 100644 --- a/src/cobalt/browser/browser_bindings.gyp +++ b/src/cobalt/browser/browser_bindings.gyp
@@ -163,6 +163,7 @@ '../h5vcc/H5vccSettings.idl', '../h5vcc/H5vccStorage.idl', '../h5vcc/H5vccSystem.idl', + '../h5vcc/H5vccTraceEvent.idl', '../speech/SpeechRecognition.idl', '../speech/SpeechRecognitionAlternative.idl',
diff --git a/src/cobalt/browser/browser_module.cc b/src/cobalt/browser/browser_module.cc index d14f425..1bcdc3c 100644 --- a/src/cobalt/browser/browser_module.cc +++ b/src/cobalt/browser/browser_module.cc
@@ -514,7 +514,7 @@ } #if defined(ENABLE_DEBUG_CONSOLE) - trace_manager.OnKeyEventProduced(); + trace_manager_.OnKeyEventProduced(); #endif // defined(ENABLE_DEBUG_CONSOLE) InjectKeyEventToMainWebModule(event); @@ -642,6 +642,9 @@ FROM_HERE, base::Bind(&base::WaitableEvent::Signal, base::Unretained(&got_window_driver))); got_window_driver.Wait(); + // This log is relied on by the webdriver benchmark tests, so it shouldn't be + // changed unless the corresponding benchmark logic is changed as well. + LOG(INFO) << "Created WindowDriver: ID=" << window_id.id(); DCHECK(window_driver); return window_driver.Pass(); }
diff --git a/src/cobalt/browser/browser_module.h b/src/cobalt/browser/browser_module.h index 82322b3..e275d55 100644 --- a/src/cobalt/browser/browser_module.h +++ b/src/cobalt/browser/browser_module.h
@@ -299,7 +299,7 @@ // Manages a second web module to implement the debug console. scoped_ptr<DebugConsole> debug_console_; - TraceManager trace_manager; + TraceManager trace_manager_; // Command handler object for toggling the input fuzzer on/off. base::ConsoleCommandManager::CommandHandler fuzzer_toggle_command_handler_;
diff --git a/src/cobalt/browser/debug_console/debug_console.js b/src/cobalt/browser/debug_console/debug_console.js index 7c2f8a5..6f56962 100644 --- a/src/cobalt/browser/debug_console/debug_console.js +++ b/src/cobalt/browser/debug_console/debug_console.js
@@ -32,6 +32,44 @@ // Number of animation frame samples since the last update. var animationFrameSamples = 0; +// Map of 'Unidentified' additional Cobalt keyCodes to equivalent keys. +var unidentifiedCobaltKeyMap = { + // kSbKeyGamepad1 + 0x8000: 'Enter', + // kSbKeyGamepad2 + 0x8001: 'Esc', + // kSbKeyGamepad3 + 0x8002: 'Home', + // kSbKeyGamepad5 + 0x8008: 'Enter', + // kSbKeyGamepad6 + 0x8009: 'Enter', + // kSbKeyGamepadDPadUp + 0x800C: 'ArrowUp', + // kSbKeyGamepadDPadDown + 0x800D: 'ArrowDown', + // kSbKeyGamepadDPadLeft + 0x800E: 'ArrowLeft', + // kSbKeyGamepadDPadRight + 0x800F: 'ArrowRight', + // kSbKeyGamepadLeftStickUp + 0x8011: 'ArrowUp', + // kSbKeyGamepadLeftStickDown + 0x8012: 'ArrowDown', + // kSbKeyGamepadLeftStickLeft + 0x8013: 'ArrowLeft', + // kSbKeyGamepadLeftStickRight + 0x8014: 'ArrowRight', + // kSbKeyGamepadRightStickUp + 0x8015: 'ArrowUp', + // kSbKeyGamepadRightStickDown + 0x8016: 'ArrowDown', + // kSbKeyGamepadRightStickLeft + 0x8017: 'ArrowLeft', + // kSbKeyGamepadRightStickRight + 0x8018: 'ArrowRight' +}; + function createMessageLog() { var messageContainer = document.getElementById('messageContainer'); messageLog = new MessageLog(messageContainer); @@ -195,6 +233,10 @@ function onKeydown(event) { var key = event.key; + if (key == 'Unidentified') { + key = unidentifiedCobaltKeyMap[event.keyCode] || 'Unidentified'; + } + if (key == 'ArrowLeft') { commandInput.moveCursor(-1); } else if (key == 'ArrowRight') {
diff --git a/src/cobalt/browser/global_constructors_idls_idl_files_list.tmp b/src/cobalt/browser/global_constructors_idls_idl_files_list.tmp deleted file mode 100644 index b50619f..0000000 --- a/src/cobalt/browser/global_constructors_idls_idl_files_list.tmp +++ /dev/null
@@ -1,149 +0,0 @@ -../audio/AudioBuffer.idl -../audio/AudioBufferSourceNode.idl -../audio/AudioContext.idl -../audio/AudioDestinationNode.idl -../audio/AudioNode.idl -../cssom/CSS.idl -../cssom/CSSConditionRule.idl -../cssom/CSSGroupingRule.idl -../cssom/CSSFontFaceRule.idl -../cssom/CSSMediaRule.idl -../cssom/CSSKeyframeRule.idl -../cssom/CSSKeyframesRule.idl -../cssom/CSSRule.idl -../cssom/CSSRuleList.idl -../cssom/CSSStyleDeclaration.idl -../cssom/CSSStyleRule.idl -../cssom/CSSStyleSheet.idl -../cssom/MediaList.idl -../cssom/StyleSheet.idl -../cssom/StyleSheetList.idl -../debug/DebugHub.idl -../debug/Debugger.idl -../debug/DebuggerEventTarget.idl -../debug/DebugScriptRunner.idl -../dom/AnimationEvent.idl -../dom/ArrayBuffer.idl -../dom/ArrayBufferView.idl -../dom/Attr.idl -../dom/Blob.idl -../dom/CDATASection.idl -../dom/CharacterData.idl -../dom/Comment.idl -../dom/Console.idl -../dom/Crypto.idl -../dom/DataView.idl -../dom/Document.idl -../dom/DocumentTimeline.idl -../dom/DocumentType.idl -../dom/DOMException.idl -../dom/DOMImplementation.idl -../dom/DOMParser.idl -../dom/DOMRect.idl -../dom/DOMRectList.idl -../dom/DOMRectReadOnly.idl -../dom/DOMStringMap.idl -../dom/DOMTokenList.idl -../dom/Element.idl -../dom/Event.idl -../dom/EventListener.idl -../dom/EventTarget.idl -../dom/Float32Array.idl -../dom/Float64Array.idl -../dom/FocusEvent.idl -../dom/History.idl -../dom/HTMLAnchorElement.idl -../dom/HTMLBodyElement.idl -../dom/HTMLBRElement.idl -../dom/HTMLCollection.idl -../dom/HTMLDivElement.idl -../dom/HTMLElement.idl -../dom/HTMLHeadElement.idl -../dom/HTMLHeadingElement.idl -../dom/HTMLHtmlElement.idl -../dom/HTMLImageElement.idl -../dom/HTMLLinkElement.idl -../dom/HTMLMediaElement.idl -../dom/HTMLMetaElement.idl -../dom/HTMLParagraphElement.idl -../dom/HTMLScriptElement.idl -../dom/HTMLSpanElement.idl -../dom/HTMLStyleElement.idl -../dom/HTMLTitleElement.idl -../dom/HTMLUnknownElement.idl -../dom/HTMLVideoElement.idl -../dom/KeyboardEvent.idl -../dom/Location.idl -../dom/MediaError.idl -../dom/MediaKeyCompleteEvent.idl -../dom/MediaKeyError.idl -../dom/MediaKeyErrorEvent.idl -../dom/MediaKeyMessageEvent.idl -../dom/MediaKeyNeededEvent.idl -../dom/MediaQueryList.idl -../dom/MediaSource.idl -../dom/MemoryInfo.idl -../dom/MimeTypeArray.idl -../dom/NamedNodeMap.idl -../dom/Navigator.idl -../dom/Node.idl -../dom/NodeList.idl -../dom/Performance.idl -../dom/PerformanceTiming.idl -../dom/PluginArray.idl -../dom/ProgressEvent.idl -../dom/Screen.idl -../dom/SecurityPolicyViolationEvent.idl -../dom/SourceBuffer.idl -../dom/SourceBufferList.idl -../dom/Storage.idl -../dom/StorageEvent.idl -../dom/TestRunner.idl -../dom/Text.idl -../dom/TimeRanges.idl -../dom/TransitionEvent.idl -../dom/UIEvent.idl -../dom/Uint16Array.idl -../dom/Uint32Array.idl -../dom/Uint8Array.idl -../dom/URL.idl -../dom/VideoPlaybackQuality.idl -../dom/Window.idl -../dom/XMLDocument.idl -../dom/XMLSerializer.idl -../h5vcc/dial/DialHttpRequest.idl -../h5vcc/dial/DialHttpResponse.idl -../h5vcc/dial/DialServer.idl -../h5vcc/H5vcc.idl -../h5vcc/H5vccAccountInfo.idl -../h5vcc/H5vccAccountManager.idl -../h5vcc/H5vccAudioConfig.idl -../h5vcc/H5vccAudioConfigArray.idl -../h5vcc/H5vccCVal.idl -../h5vcc/H5vccCValKeyList.idl -../h5vcc/H5vccDeepLinkEventTarget.idl -../h5vcc/H5vccRuntime.idl -../h5vcc/H5vccRuntimeEventTarget.idl -../h5vcc/H5vccSettings.idl -../h5vcc/H5vccStorage.idl -../h5vcc/H5vccSystem.idl -../speech/SpeechRecognition.idl -../speech/SpeechRecognitionAlternative.idl -../speech/SpeechRecognitionError.idl -../speech/SpeechRecognitionEvent.idl -../speech/SpeechRecognitionResult.idl -../speech/SpeechRecognitionResultList.idl -../web_animations/Animatable.idl -../web_animations/Animation.idl -../web_animations/AnimationEffectReadOnly.idl -../web_animations/AnimationEffectTimingReadOnly.idl -../web_animations/AnimationTimeline.idl -../web_animations/Keyframe.idl -../web_animations/KeyframeEffectReadOnly.idl -../webdriver/ScriptExecutor.idl -../webdriver/ScriptExecutorParams.idl -../webdriver/ScriptExecutorResult.idl -../websocket/WebSocket.idl -../xhr/XMLHttpRequest.idl -../xhr/XMLHttpRequestEventTarget.idl -../xhr/XMLHttpRequestUpload.idl
diff --git a/src/cobalt/browser/global_objects_idl_files_list.tmp b/src/cobalt/browser/global_objects_idl_files_list.tmp deleted file mode 100644 index b50619f..0000000 --- a/src/cobalt/browser/global_objects_idl_files_list.tmp +++ /dev/null
@@ -1,149 +0,0 @@ -../audio/AudioBuffer.idl -../audio/AudioBufferSourceNode.idl -../audio/AudioContext.idl -../audio/AudioDestinationNode.idl -../audio/AudioNode.idl -../cssom/CSS.idl -../cssom/CSSConditionRule.idl -../cssom/CSSGroupingRule.idl -../cssom/CSSFontFaceRule.idl -../cssom/CSSMediaRule.idl -../cssom/CSSKeyframeRule.idl -../cssom/CSSKeyframesRule.idl -../cssom/CSSRule.idl -../cssom/CSSRuleList.idl -../cssom/CSSStyleDeclaration.idl -../cssom/CSSStyleRule.idl -../cssom/CSSStyleSheet.idl -../cssom/MediaList.idl -../cssom/StyleSheet.idl -../cssom/StyleSheetList.idl -../debug/DebugHub.idl -../debug/Debugger.idl -../debug/DebuggerEventTarget.idl -../debug/DebugScriptRunner.idl -../dom/AnimationEvent.idl -../dom/ArrayBuffer.idl -../dom/ArrayBufferView.idl -../dom/Attr.idl -../dom/Blob.idl -../dom/CDATASection.idl -../dom/CharacterData.idl -../dom/Comment.idl -../dom/Console.idl -../dom/Crypto.idl -../dom/DataView.idl -../dom/Document.idl -../dom/DocumentTimeline.idl -../dom/DocumentType.idl -../dom/DOMException.idl -../dom/DOMImplementation.idl -../dom/DOMParser.idl -../dom/DOMRect.idl -../dom/DOMRectList.idl -../dom/DOMRectReadOnly.idl -../dom/DOMStringMap.idl -../dom/DOMTokenList.idl -../dom/Element.idl -../dom/Event.idl -../dom/EventListener.idl -../dom/EventTarget.idl -../dom/Float32Array.idl -../dom/Float64Array.idl -../dom/FocusEvent.idl -../dom/History.idl -../dom/HTMLAnchorElement.idl -../dom/HTMLBodyElement.idl -../dom/HTMLBRElement.idl -../dom/HTMLCollection.idl -../dom/HTMLDivElement.idl -../dom/HTMLElement.idl -../dom/HTMLHeadElement.idl -../dom/HTMLHeadingElement.idl -../dom/HTMLHtmlElement.idl -../dom/HTMLImageElement.idl -../dom/HTMLLinkElement.idl -../dom/HTMLMediaElement.idl -../dom/HTMLMetaElement.idl -../dom/HTMLParagraphElement.idl -../dom/HTMLScriptElement.idl -../dom/HTMLSpanElement.idl -../dom/HTMLStyleElement.idl -../dom/HTMLTitleElement.idl -../dom/HTMLUnknownElement.idl -../dom/HTMLVideoElement.idl -../dom/KeyboardEvent.idl -../dom/Location.idl -../dom/MediaError.idl -../dom/MediaKeyCompleteEvent.idl -../dom/MediaKeyError.idl -../dom/MediaKeyErrorEvent.idl -../dom/MediaKeyMessageEvent.idl -../dom/MediaKeyNeededEvent.idl -../dom/MediaQueryList.idl -../dom/MediaSource.idl -../dom/MemoryInfo.idl -../dom/MimeTypeArray.idl -../dom/NamedNodeMap.idl -../dom/Navigator.idl -../dom/Node.idl -../dom/NodeList.idl -../dom/Performance.idl -../dom/PerformanceTiming.idl -../dom/PluginArray.idl -../dom/ProgressEvent.idl -../dom/Screen.idl -../dom/SecurityPolicyViolationEvent.idl -../dom/SourceBuffer.idl -../dom/SourceBufferList.idl -../dom/Storage.idl -../dom/StorageEvent.idl -../dom/TestRunner.idl -../dom/Text.idl -../dom/TimeRanges.idl -../dom/TransitionEvent.idl -../dom/UIEvent.idl -../dom/Uint16Array.idl -../dom/Uint32Array.idl -../dom/Uint8Array.idl -../dom/URL.idl -../dom/VideoPlaybackQuality.idl -../dom/Window.idl -../dom/XMLDocument.idl -../dom/XMLSerializer.idl -../h5vcc/dial/DialHttpRequest.idl -../h5vcc/dial/DialHttpResponse.idl -../h5vcc/dial/DialServer.idl -../h5vcc/H5vcc.idl -../h5vcc/H5vccAccountInfo.idl -../h5vcc/H5vccAccountManager.idl -../h5vcc/H5vccAudioConfig.idl -../h5vcc/H5vccAudioConfigArray.idl -../h5vcc/H5vccCVal.idl -../h5vcc/H5vccCValKeyList.idl -../h5vcc/H5vccDeepLinkEventTarget.idl -../h5vcc/H5vccRuntime.idl -../h5vcc/H5vccRuntimeEventTarget.idl -../h5vcc/H5vccSettings.idl -../h5vcc/H5vccStorage.idl -../h5vcc/H5vccSystem.idl -../speech/SpeechRecognition.idl -../speech/SpeechRecognitionAlternative.idl -../speech/SpeechRecognitionError.idl -../speech/SpeechRecognitionEvent.idl -../speech/SpeechRecognitionResult.idl -../speech/SpeechRecognitionResultList.idl -../web_animations/Animatable.idl -../web_animations/Animation.idl -../web_animations/AnimationEffectReadOnly.idl -../web_animations/AnimationEffectTimingReadOnly.idl -../web_animations/AnimationTimeline.idl -../web_animations/Keyframe.idl -../web_animations/KeyframeEffectReadOnly.idl -../webdriver/ScriptExecutor.idl -../webdriver/ScriptExecutorParams.idl -../webdriver/ScriptExecutorResult.idl -../websocket/WebSocket.idl -../xhr/XMLHttpRequest.idl -../xhr/XMLHttpRequestEventTarget.idl -../xhr/XMLHttpRequestUpload.idl
diff --git a/src/cobalt/browser/interfaces_info_individual_static_idl_files_list.tmp b/src/cobalt/browser/interfaces_info_individual_static_idl_files_list.tmp deleted file mode 100644 index a9c6e86..0000000 --- a/src/cobalt/browser/interfaces_info_individual_static_idl_files_list.tmp +++ /dev/null
@@ -1,176 +0,0 @@ -../audio/AudioBuffer.idl -../audio/AudioBufferSourceNode.idl -../audio/AudioContext.idl -../audio/AudioDestinationNode.idl -../audio/AudioNode.idl -../cssom/CSS.idl -../cssom/CSSConditionRule.idl -../cssom/CSSGroupingRule.idl -../cssom/CSSFontFaceRule.idl -../cssom/CSSMediaRule.idl -../cssom/CSSKeyframeRule.idl -../cssom/CSSKeyframesRule.idl -../cssom/CSSRule.idl -../cssom/CSSRuleList.idl -../cssom/CSSStyleDeclaration.idl -../cssom/CSSStyleRule.idl -../cssom/CSSStyleSheet.idl -../cssom/MediaList.idl -../cssom/StyleSheet.idl -../cssom/StyleSheetList.idl -../debug/DebugHub.idl -../debug/Debugger.idl -../debug/DebuggerEventTarget.idl -../debug/DebugScriptRunner.idl -../dom/AnimationEvent.idl -../dom/ArrayBuffer.idl -../dom/ArrayBufferView.idl -../dom/Attr.idl -../dom/Blob.idl -../dom/CDATASection.idl -../dom/CharacterData.idl -../dom/Comment.idl -../dom/Console.idl -../dom/Crypto.idl -../dom/DataView.idl -../dom/Document.idl -../dom/DocumentTimeline.idl -../dom/DocumentType.idl -../dom/DOMException.idl -../dom/DOMImplementation.idl -../dom/DOMParser.idl -../dom/DOMRect.idl -../dom/DOMRectList.idl -../dom/DOMRectReadOnly.idl -../dom/DOMStringMap.idl -../dom/DOMTokenList.idl -../dom/Element.idl -../dom/Event.idl -../dom/EventListener.idl -../dom/EventTarget.idl -../dom/Float32Array.idl -../dom/Float64Array.idl -../dom/FocusEvent.idl -../dom/History.idl -../dom/HTMLAnchorElement.idl -../dom/HTMLBodyElement.idl -../dom/HTMLBRElement.idl -../dom/HTMLCollection.idl -../dom/HTMLDivElement.idl -../dom/HTMLElement.idl -../dom/HTMLHeadElement.idl -../dom/HTMLHeadingElement.idl -../dom/HTMLHtmlElement.idl -../dom/HTMLImageElement.idl -../dom/HTMLLinkElement.idl -../dom/HTMLMediaElement.idl -../dom/HTMLMetaElement.idl -../dom/HTMLParagraphElement.idl -../dom/HTMLScriptElement.idl -../dom/HTMLSpanElement.idl -../dom/HTMLStyleElement.idl -../dom/HTMLTitleElement.idl -../dom/HTMLUnknownElement.idl -../dom/HTMLVideoElement.idl -../dom/KeyboardEvent.idl -../dom/Location.idl -../dom/MediaError.idl -../dom/MediaKeyCompleteEvent.idl -../dom/MediaKeyError.idl -../dom/MediaKeyErrorEvent.idl -../dom/MediaKeyMessageEvent.idl -../dom/MediaKeyNeededEvent.idl -../dom/MediaQueryList.idl -../dom/MediaSource.idl -../dom/MemoryInfo.idl -../dom/MimeTypeArray.idl -../dom/NamedNodeMap.idl -../dom/Navigator.idl -../dom/Node.idl -../dom/NodeList.idl -../dom/Performance.idl -../dom/PerformanceTiming.idl -../dom/PluginArray.idl -../dom/ProgressEvent.idl -../dom/Screen.idl -../dom/SecurityPolicyViolationEvent.idl -../dom/SourceBuffer.idl -../dom/SourceBufferList.idl -../dom/Storage.idl -../dom/StorageEvent.idl -../dom/TestRunner.idl -../dom/Text.idl -../dom/TimeRanges.idl -../dom/TransitionEvent.idl -../dom/UIEvent.idl -../dom/Uint16Array.idl -../dom/Uint32Array.idl -../dom/Uint8Array.idl -../dom/URL.idl -../dom/VideoPlaybackQuality.idl -../dom/Window.idl -../dom/XMLDocument.idl -../dom/XMLSerializer.idl -../h5vcc/dial/DialHttpRequest.idl -../h5vcc/dial/DialHttpResponse.idl -../h5vcc/dial/DialServer.idl -../h5vcc/H5vcc.idl -../h5vcc/H5vccAccountInfo.idl -../h5vcc/H5vccAccountManager.idl -../h5vcc/H5vccAudioConfig.idl -../h5vcc/H5vccAudioConfigArray.idl -../h5vcc/H5vccCVal.idl -../h5vcc/H5vccCValKeyList.idl -../h5vcc/H5vccDeepLinkEventTarget.idl -../h5vcc/H5vccRuntime.idl -../h5vcc/H5vccRuntimeEventTarget.idl -../h5vcc/H5vccSettings.idl -../h5vcc/H5vccStorage.idl -../h5vcc/H5vccSystem.idl -../speech/SpeechRecognition.idl -../speech/SpeechRecognitionAlternative.idl -../speech/SpeechRecognitionError.idl -../speech/SpeechRecognitionEvent.idl -../speech/SpeechRecognitionResult.idl -../speech/SpeechRecognitionResultList.idl -../web_animations/Animatable.idl -../web_animations/Animation.idl -../web_animations/AnimationEffectReadOnly.idl -../web_animations/AnimationEffectTimingReadOnly.idl -../web_animations/AnimationTimeline.idl -../web_animations/Keyframe.idl -../web_animations/KeyframeEffectReadOnly.idl -../webdriver/ScriptExecutor.idl -../webdriver/ScriptExecutorParams.idl -../webdriver/ScriptExecutorResult.idl -../websocket/WebSocket.idl -../xhr/XMLHttpRequest.idl -../xhr/XMLHttpRequestEventTarget.idl -../xhr/XMLHttpRequestUpload.idl -../cssom/LinkStyle.idl -../dom/Document_CSSOM.idl -../dom/Document_HTML5.idl -../dom/Document_WebAnimationsAPI.idl -../dom/Element_CSSOMView.idl -../dom/Element_DOMParsingAndSerialization.idl -../dom/ElementCSSInlineStyle.idl -../dom/GlobalCrypto.idl -../dom/GlobalEventHandlers.idl -../dom/HTMLElement_CSSOMView.idl -../dom/NavigatorID.idl -../dom/NavigatorLanguage.idl -../dom/NavigatorPlugins.idl -../dom/NavigatorStorageUtils.idl -../dom/NonDocumentTypeChildNode.idl -../dom/NonElementParentNode.idl -../dom/ParentNode.idl -../dom/Performance_HighResolutionTime.idl -../dom/URLUtils.idl -../dom/Window_AnimationTiming.idl -../dom/Window_CSSOM.idl -../dom/Window_CSSOMView.idl -../dom/Window_Performance.idl -../dom/WindowEventHandlers.idl -../dom/WindowLocalStorage.idl -../dom/WindowSessionStorage.idl -../dom/WindowTimers.idl
diff --git a/src/cobalt/browser/memory_tracker/memory_tracker_tool_impl.cc b/src/cobalt/browser/memory_tracker/memory_tracker_tool_impl.cc index cc317ea..91b34f3 100644 --- a/src/cobalt/browser/memory_tracker/memory_tracker_tool_impl.cc +++ b/src/cobalt/browser/memory_tracker/memory_tracker_tool_impl.cc
@@ -126,6 +126,24 @@ return s; } +// Removes odd elements and resizes vector. +template <typename VectorType> +void RemoveOddElements(VectorType* v) { + typedef typename VectorType::iterator iterator; + + iterator read_it = v->end(); + iterator write_it = v->end(); + for (size_t i = 0; i*2 < v->size(); ++i) { + write_it = v->begin() + i; + read_it = v->begin() + (i*2); + *write_it = *read_it; + } + if (write_it != v->end()) { + write_it++; + } + v->erase(write_it, v->end()); +} + // NoMemoryTracking will disable memory tracking while in the current scope of // execution. When the object is destroyed it will reset the previous state // of allocation tracking. @@ -191,8 +209,8 @@ } std::string TimeInMinutesString() const { base::TimeDelta delta_t = time_since_start(); - int64 seconds = delta_t.InSeconds(); - float time_mins = static_cast<float>(seconds) / 60.f; + float seconds = static_cast<float>(delta_t.InMilliseconds()) / 1000.0f; + float time_mins = seconds / 60.f; std::stringstream ss; ss << time_mins; @@ -662,7 +680,7 @@ << "// to be used in a stacked graph." << kNewLine; // HEADER. - ss << "Time(mins),"; + ss << kQuote << "Time(mins)" << kQuote << kDelimiter; for (MapIt it = samples.begin(); it != samples.end(); ++it) { const std::string& name = it->first; ss << kQuote << SanitizeCSVKey(name) << kQuote << kDelimiter; @@ -672,7 +690,8 @@ // Print out the values of each of the samples. for (size_t i = 0; i < smallest_sample_size; ++i) { // Output time first so that it can be used as an x-axis. - const double time_mins = timeseries.time_stamps_[i].InSeconds()/60.f; + const double time_mins = + timeseries.time_stamps_[i].InMilliseconds() / (1000. * 60.); ss << time_mins << ","; for (MapIt it = samples.begin(); it != samples.end(); ++it) { const int64 alloc_bytes = it->second.allocated_bytes_[i]; @@ -692,7 +711,7 @@ ss << kNewLine << "// CSV of COUNT of allocations per region." << kNewLine; // HEADER - ss << "Time(mins),"; + ss << kQuote << "Time(mins)" << kQuote << kDelimiter; for (MapIt it = samples.begin(); it != samples.end(); ++it) { const std::string& name = it->first; ss << kQuote << SanitizeCSVKey(name) << kQuote << kDelimiter; @@ -700,7 +719,8 @@ ss << kNewLine; for (size_t i = 0; i < smallest_sample_size; ++i) { // Output time first so that it can be used as an x-axis. - const double time_mins = timeseries.time_stamps_[i].InSeconds() / 60.f; + const double time_mins = + timeseries.time_stamps_[i].InMilliseconds() / (1000. * 60.); ss << time_mins << ","; for (MapIt it = samples.begin(); it != samples.end(); ++it) { const int64 n_allocs = it->second.number_allocations_[i]; @@ -710,6 +730,7 @@ } ss << "// END CSV of COUNT of allocations per region." << kNewLine; ss << "//////////////////////////////////////////////"; + ss << kNewLine; std::string output = ss.str(); return output; @@ -720,6 +741,7 @@ const base::TimeDelta& time_now) { const size_t sample_count = timeseries->time_stamps_.size(); timeseries->time_stamps_.push_back(time_now); + MapAllocationSamples& map_samples = timeseries->samples_; std::vector<const AllocationGroup*> vector_output; @@ -780,11 +802,11 @@ void MemoryTrackerCompressedTimeSeries::Compress(TimeSeries* timeseries) { typedef MapAllocationSamples::iterator MapIt; MapAllocationSamples& samples = timeseries->samples_; - DoCompression(&(timeseries->time_stamps_)); + RemoveOddElements(&(timeseries->time_stamps_)); for (MapIt it = samples.begin(); it != samples.end(); ++it) { AllocationSamples& data = it->second; - DoCompression(&data.allocated_bytes_); - DoCompression(&data.number_allocations_); + RemoveOddElements(&data.allocated_bytes_); + RemoveOddElements(&data.number_allocations_); } }
diff --git a/src/cobalt/browser/trace_manager.h b/src/cobalt/browser/trace_manager.h index 2fc4dc6..8ace7b8 100644 --- a/src/cobalt/browser/trace_manager.h +++ b/src/cobalt/browser/trace_manager.h
@@ -28,6 +28,7 @@ namespace cobalt { namespace browser { +// Wrapper class which wraps all trace related stuff. class TraceManager { public: // Returns whether there's a trace that is active.
diff --git a/src/cobalt/browser/web_module.cc b/src/cobalt/browser/web_module.cc index 572200d..e1ab7dc 100644 --- a/src/cobalt/browser/web_module.cc +++ b/src/cobalt/browser/web_module.cc
@@ -229,6 +229,9 @@ // from URLs. scoped_ptr<loader::font::RemoteTypefaceCache> remote_typeface_cache_; + // MeshCache that is used to manage mesh cache logic. + scoped_ptr<loader::mesh::MeshCache> mesh_cache_; + // Interface between LocalStorage and the Storage Manager. scoped_ptr<dom::LocalStorageDatabase> local_storage_database_; @@ -386,6 +389,13 @@ loader_factory_.get()); DCHECK(remote_typeface_cache_); + DCHECK_LE(0, data.options.mesh_cache_capacity); + mesh_cache_ = loader::mesh::CreateMeshCache( + base::StringPrintf("%s.MeshCache", name_.c_str()), + static_cast<uint32>(data.options.mesh_cache_capacity), + loader_factory_.get()); + DCHECK(mesh_cache_); + local_storage_database_.reset( new dom::LocalStorageDatabase(data.network_module->storage_manager())); DCHECK(local_storage_database_); @@ -420,8 +430,8 @@ css_parser_.get(), dom_parser_.get(), fetcher_factory_.get(), &resource_provider_, image_cache_.get(), reduced_image_cache_capacity_manager_.get(), remote_typeface_cache_.get(), - local_storage_database_.get(), data.media_module, data.media_module, - execution_state_.get(), script_runner_.get(), + mesh_cache_.get(), local_storage_database_.get(), data.media_module, + data.media_module, execution_state_.get(), script_runner_.get(), media_source_registry_.get(), web_module_stat_tracker_->dom_stat_tracker(), data.initial_url, data.network_module->GetUserAgent(), @@ -543,6 +553,7 @@ javascript_engine_.reset(); web_module_stat_tracker_.reset(); local_storage_database_.reset(); + mesh_cache_.reset(); remote_typeface_cache_.reset(); image_cache_.reset(); fetcher_factory_.reset(); @@ -746,6 +757,7 @@ image_cache_capacity(COBALT_IMAGE_CACHE_SIZE_IN_BYTES), remote_typeface_cache_capacity( COBALT_REMOTE_TYPEFACE_CACHE_SIZE_IN_BYTES), + mesh_cache_capacity(COBALT_MESH_CACHE_SIZE_IN_BYTES), csp_enforcement_mode(dom::kCspEnforcementEnable), csp_insecure_allowed_token(0), track_event_stats(false),
diff --git a/src/cobalt/browser/web_module.h b/src/cobalt/browser/web_module.h index 2307e89..dfeb9dc 100644 --- a/src/cobalt/browser/web_module.h +++ b/src/cobalt/browser/web_module.h
@@ -122,12 +122,15 @@ // can't be changed from the whitelisted origins. std::string location_policy; - // Image cache capaticy in bytes. + // Image cache capacity in bytes. int image_cache_capacity; // Typeface cache capacity in bytes. int remote_typeface_cache_capacity; + // Mesh cache capacity in bytes. + int mesh_cache_capacity; + // Content Security Policy enforcement mode for this web module. dom::CspEnforcementType csp_enforcement_mode;
diff --git a/src/cobalt/browser/web_module_stat_tracker.cc b/src/cobalt/browser/web_module_stat_tracker.cc index 06323fa..64b999f 100644 --- a/src/cobalt/browser/web_module_stat_tracker.cc +++ b/src/cobalt/browser/web_module_stat_tracker.cc
@@ -129,6 +129,16 @@ StringPrintf("Event.Count.%s.DOM.HtmlElement.UpdateComputedStyle", name.c_str()), 0, "Number of update computed styles for HTML elements."), + count_dom_generate_html_element_computed_style( + StringPrintf( + "Event.Count.%s.DOM.HtmlElement.GenerateHtmlElementComputedStyle", + name.c_str()), + 0, "Number of generated computed styles for HTML elements."), + count_dom_generate_pseudo_element_computed_style( + StringPrintf("Event.Count.%s.DOM.HtmlElement." + "GeneratePseudoElementComputedStyle", + name.c_str()), + 0, "Number of generated computed styles for Pseudo elements."), count_layout_boxes_created( StringPrintf("Event.Count.%s.Layout.Box.Created", name.c_str()), 0, "Number of boxes created."), @@ -174,6 +184,7 @@ , value_dictionary( StringPrintf("Event.%s.ValueDictionary", name.c_str()), + "{}" "All event values represented as a dictionary in a string.") #endif // ENABLE_WEBDRIVER { @@ -207,6 +218,10 @@ dom_stat_tracker_->update_matching_rules_count(); event_stats->count_dom_update_computed_style = dom_stat_tracker_->update_computed_style_count(); + event_stats->count_dom_generate_html_element_computed_style = + dom_stat_tracker_->generate_html_element_computed_style_count(); + event_stats->count_dom_generate_pseudo_element_computed_style = + dom_stat_tracker_->generate_pseudo_element_computed_style_count(); event_stats->count_layout_boxes_created = layout_stat_tracker_->boxes_created_count(); event_stats->count_layout_boxes_destroyed = @@ -249,10 +264,15 @@ << dom_stat_tracker_->html_elements_created_count() << ", " << "\"CntDomHtmlElementsDestroyed\":" << dom_stat_tracker_->html_elements_destroyed_count() << ", " - << "\"CntDomUpdateMatchingRuleCalls\":" + << "\"CntDomUpdateMatchingRules\":" << dom_stat_tracker_->update_matching_rules_count() << ", " - << "\"CntDomUpdateComputedStyleCalls\":" + << "\"CntDomUpdateComputedStyle\":" << dom_stat_tracker_->update_computed_style_count() << ", " + << "\"CntDomGenerateHtmlComputedStyle\":" + << dom_stat_tracker_->generate_html_element_computed_style_count() << ", " + << "\"CntDomGeneratePseudoComputedStyle\":" + << dom_stat_tracker_->generate_pseudo_element_computed_style_count() + << ", " << "\"CntLayoutBoxes\":" << layout_stat_tracker_->total_boxes() << ", " << "\"CntLayoutBoxesCreated\":" << layout_stat_tracker_->boxes_created_count() << ", "
diff --git a/src/cobalt/browser/web_module_stat_tracker.h b/src/cobalt/browser/web_module_stat_tracker.h index 95efb4a..b4f24e7 100644 --- a/src/cobalt/browser/web_module_stat_tracker.h +++ b/src/cobalt/browser/web_module_stat_tracker.h
@@ -82,6 +82,10 @@ base::CVal<int, base::CValPublic> count_dom_html_elements_destroyed; base::CVal<int, base::CValPublic> count_dom_update_matching_rules; base::CVal<int, base::CValPublic> count_dom_update_computed_style; + base::CVal<int, base::CValPublic> + count_dom_generate_html_element_computed_style; + base::CVal<int, base::CValPublic> + count_dom_generate_pseudo_element_computed_style; base::CVal<int, base::CValPublic> count_layout_boxes_created; base::CVal<int, base::CValPublic> count_layout_boxes_destroyed;
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id index b679c25..255f12e 100644 --- a/src/cobalt/build/build.id +++ b/src/cobalt/build/build.id
@@ -1 +1 @@ -21796 \ No newline at end of file +22891 \ No newline at end of file
diff --git a/src/cobalt/build/config/base.gypi b/src/cobalt/build/config/base.gypi index 9ab623b..8174cbd 100644 --- a/src/cobalt/build/config/base.gypi +++ b/src/cobalt/build/config/base.gypi
@@ -169,6 +169,11 @@ # typefaces downloaded from a web page. 'remote_typeface_cache_size_in_bytes%': 5 * 1024 * 1024, + # Determines the capacity of the mesh cache. Each mesh is held compressed + # in main memory, to be inflated into a GPU buffer when needed for + # projection. Default to 0 and set by platforms that support map-to-mesh. + 'mesh_cache_size_in_bytes%': 0, + # Only relevant if you are using the Blitter API. # Determines the capacity of the software surface cache, which is used to # cache all surfaces that are rendered via a software rasterizer to avoid
diff --git a/src/cobalt/build/generate_data_header.py b/src/cobalt/build/generate_data_header.py index 1bfdff4..322b6b8 100755 --- a/src/cobalt/build/generate_data_header.py +++ b/src/cobalt/build/generate_data_header.py
@@ -28,18 +28,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # - """Convert binary files to source arrays. -This script takes all of the files in a given directory (and all of its -subdirectories) and concatenates them for access at byte arrays in a c++ -header file. +This script takes all of the given input files and directories (and all +subdirectories) and concatenates them for access at byte arrays in a c++ header +file. -The directory to check is specified as the first argument, and the output -header is specified as the second argument. - -The utility function GenerateMap() is also generated to populate a std::map -that maps between filenames and the embedded file. +The utility function GenerateMap() is also generated to populate a std::map that +maps between filenames and the embedded file. All generated symbols will be placed under the user-provided namespace. """ @@ -48,64 +44,85 @@ import sys -def GetVariableNameFromPath(file_path): - # Get rid of non-variable name friendly characters - return file_path.replace('.', '_').replace('/', '_') +class InputFile(object): + """A file with an absolute path and a path that it is relative to.""" + + def __init__(self, path, parent): + self.path = os.path.abspath(path) + self.parent = os.path.abspath(parent) + + def GetRelativePath(self): + return os.path.relpath(self.path, self.parent) + + def GetVariableName(self): + # Get rid of non-variable name friendly characters + return self.GetRelativePath().replace('.', '_').replace('/', '_') -def WriteFileDataToHeader(input_file, output_file): +def WriteFileDataToHeader(filename, output_file): """Concatenates a single file into the output file.""" - with file(input_file, 'rb') as f: + with file(filename, 'rb') as f: file_contents = f.read() - def chunks(l, n): - """ Yield successive n-sized chunks from l.""" + + def Chunks(l, n): + """Yield successive n-sized chunks from l.""" for i in xrange(0, len(l), n): - yield l[i:i+n] + yield l[i:i + n] - output_string = ',\n'.join([', '.join(['0x%02x' % ord(y) for y in x]) - for x in chunks(file_contents, 200)]) - output_file.write('{' + output_string + '};\n\n') + output_string = ',\n'.join([ + ', '.join(['0x%02x' % ord(y) for y in x]) + for x in Chunks(file_contents, 13) + ]) + output_file.write('{\n' + output_string + '\n};\n\n') -def GetFilesToConcatenate(input_directory): - """Get list of files to concatenate. +def GetInputFilesToConcatenate(paths): + """Converts a list of paths into a flattened list of InputFiles. + + If an input path is a directory, it adds an entry for each file in that + subtree, and keeps it relative to the specified directory. + + If an input path is a regular file, it adds an entry for that file, relative + to its immediate parent directory. Args: - input_directory: Directory to search for files. - Returns: - A list of all files that we would like to concatenate relative - to the input directory. + paths: Array of paths to search for files. + Returns: + A list of InputFiles that we would like to concatenate. """ file_list = [] - for dirpath, _, files in os.walk(input_directory): - for input_file in files: - file_list.append( - os.path.relpath( - os.path.join(dirpath, input_file), - input_directory)) + for path in paths: + path = os.path.abspath(path) + if os.path.isdir(path): + for directory, _, files in os.walk(path): + for filename in files: + file_list.append(InputFile(os.path.join(directory, filename), path)) + elif os.path.isfile(path): + file_list.append(InputFile(path, os.path.dirname(path))) + else: + raise '%s is not a file or directory.' % path return file_list -def WriteAllFilesToHeader(input_directory, files, output_file): - """Writes the content of all passed in files to the header file.""" +def WriteAllFilesToHeader(input_files, output_file): + """Writes the content of all passed in InputFiles to the header file.""" - for path in files: - input_file_variable_name = GetVariableNameFromPath(path) + for input_file in input_files: + input_file_variable_name = input_file.GetVariableName() output_file.write('const unsigned char %s[] =\n' % input_file_variable_name) - - WriteFileDataToHeader(os.path.join(input_directory, path), output_file) + WriteFileDataToHeader(input_file.path, output_file) -def GenerateMapFunction(files, output_file): +def GenerateMapFunction(input_files, output_file): """Generate C++ containing a map. Generates a c++ function that populates a map (mapping filenames to the embedded contents.) Args: - files: List of filenames in the map. + input_files: List of InputFiles in the map. output_file: Name of c++ file to write out. """ @@ -114,17 +131,18 @@ 'inline void GenerateMap(GeneratedResourceMap &out_map) {\n') # os.walk gets dirpath, dirnames, filenames; we want just filenames, so [2] - for path in files: + for input_file in input_files: # The lookup key will be the file path relative to the input directory - input_file_variable_name = GetVariableNameFromPath(path) + input_file_variable_name = input_file.GetVariableName() output_file.write(' out_map["%s"] = FileContents(%s, sizeof(%s));\n' % - (path, input_file_variable_name, input_file_variable_name) - ) + (input_file.GetRelativePath(), input_file_variable_name, + input_file_variable_name)) output_file.write('}\n\n') -def main(namespace, input_directory, output_file_name): +def WriteHeader(namespace, output_file_name, files_to_concatenate): + """Writes an embedded resource header to the given output filename.""" output_file = open(output_file_name, 'w') include_guard = '_COBALT_GENERATED_' + namespace.upper() + '_H_' output_file.write('// Copyright 2014 Google Inc. ' @@ -133,22 +151,22 @@ '#ifndef ' + include_guard + '\n' '#define ' + include_guard + '\n\n' '#include \"cobalt/base/generated_resources_types.h\"\n\n' - 'namespace ' + namespace +' {\n') + 'namespace ' + namespace + ' {\n') - files_to_concatenate = GetFilesToConcatenate(input_directory) - WriteAllFilesToHeader(input_directory, - files_to_concatenate, - output_file) + WriteAllFilesToHeader(files_to_concatenate, output_file) GenerateMapFunction(files_to_concatenate, output_file) output_file.write('} // namespace ' + namespace + '\n\n' '#endif // ' + include_guard + '\n') +def main(namespace, output_file_name, paths): + WriteHeader(namespace, output_file_name, GetInputFilesToConcatenate(paths)) + + if __name__ == '__main__': - if len(sys.argv) != 4: - print ('usage:\n %s <namespace> <input directory> <output filepath>' % - sys.argv[0]) + if len(sys.argv) < 4: + print 'usage:\n %s <namespace> <output-file> <inputs...> \n' % sys.argv[0] print __doc__ sys.exit(1) - main(sys.argv[1], sys.argv[2], sys.argv[3]) + main(sys.argv[1], sys.argv[2], sys.argv[3:])
diff --git a/src/cobalt/cssom/compound_selector.h b/src/cobalt/cssom/compound_selector.h index b4e1121..097e2cd 100644 --- a/src/cobalt/cssom/compound_selector.h +++ b/src/cobalt/cssom/compound_selector.h
@@ -117,8 +117,8 @@ Specificity specificity_; bool has_pseudo_element_; // This flag tracks whether or not during rule matching, after the initial - // candidate gathering phase, the simple selectors additional checks during - // the verification phase to determine a match; otherwise, the act of + // candidate gathering phase, the simple selectors require additional checks + // during the verification phase to determine a match; otherwise, the act of // being gathered itself proves the match. // There are two cases where the selectors require a visit: // 1. There are multiple selectors. Gathering only tests against the first
diff --git a/src/cobalt/cssom/cssom.gyp b/src/cobalt/cssom/cssom.gyp index 2d3723e..96cd74d 100644 --- a/src/cobalt/cssom/cssom.gyp +++ b/src/cobalt/cssom/cssom.gyp
@@ -269,7 +269,7 @@ 'outputs': [ '<(output_path)', ], - 'action': ['python', '<(script_path)', 'CSSOMEmbeddedResources', '<(input_directory)', '<(output_path)'], + 'action': ['python', '<(script_path)', 'CSSOMEmbeddedResources', '<(output_path)', '<(input_directory)'], 'message': 'Embedding cssom resources in "<(input_directory)" into header file, "<(output_path)".', 'msvs_cygwin_shell': 1, },
diff --git a/src/cobalt/dom/character_data.cc b/src/cobalt/dom/character_data.cc index 1c031f6..6ffff25 100644 --- a/src/cobalt/dom/character_data.cc +++ b/src/cobalt/dom/character_data.cc
@@ -16,11 +16,19 @@ #include "cobalt/dom/character_data.h" +#include "cobalt/dom/mutation_reporter.h" + namespace cobalt { namespace dom { CharacterData::CharacterData(Document* document, const base::StringPiece& data) : Node(document), data_(data.begin(), data.end()) {} +void CharacterData::set_data(const std::string& data) { + MutationReporter mutation_reporter(this, GatherInclusiveAncestorsObservers()); + mutation_reporter.ReportCharacterDataMutation(data_); + data_ = data; +} + } // namespace dom } // namespace cobalt
diff --git a/src/cobalt/dom/character_data.h b/src/cobalt/dom/character_data.h index 08d5b00..12a8d9d 100644 --- a/src/cobalt/dom/character_data.h +++ b/src/cobalt/dom/character_data.h
@@ -33,19 +33,29 @@ // Web API: Node base::optional<std::string> node_value() const OVERRIDE { return data_; } void set_node_value(const base::optional<std::string>& node_value) OVERRIDE { - data_ = node_value.value_or(""); + // Don't use value_or to avoid copying the string. + if (node_value) { + set_data(node_value.value()); + } else { + set_data(""); + } } base::optional<std::string> text_content() const OVERRIDE { return data_; } void set_text_content( const base::optional<std::string>& text_content) OVERRIDE { - data_ = text_content.value_or(""); + // Don't use value_or to avoid copying the string. + if (text_content) { + set_data(text_content.value()); + } else { + set_data(""); + } } // Web API: CharacterData // std::string data() const { return data_; } - void set_data(const std::string& data) { data_ = data; } + void set_data(const std::string& data); // Custom, not in any spec. //
diff --git a/src/cobalt/dom/comment_test.cc b/src/cobalt/dom/comment_test.cc index 6de330b..71c1c45 100644 --- a/src/cobalt/dom/comment_test.cc +++ b/src/cobalt/dom/comment_test.cc
@@ -42,7 +42,7 @@ CommentTest::CommentTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "") { + NULL, NULL, NULL, NULL, NULL, "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); document_ = new Document(&html_element_context_); }
diff --git a/src/cobalt/dom/document_test.cc b/src/cobalt/dom/document_test.cc index ee0f442..e50c06c 100644 --- a/src/cobalt/dom/document_test.cc +++ b/src/cobalt/dom/document_test.cc
@@ -66,7 +66,7 @@ : css_parser_(css_parser::Parser::Create()), dom_stat_tracker_(new DomStatTracker("DocumentTest")), html_element_context_(NULL, css_parser_.get(), NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); }
diff --git a/src/cobalt/dom/document_type_test.cc b/src/cobalt/dom/document_type_test.cc index 90f51c3..540dc53 100644 --- a/src/cobalt/dom/document_type_test.cc +++ b/src/cobalt/dom/document_type_test.cc
@@ -27,7 +27,7 @@ protected: DocumentTypeTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, ""), + NULL, NULL, NULL, NULL, NULL, ""), document_(new Document(&html_element_context_)) {} ~DocumentTypeTest() OVERRIDE {}
diff --git a/src/cobalt/dom/dom.gyp b/src/cobalt/dom/dom.gyp index 02775e4..3d2a9e9 100644 --- a/src/cobalt/dom/dom.gyp +++ b/src/cobalt/dom/dom.gyp
@@ -179,10 +179,15 @@ 'memory_info.h', 'mime_type_array.cc', 'mime_type_array.h', + 'mutation_observer_task_manager.cc', + 'mutation_observer_task_manager.h', 'mutation_observer.cc', 'mutation_observer.h', 'mutation_observer_init.h', + 'mutation_record.cc', 'mutation_record.h', + 'mutation_reporter.cc', + 'mutation_reporter.h', 'named_node_map.cc', 'named_node_map.h', 'navigator.cc', @@ -206,6 +211,9 @@ 'progress_event.h', 'pseudo_element.cc', 'pseudo_element.h', + 'registered_observer.h', + 'registered_observer_list.cc', + 'registered_observer_list.h', 'rule_matching.cc', 'rule_matching.h', 'screen.h',
diff --git a/src/cobalt/dom/dom_implementation_test.cc b/src/cobalt/dom/dom_implementation_test.cc index a9687aa..ff137ed 100644 --- a/src/cobalt/dom/dom_implementation_test.cc +++ b/src/cobalt/dom/dom_implementation_test.cc
@@ -28,7 +28,7 @@ TEST(DOMImplementationTest, CreateDocumentShouldCreateXMLDocument) { HTMLElementContext html_element_context(NULL, NULL, 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 =
diff --git a/src/cobalt/dom/dom_parser_test.cc b/src/cobalt/dom/dom_parser_test.cc index 0e5cde6..fe037e1 100644 --- a/src/cobalt/dom/dom_parser_test.cc +++ b/src/cobalt/dom/dom_parser_test.cc
@@ -50,8 +50,8 @@ &stub_script_runner_, NULL /* media_source_registry */, NULL /* resource_provider */, NULL /* image_cache */, NULL /* reduced_image_cache_capacity_manager */, - NULL /* remote_typeface_cache */, NULL /* dom_stat_tracker */, - "" /* language */), + NULL /* remote_typeface_cache */, NULL /* mesh_cache */, + NULL /* dom_stat_tracker */, "" /* language */), dom_parser_(new DOMParser(&html_element_context_)) {} TEST_F(DOMParserTest, ParsesXML) {
diff --git a/src/cobalt/dom/dom_stat_tracker.cc b/src/cobalt/dom/dom_stat_tracker.cc index 81ad1a8..83dcd38 100644 --- a/src/cobalt/dom/dom_stat_tracker.cc +++ b/src/cobalt/dom/dom_stat_tracker.cc
@@ -34,7 +34,9 @@ html_elements_created_count_(0), html_elements_destroyed_count_(0), update_matching_rules_count_(0), - update_computed_style_count_(0) { + update_computed_style_count_(0), + generate_html_element_computed_style_count_(0), + generate_pseudo_element_computed_style_count_(0) { stop_watch_durations_.resize(kNumStopWatchTypes, base::TimeDelta()); } @@ -94,6 +96,14 @@ void DomStatTracker::OnUpdateComputedStyle() { ++update_computed_style_count_; } +void DomStatTracker::OnGenerateHtmlElementComputedStyle() { + ++generate_html_element_computed_style_count_; +} + +void DomStatTracker::OnGeneratePseudoElementComputedStyle() { + ++generate_pseudo_element_computed_style_count_; +} + base::TimeDelta DomStatTracker::GetStopWatchTypeDuration( StopWatchType type) const { return stop_watch_durations_[type]; @@ -117,6 +127,8 @@ html_elements_destroyed_count_ = 0; update_matching_rules_count_ = 0; update_computed_style_count_ = 0; + generate_html_element_computed_style_count_ = 0; + generate_pseudo_element_computed_style_count_ = 0; } } // namespace dom
diff --git a/src/cobalt/dom/dom_stat_tracker.h b/src/cobalt/dom/dom_stat_tracker.h index 80e1208..23d8bcd 100644 --- a/src/cobalt/dom/dom_stat_tracker.h +++ b/src/cobalt/dom/dom_stat_tracker.h
@@ -49,6 +49,8 @@ void OnHtmlElementDestroyed(); void OnUpdateMatchingRules(); void OnUpdateComputedStyle(); + void OnGenerateHtmlElementComputedStyle(); + void OnGeneratePseudoElementComputedStyle(); int total_html_elements() const { return total_html_elements_; } @@ -64,6 +66,12 @@ int update_computed_style_count() const { return update_computed_style_count_; } + int generate_html_element_computed_style_count() const { + return generate_html_element_computed_style_count_; + } + int generate_pseudo_element_computed_style_count() const { + return generate_pseudo_element_computed_style_count_; + } base::TimeDelta GetStopWatchTypeDuration(StopWatchType type) const; @@ -92,6 +100,8 @@ int html_elements_destroyed_count_; int update_matching_rules_count_; int update_computed_style_count_; + int generate_html_element_computed_style_count_; + int generate_pseudo_element_computed_style_count_; // Stop watch-related. std::vector<base::TimeDelta> stop_watch_durations_;
diff --git a/src/cobalt/dom/dom_string_map_test.cc b/src/cobalt/dom/dom_string_map_test.cc index d9c5521..365c9a8 100644 --- a/src/cobalt/dom/dom_string_map_test.cc +++ b/src/cobalt/dom/dom_string_map_test.cc
@@ -45,7 +45,7 @@ DOMStringMapTest::DOMStringMapTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, ""), + NULL, NULL, NULL, NULL, NULL, ""), document_(new Document(&html_element_context_)), element_(new Element(document_, base::Token("element"))), dom_string_map_(new DOMStringMap(element_)) {}
diff --git a/src/cobalt/dom/dom_test.gyp b/src/cobalt/dom/dom_test.gyp index 9bbd53a..a80be3f 100644 --- a/src/cobalt/dom/dom_test.gyp +++ b/src/cobalt/dom/dom_test.gyp
@@ -49,6 +49,7 @@ 'local_storage_database_test.cc', 'location_test.cc', 'media_query_list_test.cc', + 'mutation_observer_test.cc', 'node_dispatch_event_test.cc', 'node_list_live_test.cc', 'node_list_test.cc',
diff --git a/src/cobalt/dom/dom_token_list_test.cc b/src/cobalt/dom/dom_token_list_test.cc index 0ef5e3e..70e224c 100644 --- a/src/cobalt/dom/dom_token_list_test.cc +++ b/src/cobalt/dom/dom_token_list_test.cc
@@ -40,7 +40,7 @@ DOMTokenListTest::DOMTokenListTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "") { + NULL, NULL, NULL, NULL, NULL, "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); document_ = new Document(&html_element_context_); }
diff --git a/src/cobalt/dom/element.cc b/src/cobalt/dom/element.cc index 7300b67..8eddb53 100644 --- a/src/cobalt/dom/element.cc +++ b/src/cobalt/dom/element.cc
@@ -32,6 +32,7 @@ #include "cobalt/dom/html_collection.h" #include "cobalt/dom/html_element.h" #include "cobalt/dom/html_element_context.h" +#include "cobalt/dom/mutation_reporter.h" #include "cobalt/dom/named_node_map.h" #include "cobalt/dom/parser.h" #include "cobalt/dom/serializer.h" @@ -187,6 +188,11 @@ // value is value, and then append this attribute to the context object and // terminate these steps. // 5. Change attribute from context object to value. + + base::optional<std::string> old_value = GetAttribute(attr_name); + MutationReporter mutation_reporter(this, GatherInclusiveAncestorsObservers()); + mutation_reporter.ReportAttributesMutation(attr_name, old_value); + switch (attr_name.size()) { case 5: if (attr_name == kStyleAttributeName) { @@ -252,6 +258,13 @@ StringToLowerASCII(&attr_name); } + base::optional<std::string> old_value = GetAttribute(attr_name); + if (old_value) { + MutationReporter mutation_reporter(this, + GatherInclusiveAncestorsObservers()); + mutation_reporter.ReportAttributesMutation(attr_name, old_value); + } + // 2. Remove the first attribute from the context object whose name is name, // if any. switch (attr_name.size()) {
diff --git a/src/cobalt/dom/element_test.cc b/src/cobalt/dom/element_test.cc index c8b5ea9..d4a3724 100644 --- a/src/cobalt/dom/element_test.cc +++ b/src/cobalt/dom/element_test.cc
@@ -61,7 +61,7 @@ dom_parser_(new dom_parser::Parser()), dom_stat_tracker_(new DomStatTracker("ElementTest")), html_element_context_(NULL, css_parser_.get(), dom_parser_.get(), NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); document_ = new Document(&html_element_context_);
diff --git a/src/cobalt/dom/html_element.cc b/src/cobalt/dom/html_element.cc index b3ea234..9123ffb 100644 --- a/src/cobalt/dom/html_element.cc +++ b/src/cobalt/dom/html_element.cc
@@ -956,6 +956,7 @@ UpdateComputedStyleInvalidationFlags invalidation_flags; if (generate_computed_style) { + dom_stat_tracker_->OnGenerateHtmlElementComputedStyle(); bool animations_modified = false; scoped_refptr<cssom::CSSComputedStyleData> new_computed_style = @@ -982,7 +983,7 @@ css_computed_style_declaration_->UpdateInheritedData(); } - // NOTE: Currently, pseudo elements computed styles are always generated. If + // NOTE: Currently, pseudo element's computed styles are always generated. If // this becomes a performance bottleneck, change the logic so that it only // occurs when needed. @@ -990,6 +991,7 @@ for (int pseudo_element_type = 0; pseudo_element_type < kMaxPseudoElementType; ++pseudo_element_type) { if (pseudo_elements_[pseudo_element_type]) { + dom_stat_tracker_->OnGeneratePseudoElementComputedStyle(); bool animations_modified = false; scoped_refptr<cssom::CSSComputedStyleData> pseudo_element_computed_style =
diff --git a/src/cobalt/dom/html_element_context.cc b/src/cobalt/dom/html_element_context.cc index c7a9975..e3888d3 100644 --- a/src/cobalt/dom/html_element_context.cc +++ b/src/cobalt/dom/html_element_context.cc
@@ -32,7 +32,8 @@ loader::image::ReducedCacheCapacityManager* reduced_image_cache_capacity_manager, loader::font::RemoteTypefaceCache* remote_typeface_cache, - DomStatTracker* dom_stat_tracker, const std::string& language) + loader::mesh::MeshCache* mesh_cache, DomStatTracker* dom_stat_tracker, + const std::string& language) : fetcher_factory_(fetcher_factory), css_parser_(css_parser), dom_parser_(dom_parser), @@ -45,6 +46,7 @@ reduced_image_cache_capacity_manager_( reduced_image_cache_capacity_manager), remote_typeface_cache_(remote_typeface_cache), + mesh_cache_(mesh_cache), dom_stat_tracker_(dom_stat_tracker), language_(language), sync_load_thread_("Synchronous Load"),
diff --git a/src/cobalt/dom/html_element_context.h b/src/cobalt/dom/html_element_context.h index a751b03..4c0f933 100644 --- a/src/cobalt/dom/html_element_context.h +++ b/src/cobalt/dom/html_element_context.h
@@ -28,6 +28,7 @@ #include "cobalt/loader/fetcher_factory.h" #include "cobalt/loader/font/remote_typeface_cache.h" #include "cobalt/loader/image/image_cache.h" +#include "cobalt/loader/mesh/mesh_cache.h" #include "cobalt/media/can_play_type_handler.h" #include "cobalt/media/web_media_player_factory.h" #include "cobalt/script/script_runner.h" @@ -53,6 +54,7 @@ loader::image::ReducedCacheCapacityManager* reduced_image_cache_capacity_manager, loader::font::RemoteTypefaceCache* remote_typeface_cache, + loader::mesh::MeshCache* mesh_cache, DomStatTracker* dom_stat_tracker, const std::string& language); ~HTMLElementContext(); @@ -85,6 +87,8 @@ return remote_typeface_cache_; } + loader::mesh::MeshCache* mesh_cache() const { return mesh_cache_; } + DomStatTracker* dom_stat_tracker() { return dom_stat_tracker_; } const std::string& language() const { return language_; } @@ -113,6 +117,7 @@ loader::image::ReducedCacheCapacityManager* const reduced_image_cache_capacity_manager_; loader::font::RemoteTypefaceCache* const remote_typeface_cache_; + loader::mesh::MeshCache* const mesh_cache_; DomStatTracker* const dom_stat_tracker_; const std::string language_;
diff --git a/src/cobalt/dom/html_element_factory_test.cc b/src/cobalt/dom/html_element_factory_test.cc index 2f0c00c..c1485fb 100644 --- a/src/cobalt/dom/html_element_factory_test.cc +++ b/src/cobalt/dom/html_element_factory_test.cc
@@ -60,8 +60,8 @@ NULL /* media_source_registry */, NULL /* resource_provider */, NULL /* image_cache */, NULL /* reduced_image_cache_capacity_manager */, - NULL /* remote_typeface_cache */, dom_stat_tracker_.get(), - "" /* language */), + NULL /* remote_typeface_cache */, NULL /* mesh_cache */, + dom_stat_tracker_.get(), "" /* language */), document_(new Document(&html_element_context_)) {} ~HTMLElementFactoryTest() OVERRIDE {}
diff --git a/src/cobalt/dom/html_element_test.cc b/src/cobalt/dom/html_element_test.cc index e445dcb..2178549 100644 --- a/src/cobalt/dom/html_element_test.cc +++ b/src/cobalt/dom/html_element_test.cc
@@ -110,8 +110,8 @@ HTMLElementTest() : dom_stat_tracker_(new DomStatTracker("HTMLElementTest")), html_element_context_(NULL, &css_parser_, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), - ""), + NULL, NULL, NULL, NULL, NULL, + dom_stat_tracker_.get(), ""), document_(new Document(&html_element_context_)) {} ~HTMLElementTest() OVERRIDE {}
diff --git a/src/cobalt/dom/location.cc b/src/cobalt/dom/location.cc index 9886f33..7202a3fd 100644 --- a/src/cobalt/dom/location.cc +++ b/src/cobalt/dom/location.cc
@@ -83,5 +83,12 @@ } } +void Location::Reload() { + if (!navigation_callback_.is_null()) { + LOG(INFO) << "Reloading URL: " << url(); + navigation_callback_.Run(url()); + } +} + } // namespace dom } // namespace cobalt
diff --git a/src/cobalt/dom/location.h b/src/cobalt/dom/location.h index d9552ca..1b3aa76 100644 --- a/src/cobalt/dom/location.h +++ b/src/cobalt/dom/location.h
@@ -49,11 +49,7 @@ void Replace(const std::string& url); - void Reload() { - if (!navigation_callback_.is_null()) { - navigation_callback_.Run(url()); - } - } + void Reload(); // Web API: URLUtils (implements) //
diff --git a/src/cobalt/dom/mutation_observer.cc b/src/cobalt/dom/mutation_observer.cc index 3cfa7a0..04057a8 100644 --- a/src/cobalt/dom/mutation_observer.cc +++ b/src/cobalt/dom/mutation_observer.cc
@@ -16,12 +16,15 @@ #include "cobalt/dom/mutation_observer.h" +#include "cobalt/dom/mutation_observer_task_manager.h" +#include "cobalt/dom/node.h" + namespace cobalt { namespace dom { // Abstract base class for a MutationCallback. class MutationObserver::CallbackInternal { public: - virtual void RunCallback(const MutationRecordSequence& mutations, + virtual bool RunCallback(const MutationRecordSequence& mutations, const scoped_refptr<MutationObserver>& observer) = 0; virtual ~CallbackInternal() {} }; @@ -33,9 +36,11 @@ ScriptCallback(const MutationObserver::MutationCallbackArg& callback, MutationObserver* owner) : callback_(owner, callback) {} - void RunCallback(const MutationObserver::MutationRecordSequence& mutations, + bool RunCallback(const MutationObserver::MutationRecordSequence& mutations, const scoped_refptr<MutationObserver>& observer) OVERRIDE { - callback_.value().Run(mutations, observer); + script::CallbackResult<void> result = + callback_.value().Run(mutations, observer); + return !result.exception; } private: @@ -48,37 +53,114 @@ explicit NativeCallback( const MutationObserver::NativeMutationCallback& callback) : callback_(callback) {} - void RunCallback(const MutationObserver::MutationRecordSequence& mutations, + bool RunCallback(const MutationObserver::MutationRecordSequence& mutations, const scoped_refptr<MutationObserver>& observer) OVERRIDE { callback_.Run(mutations, observer); + return true; } private: MutationObserver::NativeMutationCallback callback_; }; + } // namespace MutationObserver::MutationObserver( - const NativeMutationCallback& native_callback) { + const NativeMutationCallback& native_callback, + MutationObserverTaskManager* task_manager) + : task_manager_(task_manager) { callback_.reset(new NativeCallback(native_callback)); + task_manager_->OnMutationObserverCreated(this); } -MutationObserver::MutationObserver(const MutationCallbackArg& callback) { +MutationObserver::MutationObserver(const MutationCallbackArg& callback, + MutationObserverTaskManager* task_manager) + : task_manager_(task_manager) { callback_.reset(new ScriptCallback(callback, this)); + task_manager_->OnMutationObserverCreated(this); +} + +MutationObserver::~MutationObserver() { + task_manager_->OnMutationObserverDestroyed(this); } void MutationObserver::Observe(const scoped_refptr<Node>& target, const MutationObserverInit& options) { - UNREFERENCED_PARAMETER(target); - UNREFERENCED_PARAMETER(options); - NOTIMPLEMENTED(); + if (!target) { + // |target| is not nullable, so if this is NULL that indicates a bug in the + // bindings layer. + NOTREACHED(); + return; + } + if (!target->RegisterMutationObserver(make_scoped_refptr(this), options)) { + // TODO: Throw TypeError. + NOTREACHED(); + } + TrackObservedNode(target); } -void MutationObserver::Disconnect() { NOTIMPLEMENTED(); } +void MutationObserver::Disconnect() { + // The disconnect() method must, for each node in the context object's + // list of nodes, remove any registered observer on node for which the context + // object is the observer, and also empty context object's record queue. + for (WeakNodeVector::iterator it = observed_nodes_.begin(); + it != observed_nodes_.end(); ++it) { + dom::Node* node = it->get(); + if (node != NULL) { + node->UnregisterMutationObserver(make_scoped_refptr(this)); + } + } + observed_nodes_.clear(); + record_queue_.clear(); +} MutationObserver::MutationRecordSequence MutationObserver::TakeRecords() { - NOTIMPLEMENTED(); - return MutationRecordSequence(); + // The takeRecords() method must return a copy of the record queue and then + // empty the record queue. + MutationRecordSequence record_queue; + record_queue.swap(record_queue_); + return record_queue; +} + +void MutationObserver::QueueMutationRecord( + const scoped_refptr<MutationRecord>& record) { + record_queue_.push_back(record); + task_manager_->QueueMutationObserverMicrotask(); +} + +bool MutationObserver::Notify() { + // https://www.w3.org/TR/dom/#mutationobserver + // Step 3 of "notify mutation observers" steps: + // 1. Let queue be a copy of mo's record queue. + // 2. Empty mo's record queue. + MutationRecordSequence records = TakeRecords(); + + // 3. Remove all transient registered observers whose observer is mo. + // TODO: handle transient registered observers. + + // 4. If queue is non-empty, call mo's callback with queue as first + // argument, and mo (itself) as second argument and callback this + // value. If this throws an exception, report the exception. + if (!records.empty()) { + return callback_->RunCallback(records, make_scoped_refptr(this)); + } + // If no records, return true to indicate no error occurred. + return true; +} + +void MutationObserver::TrackObservedNode(const scoped_refptr<dom::Node>& node) { + for (WeakNodeVector::iterator it = observed_nodes_.begin(); + it != observed_nodes_.end();) { + if (*it == NULL) { + it = observed_nodes_.erase(it); + continue; + } + if (*it == node) { + return; + } + ++it; + } + observed_nodes_.push_back(base::AsWeakPtr(node.get())); } } // namespace dom
diff --git a/src/cobalt/dom/mutation_observer.h b/src/cobalt/dom/mutation_observer.h index a78030a..fa8daa9 100644 --- a/src/cobalt/dom/mutation_observer.h +++ b/src/cobalt/dom/mutation_observer.h
@@ -24,7 +24,6 @@ #include "base/memory/scoped_ptr.h" #include "cobalt/dom/mutation_observer_init.h" #include "cobalt/dom/mutation_record.h" -#include "cobalt/dom/node.h" #include "cobalt/script/callback_function.h" #include "cobalt/script/sequence.h" #include "cobalt/script/wrappable.h" @@ -32,6 +31,9 @@ namespace cobalt { namespace dom { +class MutationObserverTaskManager; +class Node; + // A MutationObserver object can be used to observe mutations to the tree of // nodes. // https://www.w3.org/TR/dom/#mutationobserver @@ -51,22 +53,44 @@ // Not part of the spec. Support creating MutationObservers from native Cobalt // code. - explicit MutationObserver(const NativeMutationCallback& native_callback); + MutationObserver(const NativeMutationCallback& native_callback, + MutationObserverTaskManager* task_manager); // Web Api: MutationObserver - explicit MutationObserver(const MutationCallbackArg& callback); + MutationObserver(const MutationCallbackArg& callback, + MutationObserverTaskManager* task_manager); + ~MutationObserver(); + void Observe(const scoped_refptr<Node>& target, const MutationObserverInit& options); void Disconnect(); MutationRecordSequence TakeRecords(); + // Not part of the MutationObserver interface. Implements step (4.8) of the + // "queue a mutation record" algorithm. + // https://www.w3.org/TR/dom/#queue-a-mutation-record + void QueueMutationRecord(const scoped_refptr<MutationRecord>& record); + + // Not part of the the MutationObserver interface. Implements steps (3) of the + // "notify mutation observers" algorithm. + // https://www.w3.org/TR/dom/#notify-mutation-observers + bool Notify(); + // Internal helper class to allow creation of a MutationObserver with either a // native or script callback. Must be public so it can be inherited from in // the .cc file. class CallbackInternal; + DEFINE_WRAPPABLE_TYPE(MutationObserver); + private: + void TrackObservedNode(const scoped_refptr<dom::Node>& node); + scoped_ptr<CallbackInternal> callback_; + typedef std::vector<base::WeakPtr<dom::Node> > WeakNodeVector; + WeakNodeVector observed_nodes_; + MutationRecordSequence record_queue_; + MutationObserverTaskManager* task_manager_; }; } // namespace dom } // namespace cobalt
diff --git a/src/cobalt/dom/mutation_observer_init.h b/src/cobalt/dom/mutation_observer_init.h index 3e3c0ea..bd39b33 100644 --- a/src/cobalt/dom/mutation_observer_init.h +++ b/src/cobalt/dom/mutation_observer_init.h
@@ -21,6 +21,7 @@ #include <vector> #include "base/optional.h" +#include "cobalt/script/sequence.h" namespace cobalt { namespace dom { @@ -28,20 +29,101 @@ // Represents the MutationObserverInit dictionary type that is used to // initialize the MutationObserver interface. // https://www.w3.org/TR/dom/#mutationobserver -struct MutationObserverInit { - typedef std::vector<std::string> StringSequence; +class MutationObserverInit { + public: + typedef script::Sequence<std::string> StringSequence; - // Default values as specified in the IDL. - MutationObserverInit() : child_list(false), subtree(false) {} + MutationObserverInit() + : child_list_(false), + attributes_(false), + has_attributes_(false), + character_data_(false), + has_character_data_(false), + subtree_(false), + attribute_old_value_(false), + has_attribute_old_value_(false), + character_data_old_value_(false), + has_character_data_old_value_(false), + has_attribute_filter_(false) {} + bool child_list() const { return child_list_; } + void set_child_list(bool value) { child_list_ = value; } + + bool attributes() const { + DCHECK(has_attributes_); + return attributes_; + } + void set_attributes(bool value) { + has_attributes_ = true; + attributes_ = value; + } + bool has_attributes() const { return has_attributes_; } + + bool character_data() const { + DCHECK(has_character_data_); + return character_data_; + } + void set_character_data(bool value) { + has_character_data_ = true; + character_data_ = value; + } + bool has_character_data() const { return has_character_data_; } + + bool subtree() const { return subtree_; } + void set_subtree(bool value) { subtree_ = value; } + + bool attribute_old_value() const { + DCHECK(has_attribute_old_value_); + return attribute_old_value_; + } + void set_attribute_old_value(bool value) { + has_attribute_old_value_ = true; + attribute_old_value_ = value; + } + bool has_attribute_old_value() const { return has_attribute_old_value_; } + + bool character_data_old_value() const { + DCHECK(has_character_data_old_value_); + return character_data_old_value_; + } + void set_character_data_old_value(bool value) { + has_character_data_old_value_ = true; + character_data_old_value_ = value; + } + bool has_character_data_old_value() const { + return has_character_data_old_value_; + } + + const StringSequence& attribute_filter() const { + DCHECK(has_attribute_filter_); + return attribute_filter_; + } + void set_attribute_filter(StringSequence value) { + has_attribute_filter_ = true; + attribute_filter_ = value; + } + bool has_attribute_filter() const { return has_attribute_filter_; } + + private: // Dictionary members: - bool child_list; - base::optional<bool> attributes; - base::optional<bool> character_data; - bool subtree; - base::optional<bool> attribute_old_value; - base::optional<bool> character_data_old_value; - base::optional<StringSequence> attribute_filter; + bool child_list_; + + bool attributes_; + bool has_attributes_; + + bool character_data_; + bool has_character_data_; + + bool subtree_; + + bool attribute_old_value_; + bool has_attribute_old_value_; + + bool character_data_old_value_; + bool has_character_data_old_value_; + + StringSequence attribute_filter_; + bool has_attribute_filter_; }; } // namespace dom } // namespace cobalt
diff --git a/src/cobalt/dom/mutation_observer_task_manager.cc b/src/cobalt/dom/mutation_observer_task_manager.cc new file mode 100644 index 0000000..b7c7c7a --- /dev/null +++ b/src/cobalt/dom/mutation_observer_task_manager.cc
@@ -0,0 +1,81 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cobalt/dom/mutation_observer_task_manager.h" + +#include "base/callback.h" +#include "base/message_loop.h" + +namespace cobalt { +namespace dom { + +void MutationObserverTaskManager::OnMutationObserverCreated( + MutationObserver* observer) { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(observers_.find(observer) == observers_.end()); + observers_.insert(observer); +} +void MutationObserverTaskManager::OnMutationObserverDestroyed( + MutationObserver* observer) { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(observers_.find(observer) != observers_.end()); + observers_.erase(observer); +} + +void MutationObserverTaskManager::QueueMutationObserverMicrotask() { + DCHECK(thread_checker_.CalledOnValidThread()); + // https://www.w3.org/TR/dom/#queue-a-mutation-observer-compound-microtask + // To queue a mutation observer compound microtask, run these steps: + // 1. If mutation observer compound microtask queued flag is set, terminate + // these steps. + if (task_posted_) { + return; + } + // 2. Set mutation observer compound microtask queued flag. + task_posted_ = true; + // 3. Queue a compound microtask to notify mutation observers. + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&MutationObserverTaskManager::NotifyMutationObservers, + base::Unretained(this))); +} + +void MutationObserverTaskManager::NotifyMutationObservers() { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(task_posted_); + DCHECK(MessageLoop::current()); + // https://www.w3.org/TR/dom/#notify-mutation-observers + // To notify mutation observers, run these steps: + // 1. Unset mutation observer compound microtask queued flag. + task_posted_ = false; + + // 2. Let notify list be a copy of unit of related similar-origin browsing + // contexts's list of MutationObserver objects. + // 3. For each MutationObserver object mo in notify list, execute a compound + // microtask subtask to run these steps: [HTML] + // + // Subtask steps are implemented in MutationObserver::Notify. + for (MutationObserverSet::iterator it = observers_.begin(); + it != observers_.end(); ++it) { + MutationObserver* observer = *it; + if (!observer->Notify()) { + DLOG(ERROR) << "Exception when notifying mutation observer."; + } + } +} + +} // namespace dom +} // namespace cobalt
diff --git a/src/cobalt/dom/mutation_observer_task_manager.h b/src/cobalt/dom/mutation_observer_task_manager.h new file mode 100644 index 0000000..c080492 --- /dev/null +++ b/src/cobalt/dom/mutation_observer_task_manager.h
@@ -0,0 +1,62 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COBALT_DOM_MUTATION_OBSERVER_TASK_MANAGER_H_ +#define COBALT_DOM_MUTATION_OBSERVER_TASK_MANAGER_H_ + +#include <utility> + +#include "base/hash_tables.h" +#include "base/threading/thread_checker.h" +#include "cobalt/dom/mutation_observer.h" + +namespace cobalt { +namespace dom { + +// The Mutation observer spec describes a sequence of steps to "queue a mutation +// observer compound microtask" and "notify mutation observers". These steps +// are implemented in this helper class, which must outlive all +// MutationObserver instances. +// The spec expects an EventLoop implementation, which Cobalt does not currently +// have. +// https://www.w3.org/TR/dom/#mutation-observers +class MutationObserverTaskManager { + public: + MutationObserverTaskManager() : task_posted_(false) {} + + // These should be called in the constructor/destructor of the + // MutationObserver. + void OnMutationObserverCreated(MutationObserver* observer); + void OnMutationObserverDestroyed(MutationObserver* observer); + + // Post a task to notify mutation observers, if one is not already posted. + void QueueMutationObserverMicrotask(); + + private: + // Notify all mutation observers. + void NotifyMutationObservers(); + + typedef base::hash_set<MutationObserver*> MutationObserverSet; + + base::ThreadChecker thread_checker_; + MutationObserverSet observers_; + bool task_posted_; +}; + +} // namespace dom +} // namespace cobalt + +#endif // COBALT_DOM_MUTATION_OBSERVER_TASK_MANAGER_H_
diff --git a/src/cobalt/dom/mutation_observer_test.cc b/src/cobalt/dom/mutation_observer_test.cc new file mode 100644 index 0000000..32a1a04 --- /dev/null +++ b/src/cobalt/dom/mutation_observer_test.cc
@@ -0,0 +1,533 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/message_loop.h" +#include "cobalt/dom/element.h" +#include "cobalt/dom/mutation_observer_init.h" +#include "cobalt/dom/mutation_observer_task_manager.h" +#include "cobalt/dom/mutation_record.h" +#include "cobalt/dom/mutation_reporter.h" +#include "cobalt/dom/node_list.h" +#include "cobalt/dom/text.h" +#include "cobalt/script/sequence.h" +#include "cobalt/test/empty_document.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::_; +using ::testing::SaveArg; + +namespace cobalt { +namespace dom { +// Helper struct for childList mutations. +struct ChildListMutationArguments { + scoped_refptr<dom::Element> previous_sibling; + scoped_refptr<dom::Element> next_sibling; + scoped_refptr<dom::NodeList> added_nodes; + scoped_refptr<dom::NodeList> removed_nodes; +}; + +class MutationCallbackMock { + public: + MOCK_METHOD2(NativeMutationCallback, + void(const MutationObserver::MutationRecordSequence&, + const scoped_refptr<MutationObserver>&)); +}; + +class MutationObserverTest : public ::testing::Test { + protected: + dom::Document* document() { return empty_document_.document(); } + MutationObserverTaskManager* task_manager() { return &task_manager_; } + MutationCallbackMock* callback_mock() { return &callback_mock_; } + + scoped_refptr<Element> CreateDiv() { + scoped_refptr<Element> element = document()->CreateElement("div"); + DCHECK(element); + document()->AppendChild(element); + return element; + } + + scoped_refptr<MutationObserver> CreateObserver() { + return new MutationObserver( + base::Bind(&MutationCallbackMock::NativeMutationCallback, + base::Unretained(&callback_mock_)), + &task_manager_); + } + + ChildListMutationArguments CreateChildListMutationArguments() { + // These nodes are not actually related in the way they are named + // (next_sibling, previous_sibling, etc) but that is not relevant for the + // purpose of these tests. + ChildListMutationArguments args; + args.previous_sibling = CreateDiv(); + args.next_sibling = CreateDiv(); + args.added_nodes = new NodeList(); + args.added_nodes->AppendNode(CreateDiv()); + args.removed_nodes = new NodeList(); + args.removed_nodes->AppendNode(CreateDiv()); + return args; + } + + private: + MutationObserverTaskManager task_manager_; + test::EmptyDocument empty_document_; + MutationCallbackMock callback_mock_; + MessageLoop message_loop_; +}; + +TEST_F(MutationObserverTest, CreateAttributeMutationRecord) { + scoped_refptr<dom::Element> target = CreateDiv(); + scoped_refptr<MutationRecord> record = + MutationRecord::CreateAttributeMutationRecord(target, "attribute_name", + std::string("old_value")); + ASSERT_TRUE(record); + + // "type" and attribute-related attributes are set as expected + EXPECT_STREQ("attribute", record->type().c_str()); + EXPECT_TRUE(record->attribute_name()); + EXPECT_STREQ("attribute_name", record->attribute_name()->c_str()); + EXPECT_TRUE(record->old_value()); + EXPECT_STREQ("old_value", record->old_value()->c_str()); + + // "target" is set as expected. + EXPECT_EQ(target, record->target()); + + // Namespaces are not supported. + EXPECT_FALSE(record->attribute_namespace()); + + // Unrelated attributes are not set. + EXPECT_FALSE(record->added_nodes()); + EXPECT_FALSE(record->removed_nodes()); + EXPECT_FALSE(record->previous_sibling()); + EXPECT_FALSE(record->next_sibling()); +} + +TEST_F(MutationObserverTest, CreateCharacterDataMutationRecord) { + scoped_refptr<dom::Element> target = CreateDiv(); + scoped_refptr<MutationRecord> record = + MutationRecord::CreateCharacterDataMutationRecord( + target, std::string("old_character_data")); + ASSERT_TRUE(record); + + // "type" and attribute-related attributes are set as expected + EXPECT_STREQ("characterData", record->type().c_str()); + EXPECT_TRUE(record->old_value()); + EXPECT_STREQ("old_character_data", record->old_value()->c_str()); + + // "target" is set as expected. + EXPECT_EQ(target, record->target()); + + // Unrelated attributes are not set. + EXPECT_FALSE(record->attribute_name()); + EXPECT_FALSE(record->attribute_namespace()); + EXPECT_FALSE(record->added_nodes()); + EXPECT_FALSE(record->removed_nodes()); + EXPECT_FALSE(record->previous_sibling()); + EXPECT_FALSE(record->next_sibling()); +} + +TEST_F(MutationObserverTest, CreateChildListMutationRecord) { + scoped_refptr<dom::Element> target = CreateDiv(); + + ChildListMutationArguments args = CreateChildListMutationArguments(); + scoped_refptr<MutationRecord> record = + MutationRecord::CreateChildListMutationRecord( + target, args.added_nodes, args.removed_nodes, args.previous_sibling, + args.next_sibling); + ASSERT_TRUE(record); + + // "type" and attribute-related attributes are set as expected + EXPECT_STREQ("childList", record->type().c_str()); + EXPECT_EQ(args.added_nodes, record->added_nodes()); + EXPECT_EQ(args.removed_nodes, record->removed_nodes()); + EXPECT_EQ(args.previous_sibling, record->previous_sibling()); + EXPECT_EQ(args.next_sibling, record->next_sibling()); + + // "target" is set as expected. + EXPECT_EQ(target, record->target()); + + // Unrelated attributes are not set. + EXPECT_FALSE(record->attribute_name()); + EXPECT_FALSE(record->attribute_namespace()); + EXPECT_FALSE(record->old_value()); +} + +TEST_F(MutationObserverTest, MutationObserverInit) { + MutationObserverInit init; + // Default values are set according to spec. + EXPECT_FALSE(init.child_list()); + EXPECT_FALSE(init.subtree()); + + // Other values are not set. + EXPECT_FALSE(init.has_attributes()); + EXPECT_FALSE(init.has_character_data()); + EXPECT_FALSE(init.has_attribute_old_value()); + EXPECT_FALSE(init.has_character_data_old_value()); + EXPECT_FALSE(init.has_attribute_filter()); + + // Set other values. + init.set_attributes(true); + init.set_character_data(true); + init.set_attribute_old_value(true); + init.set_character_data_old_value(true); + script::Sequence<std::string> attribute_filter; + attribute_filter.push_back("a_filter"); + init.set_attribute_filter(attribute_filter); + + // Other values are now set. + EXPECT_TRUE(init.has_attributes()); + EXPECT_TRUE(init.attributes()); + EXPECT_TRUE(init.has_character_data()); + EXPECT_TRUE(init.character_data()); + EXPECT_TRUE(init.has_attribute_old_value()); + EXPECT_TRUE(init.attribute_old_value()); + EXPECT_TRUE(init.has_character_data_old_value()); + EXPECT_TRUE(init.character_data_old_value()); + EXPECT_TRUE(init.has_attribute_filter()); + EXPECT_EQ(init.attribute_filter().size(), attribute_filter.size()); + EXPECT_EQ(init.attribute_filter().at(0), attribute_filter.at(0)); +} + +TEST_F(MutationObserverTest, TakeRecords) { + scoped_refptr<dom::Element> target = CreateDiv(); + + // Newly created observer shouldn't have records. + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserver::MutationRecordSequence records; + records = observer->TakeRecords(); + EXPECT_TRUE(records.empty()); + + // Append a mutation records. + scoped_refptr<MutationRecord> record = + MutationRecord::CreateCharacterDataMutationRecord(target, + "old_character_data"); + observer->QueueMutationRecord(record); + + // The queued record can be taken once. + records = observer->TakeRecords(); + ASSERT_EQ(1, records.size()); + ASSERT_EQ(records.at(0), record); + records = observer->TakeRecords(); + EXPECT_TRUE(records.empty()); +} + +TEST_F(MutationObserverTest, Notify) { + scoped_refptr<dom::Element> target = CreateDiv(); + + // Create a new observer and queue a mutation record. + scoped_refptr<MutationObserver> observer = CreateObserver(); + scoped_refptr<MutationRecord> record = + MutationRecord::CreateCharacterDataMutationRecord(target, + "old_character_data"); + observer->QueueMutationRecord(record); + + // Callback should be fired with the first argument being a sequence of the + // queued record, and the second argument being the observer. + MutationObserver::MutationRecordSequence records; + EXPECT_CALL(*callback_mock(), NativeMutationCallback(_, observer)) + .WillOnce(SaveArg<0>(&records)); + observer->Notify(); + ASSERT_EQ(1, records.size()); + EXPECT_EQ(record, records.at(0)); + + // There should be no more records queued up after the callback has been + // fired. + records = observer->TakeRecords(); + EXPECT_TRUE(records.empty()); +} + +TEST_F(MutationObserverTest, ReportMutation) { + scoped_refptr<dom::Element> target = CreateDiv(); + // Create a registered observer that cares about attribute and character data + // mutations. + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserverInit init; + init.set_attributes(true); + init.set_child_list(false); + init.set_character_data(true); + + // Create a MutationReporter for the list of registered observers. + scoped_ptr<std::vector<RegisteredObserver> > registered_observers( + new std::vector<RegisteredObserver>()); + registered_observers->push_back( + RegisteredObserver(target.get(), observer, init)); + MutationReporter reporter(target.get(), registered_observers.Pass()); + + // Report a few mutations. + reporter.ReportAttributesMutation("attribute_name", std::string("old_value")); + reporter.ReportCharacterDataMutation("old_character_data"); + ChildListMutationArguments args = CreateChildListMutationArguments(); + reporter.ReportChildListMutation(args.added_nodes, args.removed_nodes, + args.previous_sibling, args.next_sibling); + + // Check that mutation records for the mutation types we care about have + // been queued. + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + ASSERT_EQ(2, records.size()); + EXPECT_EQ(records.at(0)->type(), "attribute"); + EXPECT_EQ(records.at(1)->type(), "characterData"); +} + +TEST_F(MutationObserverTest, AttributeFilter) { + scoped_refptr<dom::Element> target = CreateDiv(); + // Create a registered observer that cares about attribute and character data + // mutations. + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserverInit init; + script::Sequence<std::string> attribute_filter; + attribute_filter.push_back("banana"); + attribute_filter.push_back("potato"); + init.set_attribute_filter(attribute_filter); + init.set_attributes(true); + + // Create a MutationReporter for the list of registered observers. + scoped_ptr<std::vector<RegisteredObserver> > registered_observers( + new std::vector<RegisteredObserver>()); + registered_observers->push_back( + RegisteredObserver(target.get(), observer, init)); + MutationReporter reporter(target.get(), registered_observers.Pass()); + + // Report a few attribute mutations. + reporter.ReportAttributesMutation("banana", std::string("rotten")); + reporter.ReportAttributesMutation("apple", std::string("wormy")); + reporter.ReportAttributesMutation("potato", std::string("mashed")); + + // Check that mutation records for the filtered attrbiutes have been queued. + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + ASSERT_EQ(2, records.size()); + EXPECT_STREQ(records.at(0)->attribute_name()->c_str(), "banana"); + EXPECT_STREQ(records.at(1)->attribute_name()->c_str(), "potato"); +} + +TEST_F(MutationObserverTest, RegisteredObserverList) { + scoped_refptr<dom::Element> target = CreateDiv(); + scoped_refptr<MutationObserver> observer = CreateObserver(); + + RegisteredObserverList observer_list(target.get()); + + // Add an observer with options. + MutationObserverInit options; + options.set_attributes(true); + EXPECT_TRUE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(1, observer_list.registered_observers().size()); + EXPECT_EQ(observer, observer_list.registered_observers()[0].observer()); + EXPECT_TRUE(observer_list.registered_observers()[0].options().attributes()); + EXPECT_FALSE( + observer_list.registered_observers()[0].options().has_character_data()); + EXPECT_FALSE(observer_list.registered_observers()[0].options().child_list()); + + // Adding the same observer updates the options. + options = MutationObserverInit(); + options.set_child_list(true); + EXPECT_TRUE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(1, observer_list.registered_observers().size()); + EXPECT_EQ(observer, observer_list.registered_observers()[0].observer()); + EXPECT_FALSE( + observer_list.registered_observers()[0].options().has_attributes()); + EXPECT_FALSE( + observer_list.registered_observers()[0].options().has_character_data()); + EXPECT_TRUE(observer_list.registered_observers()[0].options().child_list()); + + // Remove the observer. + observer_list.RemoveMutationObserver(observer); + EXPECT_EQ(0, observer_list.registered_observers().size()); +} + +TEST_F(MutationObserverTest, LazilySetOptions) { + scoped_refptr<dom::Element> target = CreateDiv(); + scoped_refptr<MutationObserver> observer = CreateObserver(); + + RegisteredObserverList observer_list(target.get()); + + // |attributes| gets set if an attribute-related option is set. + MutationObserverInit options; + options.set_attribute_old_value(true); + EXPECT_TRUE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(1, observer_list.registered_observers().size()); + EXPECT_TRUE(observer_list.registered_observers()[0].options().attributes()); + + // |character_data| gets set if an attribute-related option is set. + options = MutationObserverInit(); + options.set_character_data_old_value(true); + EXPECT_TRUE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(1, observer_list.registered_observers().size()); + EXPECT_TRUE( + observer_list.registered_observers()[0].options().character_data()); +} + +TEST_F(MutationObserverTest, InvalidOptions) { + scoped_refptr<dom::Element> target = CreateDiv(); + scoped_refptr<MutationObserver> observer = CreateObserver(); + + RegisteredObserverList observer_list(target.get()); + + // No type of mutation is set. + MutationObserverInit options; + EXPECT_FALSE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(0, observer_list.registered_observers().size()); + + // |attributes| is set as false, but attribute old data is set. + options.set_attributes(false); + options.set_attribute_old_value(true); + EXPECT_FALSE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(0, observer_list.registered_observers().size()); + + // |character_data| is set as false, but attribute old data is set. + options = MutationObserverInit(); + options.set_character_data(false); + options.set_character_data_old_value(true); + EXPECT_FALSE(observer_list.AddMutationObserver(observer, options)); + EXPECT_EQ(0, observer_list.registered_observers().size()); +} + +TEST_F(MutationObserverTest, AddChildNodes) { + scoped_refptr<Element> root = CreateDiv(); + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserverInit options; + options.set_subtree(true); + options.set_child_list(true); + observer->Observe(root, options); + + scoped_refptr<Element> child1 = document()->CreateElement("div"); + scoped_refptr<Element> child2 = document()->CreateElement("div"); + ASSERT_TRUE(child1); + ASSERT_TRUE(child2); + + root->AppendChild(child1); + child1->AppendChild(child2); + + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + ASSERT_EQ(2, records.size()); + EXPECT_EQ("childList", records.at(0)->type()); + EXPECT_EQ(root, records.at(0)->target()); + ASSERT_FALSE(records.at(0)->removed_nodes()); + ASSERT_TRUE(records.at(0)->added_nodes()); + ASSERT_EQ(1, records.at(0)->added_nodes()->length()); + EXPECT_EQ(child1, records.at(0)->added_nodes()->Item(0)); + + EXPECT_EQ("childList", records.at(1)->type()); + EXPECT_EQ(child1, records.at(1)->target()); + ASSERT_FALSE(records.at(1)->removed_nodes()); + ASSERT_TRUE(records.at(1)->added_nodes()); + ASSERT_EQ(1, records.at(1)->added_nodes()->length()); + EXPECT_EQ(child2, records.at(1)->added_nodes()->Item(0)); +} + +TEST_F(MutationObserverTest, RemoveChildNode) { + scoped_refptr<Element> root = CreateDiv(); + scoped_refptr<Element> child1 = document()->CreateElement("div"); + scoped_refptr<Element> child2 = document()->CreateElement("div"); + ASSERT_TRUE(child1); + ASSERT_TRUE(child2); + + root->AppendChild(child1); + child1->AppendChild(child2); + + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserverInit options; + options.set_subtree(true); + options.set_child_list(true); + observer->Observe(root, options); + + child1->RemoveChild(child2); + + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + ASSERT_EQ(1, records.size()); + EXPECT_EQ("childList", records.at(0)->type()); + EXPECT_EQ(child1, records.at(0)->target()); + ASSERT_TRUE(records.at(0)->removed_nodes()); + ASSERT_EQ(1, records.at(0)->removed_nodes()->length()); + EXPECT_EQ(child2, records.at(0)->removed_nodes()->Item(0)); +} + +TEST_F(MutationObserverTest, MutateCharacterData) { + scoped_refptr<Element> root = CreateDiv(); + scoped_refptr<Text> text = document()->CreateTextNode("initial-data"); + ASSERT_TRUE(text); + root->AppendChild(text); + + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserverInit options; + options.set_subtree(true); + options.set_character_data(true); + observer->Observe(root, options); + + text->set_data("new-data"); + + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + ASSERT_EQ(1, records.size()); + EXPECT_EQ("characterData", records.at(0)->type()); + EXPECT_EQ(text, records.at(0)->target()); + ASSERT_TRUE(records.at(0)->old_value()); + EXPECT_STREQ("initial-data", records.at(0)->old_value()->c_str()); +} + +TEST_F(MutationObserverTest, MutateAttribute) { + scoped_refptr<Element> root = CreateDiv(); + root->SetAttribute("banana", "purple"); + root->SetAttribute("apple", "green"); + + scoped_refptr<MutationObserver> observer = CreateObserver(); + script::Sequence<std::string> filter; + filter.push_back("banana"); + MutationObserverInit options; + options.set_attributes(true); + options.set_attribute_filter(filter); + observer->Observe(root, options); + + root->SetAttribute("banana", "yellow"); + root->SetAttribute("apple", "brown"); + + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + ASSERT_EQ(1, records.size()); + EXPECT_EQ("attribute", records.at(0)->type()); + EXPECT_EQ(root, records.at(0)->target()); + ASSERT_TRUE(records.at(0)->old_value()); + ASSERT_TRUE(records.at(0)->attribute_name()); + EXPECT_STREQ("banana", records.at(0)->attribute_name()->c_str()); + EXPECT_STREQ("purple", records.at(0)->old_value()->c_str()); +} + +TEST_F(MutationObserverTest, Disconnect) { + scoped_refptr<Element> root = CreateDiv(); + scoped_refptr<Text> text = document()->CreateTextNode("initial-data"); + ASSERT_TRUE(text); + root->AppendChild(text); + + scoped_refptr<MutationObserver> observer = CreateObserver(); + MutationObserverInit options; + options.set_subtree(true); + options.set_character_data(true); + observer->Observe(root, options); + + // This should queue up a mutation record. + text->set_data("new-data"); + + observer->Disconnect(); + MutationObserver::MutationRecordSequence records = observer->TakeRecords(); + // MutationObserver.disconnect() should clear any queued records. + EXPECT_EQ(0, records.size()); + + // This should not queue a mutation record. + text->set_data("more-new-data"); + records = observer->TakeRecords(); + EXPECT_EQ(0, records.size()); +} + +} // namespace dom +} // namespace cobalt
diff --git a/src/cobalt/dom/mutation_record.cc b/src/cobalt/dom/mutation_record.cc new file mode 100644 index 0000000..31d6eb2 --- /dev/null +++ b/src/cobalt/dom/mutation_record.cc
@@ -0,0 +1,64 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cobalt/dom/mutation_record.h" + +#include "cobalt/dom/node.h" +#include "cobalt/dom/node_list.h" + +namespace cobalt { +namespace dom { + +scoped_refptr<MutationRecord> MutationRecord::CreateAttributeMutationRecord( + const scoped_refptr<Node>& target, const std::string& attribute_name, + const base::optional<std::string>& old_value) { + scoped_refptr<MutationRecord> record = + new MutationRecord(base::Tokens::attribute(), target); + record->attribute_name_ = attribute_name; + record->old_value_ = old_value; + return record; +} + +scoped_refptr<MutationRecord> MutationRecord::CreateCharacterDataMutationRecord( + const scoped_refptr<Node>& target, const std::string& old_character_data) { + scoped_refptr<MutationRecord> record = + new MutationRecord(base::Tokens::characterData(), target); + record->old_value_ = old_character_data; + return record; +} + +scoped_refptr<MutationRecord> MutationRecord::CreateChildListMutationRecord( + const scoped_refptr<Node>& target, + const scoped_refptr<dom::NodeList>& added_nodes, + const scoped_refptr<dom::NodeList>& removed_nodes, + const scoped_refptr<dom::Node>& previous_sibling, + const scoped_refptr<dom::Node>& next_sibling) { + scoped_refptr<MutationRecord> record = + new MutationRecord(base::Tokens::childList(), target); + record->added_nodes_ = added_nodes; + record->removed_nodes_ = removed_nodes; + record->previous_sibling_ = previous_sibling; + record->next_sibling_ = next_sibling; + return record; +} + +MutationRecord::MutationRecord(const base::Token& type, + const scoped_refptr<Node>& target) + : type_(type), target_(target) {} +MutationRecord::~MutationRecord() {} + +} // namespace dom +} // namespace cobalt
diff --git a/src/cobalt/dom/mutation_record.h b/src/cobalt/dom/mutation_record.h index cd43589..9c21010 100644 --- a/src/cobalt/dom/mutation_record.h +++ b/src/cobalt/dom/mutation_record.h
@@ -20,30 +20,70 @@ #include <string> #include "base/optional.h" -#include "cobalt/dom/node.h" -#include "cobalt/dom/node_list.h" +#include "cobalt/base/token.h" #include "cobalt/script/wrappable.h" namespace cobalt { namespace dom { +class Node; +class NodeList; + // MutationRecords are used with the MutationObserver interface to describe a // mutation on the documnet. // https://www.w3.org/TR/dom/#mutationrecord class MutationRecord : public script::Wrappable { public: // Web API: MutationRecord - std::string type() { return ""; } - scoped_refptr<dom::Node> target() { return NULL; } - scoped_refptr<dom::NodeList> added_nodes() { return NULL; } - scoped_refptr<dom::NodeList> removed_nodes() { return NULL; } - scoped_refptr<dom::Node> previous_sibling() { return NULL; } - scoped_refptr<dom::Node> next_sibling() { return NULL; } - base::optional<std::string> attribute_name() { return base::nullopt; } - base::optional<std::string> attribute_namespace() { return base::nullopt; } - base::optional<std::string> old_value() { return base::nullopt; } + const base::Token& type() { return type_; } + const scoped_refptr<dom::Node>& target() { return target_; } + const scoped_refptr<dom::NodeList>& added_nodes() { return added_nodes_; } + const scoped_refptr<dom::NodeList>& removed_nodes() { return removed_nodes_; } + const scoped_refptr<dom::Node>& previous_sibling() { + return previous_sibling_; + } + const scoped_refptr<dom::Node>& next_sibling() { return next_sibling_; } + const base::optional<std::string>& attribute_name() { + return attribute_name_; + } + const base::optional<std::string>& attribute_namespace() { + return attribute_namespace_; + } + const base::optional<std::string>& old_value() { return old_value_; } + + // Not part of the MutationRecord interface. These create functions implement + // the part of the "queueing a mutation record" algorithm pertaining to + // creating a new Mutation Record (step 4). + // https://www.w3.org/TR/dom/#queue-a-mutation-record + static scoped_refptr<MutationRecord> CreateAttributeMutationRecord( + const scoped_refptr<Node>& target, const std::string& attribute_name, + const base::optional<std::string>& old_value); + + static scoped_refptr<MutationRecord> CreateCharacterDataMutationRecord( + const scoped_refptr<Node>& target, const std::string& old_character_data); + + static scoped_refptr<MutationRecord> CreateChildListMutationRecord( + const scoped_refptr<Node>& target, + const scoped_refptr<dom::NodeList>& added_nodes, + const scoped_refptr<dom::NodeList>& removed_nodes, + const scoped_refptr<dom::Node>& previous_sibling, + const scoped_refptr<dom::Node>& next_sibling); DEFINE_WRAPPABLE_TYPE(MutationRecord); + + private: + MutationRecord(const base::Token& type, const scoped_refptr<Node>& target); + ~MutationRecord(); + + base::Token type_; + scoped_refptr<dom::Node> target_; + scoped_refptr<dom::NodeList> added_nodes_; + scoped_refptr<dom::NodeList> removed_nodes_; + scoped_refptr<dom::Node> previous_sibling_; + scoped_refptr<dom::Node> next_sibling_; + base::optional<std::string> attribute_name_; + base::optional<std::string> attribute_namespace_; + base::optional<std::string> old_value_; }; } // namespace dom } // namespace cobalt
diff --git a/src/cobalt/dom/mutation_reporter.cc b/src/cobalt/dom/mutation_reporter.cc new file mode 100644 index 0000000..28bb037 --- /dev/null +++ b/src/cobalt/dom/mutation_reporter.cc
@@ -0,0 +1,203 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cobalt/dom/mutation_reporter.h" + +#include "base/hash_tables.h" +#include "cobalt/dom/mutation_observer.h" +#include "cobalt/dom/mutation_observer_init.h" +#include "cobalt/dom/node.h" +#include "cobalt/dom/node_list.h" + +namespace cobalt { +namespace dom { +namespace { + +// Internal helper class to determine if a registered observer cares about a +// certain type of mutation, and for creating a mutation record for different +// types of mutations. +class MutationRecordBuilder { + public: + virtual bool IsInterested(const MutationObserverInit& options) = 0; + virtual scoped_refptr<MutationRecord> CreateMutationRecord( + const scoped_refptr<Node>& target) = 0; +}; + +// MutationRecordBuild for attribute mutations. +class AttributeMutationRecordBuilder : public MutationRecordBuilder { + public: + AttributeMutationRecordBuilder(const std::string& attribute_name, + const base::optional<std::string>& old_value) + : attribute_name_(attribute_name), old_value_(old_value) {} + + bool IsInterested(const MutationObserverInit& options) OVERRIDE { + // https://www.w3.org/TR/dom/#queue-a-mutation-record + // 2. If type is "attributes" and options's attributes is not true, + // continue. + if (!options.has_attributes() || !options.attributes()) { + return false; + } + + // 3. If type is "attributes", options's attributeFilter is present, + // and either options's attributeFilter does not contain name or + // namespace is non-null, continue. + if (options.has_attribute_filter()) { + // Cobalt doesn't support namespaces, so ignore that part of step (2). + for (size_t i = 0; i < options.attribute_filter().size(); ++i) { + if (options.attribute_filter().at(i) == attribute_name_) { + return true; + } + } + return false; + } + return true; + } + + scoped_refptr<MutationRecord> CreateMutationRecord( + const scoped_refptr<Node>& target) OVERRIDE { + return MutationRecord::CreateAttributeMutationRecord( + target, attribute_name_, old_value_); + } + + private: + std::string attribute_name_; + base::optional<std::string> old_value_; +}; + +// MutationRecordBuild for character data mutations. +class CharacterDataMutationRecordBuilder : public MutationRecordBuilder { + public: + explicit CharacterDataMutationRecordBuilder( + const std::string& old_character_data) + : old_character_data_(old_character_data) {} + + bool IsInterested(const MutationObserverInit& options) OVERRIDE { + // https://www.w3.org/TR/dom/#queue-a-mutation-record + // 4. If type is "characterData" and options's characterData is not true, + // continue. + return options.has_character_data() && options.character_data(); + } + scoped_refptr<MutationRecord> CreateMutationRecord( + const scoped_refptr<Node>& target) OVERRIDE { + return MutationRecord::CreateCharacterDataMutationRecord( + target, old_character_data_); + } + + private: + std::string old_character_data_; +}; + +// MutationRecordBuild for child list mutations. +class ChildListMutationRecordBuilder : public MutationRecordBuilder { + public: + ChildListMutationRecordBuilder( + const scoped_refptr<dom::NodeList>& added_nodes, + const scoped_refptr<dom::NodeList>& removed_nodes, + const scoped_refptr<dom::Node>& previous_sibling, + const scoped_refptr<dom::Node>& next_sibling) + : added_nodes_(added_nodes), + removed_nodes_(removed_nodes), + previous_sibling_(previous_sibling), + next_sibling_(next_sibling) {} + + bool IsInterested(const MutationObserverInit& options) OVERRIDE { + // https://www.w3.org/TR/dom/#queue-a-mutation-record + // 5. If type is "childList" and options's childList is false, continue. + return options.child_list(); + } + + scoped_refptr<MutationRecord> CreateMutationRecord( + const scoped_refptr<Node>& target) OVERRIDE { + return MutationRecord::CreateChildListMutationRecord( + target, added_nodes_, removed_nodes_, previous_sibling_, next_sibling_); + } + + private: + scoped_refptr<dom::NodeList> added_nodes_; + scoped_refptr<dom::NodeList> removed_nodes_; + scoped_refptr<dom::Node> previous_sibling_; + scoped_refptr<dom::Node> next_sibling_; +}; + +// Iterate through |registered_observers| and create a new MutationRecord via +// |record_builder| for interested observers. +void ReportToInterestedObservers( + const scoped_refptr<Node>& target, + MutationReporter::RegisteredObserverVector* registered_observers, + MutationRecordBuilder* record_builder) { + typedef base::hash_set<MutationObserver*> MutationObserverSet; + MutationObserverSet reported_observers; + for (size_t i = 0; i < registered_observers->size(); ++i) { + const RegisteredObserver& registered_observer = registered_observers->at(i); + MutationObserver* observer = registered_observer.observer().get(); + const MutationObserverInit& options = registered_observer.options(); + + // The mutation has already been reported to this observer, so skip it, per + // step 3.6 (https://www.w3.org/TR/dom/#queue-a-mutation-record) + if (reported_observers.find(observer) != reported_observers.end()) { + continue; + } + + // https://www.w3.org/TR/dom/#queue-a-mutation-record + // 1. If node is not target and options's subtree is false, continue. + if (registered_observer.target() != target && !options.subtree()) { + continue; + } + // This observer doesn't care about this mutation, so skip it. + if (!record_builder->IsInterested(options)) { + continue; + } + // Queue a mutation record on the observer. + observer->QueueMutationRecord(record_builder->CreateMutationRecord(target)); + reported_observers.insert(observer); + } +} + +} // namespace + +MutationReporter::MutationReporter( + dom::Node* target, + scoped_ptr<RegisteredObserverVector> registered_observers) + : target_(target), observers_(registered_observers.Pass()) {} + +MutationReporter::~MutationReporter() {} + +// Implement the "queue a mutation record" algorithm. +// https://www.w3.org/TR/dom/#queue-a-mutation-record +void MutationReporter::ReportAttributesMutation( + const std::string& name, + const base::optional<std::string>& old_value) const { + AttributeMutationRecordBuilder record_builder(name, old_value); + ReportToInterestedObservers(target_, observers_.get(), &record_builder); +} + +void MutationReporter::ReportCharacterDataMutation( + const std::string& old_value) const { + CharacterDataMutationRecordBuilder record_builder(old_value); + ReportToInterestedObservers(target_, observers_.get(), &record_builder); +} + +void MutationReporter::ReportChildListMutation( + const scoped_refptr<dom::NodeList>& added_nodes, + const scoped_refptr<dom::NodeList>& removed_nodes, + const scoped_refptr<dom::Node>& previous_sibling, + const scoped_refptr<dom::Node>& next_sibling) const { + ChildListMutationRecordBuilder record_builder(added_nodes, removed_nodes, + previous_sibling, next_sibling); + ReportToInterestedObservers(target_, observers_.get(), &record_builder); +} +} // namespace dom +} // namespace cobalt
diff --git a/src/cobalt/dom/mutation_reporter.h b/src/cobalt/dom/mutation_reporter.h new file mode 100644 index 0000000..d8ccda3 --- /dev/null +++ b/src/cobalt/dom/mutation_reporter.h
@@ -0,0 +1,68 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COBALT_DOM_MUTATION_REPORTER_H_ +#define COBALT_DOM_MUTATION_REPORTER_H_ + +#include <string> +#include <vector> + +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "cobalt/dom/registered_observer.h" + +namespace cobalt { +namespace dom { + +class Node; +class NodeList; + +// Helper class that reports a mutation to interested MutationObservers +// according to the "queue a mutation record" algorithm: +// https://www.w3.org/TR/dom/#queue-a-mutation-record +// +// This class is intended to be used internally in the Node class. +class MutationReporter { + public: + typedef std::vector<RegisteredObserver> RegisteredObserverVector; + // Construct a MutationReporter with a list of potentially interested + // RegisteredObservers. In practice, this list of |registered_observers| will + // the RegisteredObservers registered to the node that is being mutated and + // its ancestors. |registered_observers| may contain duplicates. + MutationReporter(dom::Node* target, + scoped_ptr<RegisteredObserverVector> registered_observers); + + ~MutationReporter(); + + // Implement the "queue a mutation record" algorithm for the different types + // of mutations. + void ReportAttributesMutation( + const std::string& name, + const base::optional<std::string>& old_value) const; + void ReportCharacterDataMutation(const std::string& old_value) const; + void ReportChildListMutation( + const scoped_refptr<dom::NodeList>& added_nodes, + const scoped_refptr<dom::NodeList>& removed_nodes, + const scoped_refptr<dom::Node>& previous_sibling, + const scoped_refptr<dom::Node>& next_sibling) const; + + private: + dom::Node* target_; + scoped_ptr<RegisteredObserverVector> observers_; +}; +} // namespace dom +} // namespace cobalt +#endif // COBALT_DOM_MUTATION_REPORTER_H_
diff --git a/src/cobalt/dom/node.cc b/src/cobalt/dom/node.cc index b82b0c0..f6c6b69 100644 --- a/src/cobalt/dom/node.cc +++ b/src/cobalt/dom/node.cc
@@ -32,6 +32,7 @@ #include "cobalt/dom/global_stats.h" #include "cobalt/dom/html_collection.h" #include "cobalt/dom/html_element_context.h" +#include "cobalt/dom/mutation_reporter.h" #include "cobalt/dom/node_descendants_iterator.h" #include "cobalt/dom/node_list.h" #include "cobalt/dom/node_list_live.h" @@ -287,11 +288,26 @@ node->AdoptIntoDocument(node_document_); // 10. Remove child from its parent with the suppress observers flag set. - Remove(child); + Remove(child, true); // 11. Insert node into parent before reference child with the suppress // observers flag set. - Insert(node, reference_child); + Insert(node, reference_child, true); + + // 12. Let nodes be node's children if node is a DocumentFragment node, and a + // list containing solely node otherwise. + // 13. Queue a mutation record of "childList" for target parent with + // addedNodes nodes, removedNodes a list solely containing child, nextSibling + // reference child, and previousSibling child's previous sibling. + MutationReporter mutation_reporter(this, GatherInclusiveAncestorsObservers()); + scoped_refptr<dom::NodeList> added_nodes = new dom::NodeList(); + added_nodes->AppendNode(node); + scoped_refptr<dom::NodeList> removed_nodes = new dom::NodeList(); + removed_nodes->AppendNode(child); + mutation_reporter.ReportChildListMutation( + added_nodes, removed_nodes, + child->previous_sibling_ /* previous_sibling */, + reference_child /* next_sibling */); return child; } @@ -427,7 +443,8 @@ previous_sibling_(NULL), last_child_(NULL), inserted_into_document_(false), - node_generation_(kInitialNodeGeneration) { + node_generation_(kInitialNodeGeneration), + ALLOW_THIS_IN_INITIALIZER_LIST(registered_observers_(this)) { DCHECK(node_document_); ++(node_count_log.Get().count); GlobalStats::GetInstance()->Add(this); @@ -508,6 +525,21 @@ } } +scoped_ptr<Node::RegisteredObserverVector> +Node::GatherInclusiveAncestorsObservers() { + scoped_ptr<RegisteredObserverVector> inclusive_observers( + new RegisteredObserverVector()); + Node* current = this; + while (current) { + const RegisteredObserverList::RegisteredObserverVector& node_observers = + current->registered_observers_.registered_observers(); + inclusive_observers->insert(inclusive_observers->end(), + node_observers.begin(), node_observers.end()); + current = current->parent_; + } + return inclusive_observers.Pass(); +} + // Algorithm for EnsurePreInsertionValidity: // https://www.w3.org/TR/dom/#concept-node-ensure-pre-insertion-validity bool Node::EnsurePreInsertionValidity(const scoped_refptr<Node>& node, @@ -577,7 +609,7 @@ // 4. Adopt node into parent's node document. // 5. Insert node into parent before reference child. node->AdoptIntoDocument(node_document_); - Insert(node, child == node ? child->next_sibling_ : child); + Insert(node, child == node ? child->next_sibling_ : child, false); // 6. Return node. return node; @@ -586,16 +618,35 @@ // Algorithm for Insert: // https://www.w3.org/TR/dom/#concept-node-insert void Node::Insert(const scoped_refptr<Node>& node, - const scoped_refptr<Node>& child) { + const scoped_refptr<Node>& child, bool suppress_observers) { // 1. 2. Not needed by Cobalt. // 3. Let nodes be node's children if node is a DocumentFragment node, and a // list containing solely node otherwise. - // 4. ~ 6. Not needed by Cobalt. + // 4. 5. Not needed by Cobalt. + // 6. If suppress observers flag is unset, queue a mutation record of + // "childList" for parent with addedNodes nodes, nextSibling child, and + // previousSibling child's previous sibling or parent's last child if + // child is null. // 7. For each newNode in nodes, in tree order, run these substeps: // 1. Insert newNode into parent before child or at the end of parent if // child is null. // 2. Run the insertion steps with newNode. + if (!suppress_observers) { + scoped_ptr<RegisteredObserverVector> observers = + GatherInclusiveAncestorsObservers(); + if (!observers->empty()) { + MutationReporter mutation_reporter(this, observers.Pass()); + scoped_refptr<dom::NodeList> added_nodes = new dom::NodeList(); + added_nodes->AppendNode(node); + mutation_reporter.ReportChildListMutation( + added_nodes, NULL, child && child->previous_sibling_ + ? child->previous_sibling_ + : this->last_child_ /* previous_sibling */, + child /* next_sibling */); + } + } + node->parent_ = this; scoped_refptr<Node> next_sibling = child; @@ -646,7 +697,7 @@ } // 2. Remove child from parent. - Remove(child); + Remove(child, false); // 3. Return child. return child; @@ -654,7 +705,7 @@ // Algorithm for Remove: // https://www.w3.org/TR/dom/#concept-node-remove -void Node::Remove(const scoped_refptr<Node>& node) { +void Node::Remove(const scoped_refptr<Node>& node, bool suppress_observers) { DCHECK(node); OnMutation(); @@ -674,10 +725,34 @@ node->OnRemovedFromDocument(); } - // 1. ~ 8. Not needed by Cobalt. + // 1. 5. Not needed by Cobalt. + // 6. Let oldPreviousSibling be node's previous sibling + // 7. If suppress observers flag is unset, queue a mutation record of + // "childList" for parent with removedNodes a list solely containing node, + // nextSibling node's next sibling, and previousSibling oldPreviousSibling. + // 8. For each ancestor ancestor of node, if ancestor has any registered + // observers whose options's subtree is true, then for each such registered + // observer registered, append a transient registered observer whose observer + // and options are identical to those of registered and source which is + // registered to node's list of registered observers. // 9. Remove node from its parent. // 10. Run the removing steps with node, parent, and oldPreviousSibling. + scoped_ptr<RegisteredObserverVector> observers = + GatherInclusiveAncestorsObservers(); + if (!observers->empty()) { + // Step 7 - Queue a mutation record. + if (!suppress_observers) { + MutationReporter mutation_reporter(this, observers.Pass()); + scoped_refptr<dom::NodeList> removed_nodes = new dom::NodeList(); + removed_nodes->AppendNode(node); + mutation_reporter.ReportChildListMutation( + NULL, removed_nodes, node->previous_sibling_ /* previous_sibling */, + node->next_sibling_ /* next_sibling */); + } + // TODO: transient registered observers. + } + if (node->previous_sibling_) { node->previous_sibling_->next_sibling_ = node->next_sibling_; } else {
diff --git a/src/cobalt/dom/node.h b/src/cobalt/dom/node.h index 7e349d6..17f35e2 100644 --- a/src/cobalt/dom/node.h +++ b/src/cobalt/dom/node.h
@@ -18,12 +18,16 @@ #define COBALT_DOM_NODE_H_ #include <string> +#include <vector> #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" #include "cobalt/base/token.h" #include "cobalt/dom/event_target.h" +#include "cobalt/dom/mutation_observer.h" +#include "cobalt/dom/mutation_observer_init.h" +#include "cobalt/dom/registered_observer_list.h" namespace cobalt { namespace dom { @@ -222,6 +226,15 @@ // descendents. void PurgeCachedResourceReferencesRecursively(); + bool RegisterMutationObserver(const scoped_refptr<MutationObserver>& observer, + const MutationObserverInit& options) { + return registered_observers_.AddMutationObserver(observer, options); + } + void UnregisterMutationObserver( + const scoped_refptr<MutationObserver>& observer) { + registered_observers_.RemoveMutationObserver(observer); + } + DEFINE_WRAPPABLE_TYPE(Node); protected: @@ -255,6 +268,10 @@ // Triggers a generation update in this node and all its ancestor nodes. void UpdateGenerationForNodeAndAncestors(); + // Gather a list of RegisteredObservers on this node and its ancestors. + typedef std::vector<RegisteredObserver> RegisteredObserverVector; + scoped_ptr<RegisteredObserverVector> GatherInclusiveAncestorsObservers(); + private: // From EventTarget. std::string GetDebugName() OVERRIDE { return node_name().c_str(); } @@ -268,11 +285,11 @@ scoped_refptr<Node> PreInsert(const scoped_refptr<Node>& node, const scoped_refptr<Node>& child); - void Insert(const scoped_refptr<Node>& node, - const scoped_refptr<Node>& child); + void Insert(const scoped_refptr<Node>& node, const scoped_refptr<Node>& child, + bool suppress_observers); scoped_refptr<Node> PreRemove(const scoped_refptr<Node>& child); - void Remove(const scoped_refptr<Node>& node); + void Remove(const scoped_refptr<Node>& node, bool suppress_observers); // Called everytime mutation happens, i.e. when a child is inserted or removed // from this node. @@ -293,6 +310,8 @@ scoped_refptr<Node> first_child_; scoped_refptr<Node> next_sibling_; + RegisteredObserverList registered_observers_; + DISALLOW_COPY_AND_ASSIGN(Node); };
diff --git a/src/cobalt/dom/node_dispatch_event_test.cc b/src/cobalt/dom/node_dispatch_event_test.cc index 2051305..95b223c 100644 --- a/src/cobalt/dom/node_dispatch_event_test.cc +++ b/src/cobalt/dom/node_dispatch_event_test.cc
@@ -59,7 +59,7 @@ NodeDispatchEventTest::NodeDispatchEventTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "") { + NULL, NULL, NULL, NULL, NULL, "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); document_ = new Document(&html_element_context_);
diff --git a/src/cobalt/dom/node_list_live_test.cc b/src/cobalt/dom/node_list_live_test.cc index e3f757f..1ec534e 100644 --- a/src/cobalt/dom/node_list_live_test.cc +++ b/src/cobalt/dom/node_list_live_test.cc
@@ -30,7 +30,7 @@ NodeListLiveTest() : dom_stat_tracker_("NodeListLiveTest"), html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, &dom_stat_tracker_, ""), + NULL, NULL, NULL, NULL, &dom_stat_tracker_, ""), document_(new Document(&html_element_context_)) {} ~NodeListLiveTest() OVERRIDE {}
diff --git a/src/cobalt/dom/node_list_test.cc b/src/cobalt/dom/node_list_test.cc index c2e7b9a..3b52082 100644 --- a/src/cobalt/dom/node_list_test.cc +++ b/src/cobalt/dom/node_list_test.cc
@@ -30,7 +30,8 @@ NodeListTest() : dom_stat_tracker_(new DomStatTracker("NodeListTest")), html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, dom_stat_tracker_.get(), ""), + NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), + ""), document_(new Document(&html_element_context_)) {} ~NodeListTest() OVERRIDE {}
diff --git a/src/cobalt/dom/node_test.cc b/src/cobalt/dom/node_test.cc index a4abe5e..d7e6eda 100644 --- a/src/cobalt/dom/node_test.cc +++ b/src/cobalt/dom/node_test.cc
@@ -78,7 +78,7 @@ NodeTest::NodeTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "") { + NULL, NULL, NULL, NULL, NULL, "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); document_ = new Document(&html_element_context_);
diff --git a/src/cobalt/dom/registered_observer.h b/src/cobalt/dom/registered_observer.h new file mode 100644 index 0000000..ec46bf8 --- /dev/null +++ b/src/cobalt/dom/registered_observer.h
@@ -0,0 +1,55 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COBALT_DOM_REGISTERED_OBSERVER_H_ +#define COBALT_DOM_REGISTERED_OBSERVER_H_ + +#include "base/memory/ref_counted.h" +#include "cobalt/dom/mutation_observer.h" +#include "cobalt/dom/mutation_observer_init.h" + +namespace cobalt { +namespace dom { + +class Node; + +// Represents the concept of a "registered observer" as described in the +// Mutation Observer spec. +// https://www.w3.org/TR/dom/#registered-observer +// This class is expected to be used internally in the Node class as a part of +// mutation reporting. +class RegisteredObserver { + public: + // A RegisteredObserver must not outlive the |target| node that is being + // observed. + RegisteredObserver(const Node* target, + const scoped_refptr<MutationObserver>& observer, + const MutationObserverInit& options) + : target_(target), observer_(observer), options_(options) {} + + const scoped_refptr<MutationObserver>& observer() const { return observer_; } + const MutationObserverInit& options() const { return options_; } + void set_options(const MutationObserverInit& options) { options_ = options; } + const Node* target() const { return target_; } + + private: + const Node* target_; + scoped_refptr<MutationObserver> observer_; + MutationObserverInit options_; +}; +} // namespace dom +} // namespace cobalt +#endif // COBALT_DOM_REGISTERED_OBSERVER_H_
diff --git a/src/cobalt/dom/registered_observer_list.cc b/src/cobalt/dom/registered_observer_list.cc new file mode 100644 index 0000000..4e86008 --- /dev/null +++ b/src/cobalt/dom/registered_observer_list.cc
@@ -0,0 +1,109 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cobalt/dom/registered_observer_list.h" + +namespace cobalt { +namespace dom { +namespace { +// This algorithm is part of the description of the observe() method. It may +// modify |options| and returns false if a TypeError should be thrown. +// https://www.w3.org/TR/dom/#dom-mutationobserver-observe +bool InitializeOptions(MutationObserverInit* options) { + if (options->has_attribute_old_value() || options->has_attribute_filter()) { + // 1. If either options' attributeOldValue or attributeFilter is present and + // options' attributes is omitted, set options' attributes to true. + if (!options->has_attributes()) { + options->set_attributes(true); + } + // 4. If options' attributeOldValue is true and options' attributes is + // false, throw a JavaScript TypeError. + // 5. If options' attributeFilter is present and options' attributes is + // false, throw a JavaScript TypeError. + if (!options->attributes()) { + return false; + } + } + if (options->has_character_data_old_value()) { + // 2. If options' characterDataOldValue is present and options' + // characterData is omitted, set options' characterData to true. + if (!options->has_character_data()) { + options->set_character_data(true); + } + // 6. If options' characterDataOldValue is true and options' characterData + // is false, throw a JavaScript TypeError. + if (!options->character_data()) { + return false; + } + } + // 3. If none of options' childList attributes, and characterData is true, + // throw a TypeError. + const bool child_list = options->child_list(); + const bool attributes = options->has_attributes() && options->attributes(); + const bool character_data = + options->has_character_data() && options->character_data(); + if (!(child_list || attributes || character_data)) { + return false; + } + return true; +} +} // namespace + +bool RegisteredObserverList::AddMutationObserver( + const scoped_refptr<MutationObserver>& observer, + const MutationObserverInit& const_options) { + MutationObserverInit options(const_options); + if (!InitializeOptions(&options)) { + return false; + } + // https://www.w3.org/TR/dom/#dom-mutationobserver-observe + // 7. For each registered observer registered in target's list of registered + // observers whose observer is the context object: + // 1. Remove all transient registered observers whose source is + // registered. + // 2. Replace registered's options with options. + typedef RegisteredObserverVector::iterator RegisteredObserverIterator; + for (RegisteredObserverIterator it = registered_observers_.begin(); + it != registered_observers_.end(); ++it) { + // TODO: Remove transient registered observers. + if (it->observer() == observer) { + it->set_options(options); + return true; + } + } + // 8. Otherwise, add a new registered observer to target's list of registered + // observers with the context object as the observer and options as the + // options, and add target to context object's list of nodes on which it is + // registered. + registered_observers_.push_back( + RegisteredObserver(target_, observer, options)); + return true; +} + +void RegisteredObserverList::RemoveMutationObserver( + const scoped_refptr<MutationObserver>& observer) { + typedef RegisteredObserverVector::iterator RegisteredObserverIterator; + for (RegisteredObserverIterator it = registered_observers_.begin(); + it != registered_observers_.end(); ++it) { + if (it->observer() == observer) { + registered_observers_.erase(it); + return; + } + } + NOTREACHED() << "Did not find a mutation observer to unregister."; +} +} // namespace dom +} // namespace cobalt
diff --git a/src/cobalt/dom/registered_observer_list.h b/src/cobalt/dom/registered_observer_list.h new file mode 100644 index 0000000..8ab2365 --- /dev/null +++ b/src/cobalt/dom/registered_observer_list.h
@@ -0,0 +1,62 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COBALT_DOM_REGISTERED_OBSERVER_LIST_H_ +#define COBALT_DOM_REGISTERED_OBSERVER_LIST_H_ + +#include <vector> + +#include "base/memory/ref_counted.h" +#include "cobalt/dom/mutation_observer.h" +#include "cobalt/dom/mutation_observer_init.h" +#include "cobalt/dom/registered_observer.h" + +namespace cobalt { +namespace dom { + +class Node; + +// A list of "registered observers" as described in the Mutation Observer spec. +// https://www.w3.org/TR/dom/#registered-observer +// +// Implements the functionality described in the MutationObserver.observe +// method: +// https://www.w3.org/TR/dom/#dom-mutationobserver-observe +class RegisteredObserverList { + public: + typedef std::vector<RegisteredObserver> RegisteredObserverVector; + + // A RegisteredObserverList must not outlive the |target| node that is being + // observed. + explicit RegisteredObserverList(const Node* target) : target_(target) {} + + // Implement the MutationObserver.observe method + // https://www.w3.org/TR/dom/#dom-mutationobserver-observe + bool AddMutationObserver(const scoped_refptr<MutationObserver>& observer, + const MutationObserverInit& options); + void RemoveMutationObserver(const scoped_refptr<MutationObserver>& observer); + + const RegisteredObserverVector& registered_observers() { + return registered_observers_; + } + + private: + const Node* target_; + RegisteredObserverVector registered_observers_; +}; +} // namespace dom +} // namespace cobalt +#endif // COBALT_DOM_REGISTERED_OBSERVER_LIST_H_
diff --git a/src/cobalt/dom/rule_matching_test.cc b/src/cobalt/dom/rule_matching_test.cc index c8b1135..faf8f73 100644 --- a/src/cobalt/dom/rule_matching_test.cc +++ b/src/cobalt/dom/rule_matching_test.cc
@@ -45,7 +45,7 @@ dom_parser_(new dom_parser::Parser()), dom_stat_tracker_(new DomStatTracker("RuleMatchingTest")), html_element_context_(NULL, css_parser_.get(), dom_parser_.get(), NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), ""), document_(new Document(&html_element_context_)), root_(document_->CreateElement("html")->AsHTMLElement()) {
diff --git a/src/cobalt/dom/serializer_test.cc b/src/cobalt/dom/serializer_test.cc index dedcbe1..e6ccd63 100644 --- a/src/cobalt/dom/serializer_test.cc +++ b/src/cobalt/dom/serializer_test.cc
@@ -47,7 +47,8 @@ : dom_parser_(new dom_parser::Parser()), dom_stat_tracker_(new DomStatTracker("SerializerTest")), html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, dom_stat_tracker_.get(), ""), + NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), + ""), document_(new Document(&html_element_context_)), root_(new Element(document_, base::Token("root"))), source_location_(base::SourceLocation("[object SerializerTest]", 1, 1)) {}
diff --git a/src/cobalt/dom/text_test.cc b/src/cobalt/dom/text_test.cc index 5b504b8..381e24c 100644 --- a/src/cobalt/dom/text_test.cc +++ b/src/cobalt/dom/text_test.cc
@@ -41,7 +41,7 @@ TextTest::TextTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "") { + NULL, NULL, NULL, NULL, NULL, "") { EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks()); document_ = new Document(&html_element_context_); }
diff --git a/src/cobalt/dom/window.cc b/src/cobalt/dom/window.cc index 57ee8a5..25b6106 100644 --- a/src/cobalt/dom/window.cc +++ b/src/cobalt/dom/window.cc
@@ -68,6 +68,7 @@ loader::image::ReducedCacheCapacityManager* reduced_image_cache_capacity_manager, loader::font::RemoteTypefaceCache* remote_typeface_cache, + loader::mesh::MeshCache* mesh_cache, LocalStorageDatabase* local_storage_database, media::CanPlayTypeHandler* can_play_type_handler, media::WebMediaPlayerFactory* web_media_player_factory, @@ -91,7 +92,7 @@ fetcher_factory, css_parser, dom_parser, can_play_type_handler, web_media_player_factory, script_runner, media_source_registry, resource_provider, image_cache, reduced_image_cache_capacity_manager, - remote_typeface_cache, dom_stat_tracker, language)), + remote_typeface_cache, mesh_cache, dom_stat_tracker, language)), performance_(new Performance(new base::SystemMonotonicClock())), ALLOW_THIS_IN_INITIALIZER_LIST(document_(new Document( html_element_context_.get(),
diff --git a/src/cobalt/dom/window.h b/src/cobalt/dom/window.h index 8e48bc7..30a57d9 100644 --- a/src/cobalt/dom/window.h +++ b/src/cobalt/dom/window.h
@@ -34,6 +34,7 @@ #include "cobalt/dom/event_target.h" #include "cobalt/dom/media_query_list.h" #include "cobalt/dom/media_source.h" +#include "cobalt/dom/mutation_observer_task_manager.h" #include "cobalt/dom/parser.h" #include "cobalt/network_bridge/cookie_jar.h" #include "cobalt/network_bridge/net_poster.h" @@ -46,6 +47,7 @@ #include "cobalt/loader/font/remote_typeface_cache.h" #include "cobalt/loader/image/image_cache.h" #include "cobalt/loader/loader.h" +#include "cobalt/loader/mesh/mesh_cache.h" #include "cobalt/media/can_play_type_handler.h" #include "cobalt/media/web_media_player_factory.h" #include "cobalt/script/callback_function.h" @@ -92,6 +94,7 @@ loader::image::ReducedCacheCapacityManager* reduced_image_cache_capacity_manager, loader::font::RemoteTypefaceCache* remote_typeface_cache, + loader::mesh::MeshCache* mesh_cache, LocalStorageDatabase* local_storage_database, media::CanPlayTypeHandler* can_play_type_handler, media::WebMediaPlayerFactory* web_media_player_factory,
diff --git a/src/cobalt/dom/window_test.cc b/src/cobalt/dom/window_test.cc index 8879146..fe10614 100644 --- a/src/cobalt/dom/window_test.cc +++ b/src/cobalt/dom/window_test.cc
@@ -53,7 +53,7 @@ url_("about:blank"), window_(new Window( 1920, 1080, css_parser_.get(), dom_parser_.get(), - fetcher_factory_.get(), NULL, NULL, NULL, NULL, + fetcher_factory_.get(), NULL, NULL, NULL, NULL, NULL, &local_storage_database_, stub_media_module_.get(), stub_media_module_.get(), NULL, NULL, NULL, NULL, url_, "", "en-US", base::Callback<void(const GURL &)>(),
diff --git a/src/cobalt/dom/xml_document_test.cc b/src/cobalt/dom/xml_document_test.cc index 4603520..e2e48a4 100644 --- a/src/cobalt/dom/xml_document_test.cc +++ b/src/cobalt/dom/xml_document_test.cc
@@ -27,7 +27,7 @@ TEST(XMLDocumentTest, IsXMLDocument) { HTMLElementContext html_element_context(NULL, NULL, 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/html_decoder_test.cc b/src/cobalt/dom_parser/html_decoder_test.cc index 1aed737..9770fab 100644 --- a/src/cobalt/dom_parser/html_decoder_test.cc +++ b/src/cobalt/dom_parser/html_decoder_test.cc
@@ -70,7 +70,7 @@ dom_parser_.get(), NULL /* can_play_type_handler */, NULL /* web_media_player_factory */, &stub_script_runner_, NULL, NULL, NULL, NULL, NULL, - dom_stat_tracker_.get(), ""), + NULL, dom_stat_tracker_.get(), ""), document_( new dom::Document(&html_element_context_, dom::Document::Options())), root_(new dom::Element(document_, base::Token("element"))),
diff --git a/src/cobalt/dom_parser/xml_decoder_test.cc b/src/cobalt/dom_parser/xml_decoder_test.cc index e7336eb..218885b 100644 --- a/src/cobalt/dom_parser/xml_decoder_test.cc +++ b/src/cobalt/dom_parser/xml_decoder_test.cc
@@ -51,7 +51,7 @@ XMLDecoderTest::XMLDecoderTest() : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, 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)) {}
diff --git a/src/cobalt/h5vcc/H5vcc.idl b/src/cobalt/h5vcc/H5vcc.idl index 6a24827..0e16d13 100644 --- a/src/cobalt/h5vcc/H5vcc.idl +++ b/src/cobalt/h5vcc/H5vcc.idl
@@ -36,4 +36,5 @@ readonly attribute H5vccSettings settings; readonly attribute H5vccStorage storage; readonly attribute H5vccSystem system; + readonly attribute H5vccTraceEvent traceEvent; };
diff --git a/src/cobalt/h5vcc/H5vccTraceEvent.idl b/src/cobalt/h5vcc/H5vccTraceEvent.idl new file mode 100644 index 0000000..4e64778 --- /dev/null +++ b/src/cobalt/h5vcc/H5vccTraceEvent.idl
@@ -0,0 +1,38 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +interface H5vccTraceEvent { + void start(); + void stop(); + + void traceBegin(DOMString category, DOMString name); + void traceEnd(DOMString category, DOMString name); + + void traceIntBegin(DOMString category, DOMString name, + DOMString arg1_name, long arg1_value); + void traceIntEnd(DOMString category, DOMString name, + DOMString arg1_name, long arg1_value); + + void traceFloatBegin(DOMString category, DOMString name, + DOMString arg1_name, float arg1_value); + void traceFloatEnd(DOMString category, DOMString name, + DOMString arg1_name, float arg1_value); + + void traceStringBegin(DOMString category, DOMString name, + DOMString arg1_name, DOMString arg1_value); + void traceStringEnd(DOMString category, DOMString name, + DOMString arg1_name, DOMString arg1_value); +};
diff --git a/src/cobalt/h5vcc/h5vcc.cc b/src/cobalt/h5vcc/h5vcc.cc index b220382..cb4633e 100644 --- a/src/cobalt/h5vcc/h5vcc.cc +++ b/src/cobalt/h5vcc/h5vcc.cc
@@ -28,6 +28,7 @@ settings_ = new H5vccSettings(settings.media_module); storage_ = new H5vccStorage(settings.network_module); system_ = new H5vccSystem(settings.media_module); + trace_event_ = new H5vccTraceEvent(); } } // namespace h5vcc
diff --git a/src/cobalt/h5vcc/h5vcc.gyp b/src/cobalt/h5vcc/h5vcc.gyp index c208fd0..d23ac7c 100644 --- a/src/cobalt/h5vcc/h5vcc.gyp +++ b/src/cobalt/h5vcc/h5vcc.gyp
@@ -52,6 +52,8 @@ 'h5vcc_storage.h', 'h5vcc_system.cc', 'h5vcc_system.h', + 'h5vcc_trace_event.cc', + 'h5vcc_trace_event.h', ], 'dependencies': [ '<(DEPTH)/cobalt/build/cobalt_build_id.gyp:cobalt_build_id',
diff --git a/src/cobalt/h5vcc/h5vcc.h b/src/cobalt/h5vcc/h5vcc.h index 369cad3..6f09230 100644 --- a/src/cobalt/h5vcc/h5vcc.h +++ b/src/cobalt/h5vcc/h5vcc.h
@@ -27,6 +27,7 @@ #include "cobalt/h5vcc/h5vcc_settings.h" #include "cobalt/h5vcc/h5vcc_storage.h" #include "cobalt/h5vcc/h5vcc_system.h" +#include "cobalt/h5vcc/h5vcc_trace_event.h" #include "cobalt/script/wrappable.h" namespace cobalt { @@ -59,6 +60,9 @@ const scoped_refptr<H5vccSettings>& settings() const { return settings_; } const scoped_refptr<H5vccStorage>& storage() const { return storage_; } const scoped_refptr<H5vccSystem>& system() const { return system_; } + const scoped_refptr<H5vccTraceEvent>& trace_event() const { + return trace_event_; + } DEFINE_WRAPPABLE_TYPE(H5vcc); @@ -70,6 +74,7 @@ scoped_refptr<H5vccSettings> settings_; scoped_refptr<H5vccStorage> storage_; scoped_refptr<H5vccSystem> system_; + scoped_refptr<H5vccTraceEvent> trace_event_; DISALLOW_COPY_AND_ASSIGN(H5vcc); };
diff --git a/src/cobalt/h5vcc/h5vcc_trace_event.cc b/src/cobalt/h5vcc/h5vcc_trace_event.cc new file mode 100644 index 0000000..ca43293 --- /dev/null +++ b/src/cobalt/h5vcc/h5vcc_trace_event.cc
@@ -0,0 +1,46 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cobalt/h5vcc/h5vcc_trace_event.h" + +namespace cobalt { +namespace h5vcc { + +namespace { +const char* kOutputTraceFilename = "h5vcc_trace_event.json"; +} // namespace + +H5vccTraceEvent::H5vccTraceEvent() {} + +void H5vccTraceEvent::Start() { + if (trace_to_file_) { + DLOG(WARNING) << "H5vccTraceEvent is already started."; + } else { + trace_to_file_.reset( + new trace_event::ScopedTraceToFile(FilePath(kOutputTraceFilename))); + } +} + +void H5vccTraceEvent::Stop() { + if (trace_to_file_) { + trace_to_file_.reset(); + } else { + DLOG(WARNING) << "H5vccTraceEvent is already stopped."; + } +} + +} // namespace h5vcc +} // namespace cobalt
diff --git a/src/cobalt/h5vcc/h5vcc_trace_event.h b/src/cobalt/h5vcc/h5vcc_trace_event.h new file mode 100644 index 0000000..f3e45f6 --- /dev/null +++ b/src/cobalt/h5vcc/h5vcc_trace_event.h
@@ -0,0 +1,87 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COBALT_H5VCC_H5VCC_TRACE_EVENT_H_ +#define COBALT_H5VCC_H5VCC_TRACE_EVENT_H_ + +#include <string> + +#include "base/debug/trace_event.h" +#include "cobalt/script/wrappable.h" +#include "cobalt/trace_event/scoped_trace_to_file.h" + +namespace cobalt { +namespace h5vcc { + +#define TRACE_EVENT0_FOR_EACH(MacroOp) \ + MacroOp(Begin, BEGIN) \ + MacroOp(End, END) \ + +#define DEFINE_H5VCC_TRACE_EVENT0(Name, FunctionName) \ + void Trace##Name(const std::string& category, const std::string& name) { \ + UNREFERENCED_PARAMETER(category); \ + UNREFERENCED_PARAMETER(name); \ + TRACE_EVENT_COPY_##FunctionName##0(category.c_str(), name.c_str()); \ + } + +#define TRACE_EVENT1_FOR_EACH(MacroOp) \ + MacroOp(IntBegin, BEGIN, int32) \ + MacroOp(IntEnd, END, int32) \ + MacroOp(FloatBegin, BEGIN, float) \ + MacroOp(FloatEnd, END, float) \ + MacroOp(StringBegin, BEGIN, const std::string&) \ + MacroOp(StringEnd, END, const std::string&) + +#define DEFINE_H5VCC_TRACE_EVENT1(TraceName, FunctionName, CppType) \ + void Trace##TraceName(const std::string& category, const std::string& name, \ + const std::string& arg1_name, CppType arg1_value) { \ + UNREFERENCED_PARAMETER(category); \ + UNREFERENCED_PARAMETER(name); \ + UNREFERENCED_PARAMETER(arg1_name); \ + UNREFERENCED_PARAMETER(arg1_value); \ + TRACE_EVENT_COPY_##FunctionName##1(category.c_str(), name.c_str(), \ + arg1_name.c_str(), arg1_value); \ + } + +class H5vccTraceEvent : public script::Wrappable { + public: + H5vccTraceEvent(); + + void Start(); + void Stop(); + + TRACE_EVENT0_FOR_EACH(DEFINE_H5VCC_TRACE_EVENT0) + TRACE_EVENT1_FOR_EACH(DEFINE_H5VCC_TRACE_EVENT1) + + DEFINE_WRAPPABLE_TYPE(H5vccTraceEvent); + + private: + // This object can be set to start a trace. + // While initialized, it means that a trace is on-going. + scoped_ptr<trace_event::ScopedTraceToFile> trace_to_file_; + + DISALLOW_COPY_AND_ASSIGN(H5vccTraceEvent); +}; + +#undef DEFINE_H5VCC_TRACE_EVENT0 +#undef TRACE_EVENT0_FOR_EACH +#undef DEFINE_H5VCC_TRACE_EVENT1 +#undef TRACE_EVENT1_FOR_EACH + +} // namespace h5vcc +} // namespace cobalt + +#endif // COBALT_H5VCC_H5VCC_TRACE_EVENT_H_
diff --git a/src/cobalt/layout/layout_manager.cc b/src/cobalt/layout/layout_manager.cc index 1639aa5..aa2f4d9 100644 --- a/src/cobalt/layout/layout_manager.cc +++ b/src/cobalt/layout/layout_manager.cc
@@ -108,8 +108,10 @@ : window_(window), locale_(icu::Locale::createCanonical(language.c_str())), used_style_provider_( - new UsedStyleProvider(window->html_element_context()->image_cache(), - window->document()->font_cache())), + new UsedStyleProvider(window->html_element_context(), + window->html_element_context()->image_cache(), + window->document()->font_cache(), + window->html_element_context()->mesh_cache())), on_render_tree_produced_callback_(on_render_tree_produced), layout_trigger_(layout_trigger), layout_dirty_(StringPrintf("%s.Layout.IsDirty", name.c_str()), true,
diff --git a/src/cobalt/layout/replaced_box.cc b/src/cobalt/layout/replaced_box.cc index 7bcb96a..0163f06 100644 --- a/src/cobalt/layout/replaced_box.cc +++ b/src/cobalt/layout/replaced_box.cc
@@ -20,6 +20,7 @@ #include "base/bind.h" #include "base/logging.h" +#include "cobalt/base/polymorphic_downcast.h" #include "cobalt/cssom/filter_function_list_value.h" #include "cobalt/cssom/keyword_value.h" #include "cobalt/cssom/mtm_function.h" @@ -284,13 +285,34 @@ const cssom::MTMFunction* mtm_filter_function = cssom::MTMFunction::ExtractFromFilterList(computed_style()->filter()); - Node* content_node; + Node* content_node = NULL; if (mtm_filter_function) { + const cssom::MTMFunction::MeshSpec& spec = mtm_filter_function->mesh_spec(); const scoped_refptr<cssom::KeywordValue>& stereo_mode_keyword_value = mtm_filter_function->stereo_mode(); render_tree::StereoMode stereo_mode = ReadStereoMode(stereo_mode_keyword_value); - content_node = new FilterNode(MapToMeshFilter(stereo_mode), frame_node); + + if (spec.mesh_type() == cssom::MTMFunction::kUrls) { + // Custom mesh URLs. + cssom::URLValue* url_value = + base::polymorphic_downcast<cssom::URLValue*>(spec.mesh_url().get()); + GURL url(url_value->value()); + scoped_refptr<render_tree::Mesh> mesh( + used_style_provider()->ResolveURLToMesh(url)); + + DCHECK(mesh) << "Could not load mesh specified by map-to-mesh filter."; + + content_node = + new FilterNode(MapToMeshFilter(stereo_mode, mesh), frame_node); + } else if (spec.mesh_type() == cssom::MTMFunction::kEquirectangular) { + // Default equirectangular mesh. + content_node = new FilterNode(MapToMeshFilter(stereo_mode), frame_node); + } else { + NOTREACHED() << "Invalid mesh specification type. Expected" + "'equirectangular' keyword or list of URLs."; + content_node = frame_node; + } } else { content_node = frame_node; }
diff --git a/src/cobalt/layout/used_style.cc b/src/cobalt/layout/used_style.cc index 26cc44d..0464bf9 100644 --- a/src/cobalt/layout/used_style.cc +++ b/src/cobalt/layout/used_style.cc
@@ -40,6 +40,7 @@ #include "cobalt/cssom/transform_function_visitor.h" #include "cobalt/cssom/transform_matrix_function_value.h" #include "cobalt/cssom/translate_function.h" +#include "cobalt/loader/mesh/mesh_cache.h" #include "cobalt/math/transform_2d.h" #include "cobalt/render_tree/brush.h" #include "cobalt/render_tree/composition_node.h" @@ -406,9 +407,14 @@ } // namespace -UsedStyleProvider::UsedStyleProvider(loader::image::ImageCache* image_cache, - dom::FontCache* font_cache) - : image_cache_(image_cache), font_cache_(font_cache) {} +UsedStyleProvider::UsedStyleProvider( + dom::HTMLElementContext* html_element_context, + loader::image::ImageCache* image_cache, dom::FontCache* font_cache, + loader::mesh::MeshCache* mesh_cache) + : html_element_context_(html_element_context), + image_cache_(image_cache), + font_cache_(font_cache), + mesh_cache_(mesh_cache) {} scoped_refptr<dom::FontList> UsedStyleProvider::GetUsedFontList( const scoped_refptr<cssom::PropertyValue>& font_family_refptr, @@ -465,6 +471,12 @@ return image_cache_->CreateCachedResource(url)->TryGetResource(); } +scoped_refptr<render_tree::Mesh> UsedStyleProvider::ResolveURLToMesh( + const GURL& url) { + DCHECK(mesh_cache_); + return mesh_cache_->CreateCachedResource(url)->TryGetResource(); +} + void UsedStyleProvider::CleanupAfterLayout() { // Clear out the last font properties prior to requesting that the font cache // process inactive font lists. The reason for this is that the font cache
diff --git a/src/cobalt/layout/used_style.h b/src/cobalt/layout/used_style.h index 8c964a1..b3212c9 100644 --- a/src/cobalt/layout/used_style.h +++ b/src/cobalt/layout/used_style.h
@@ -27,12 +27,14 @@ #include "cobalt/cssom/transform_matrix.h" #include "cobalt/dom/font_cache.h" #include "cobalt/dom/font_list.h" +#include "cobalt/dom/html_element_context.h" #include "cobalt/layout/layout_unit.h" #include "cobalt/layout/size_layout_unit.h" #include "cobalt/loader/image/image_cache.h" #include "cobalt/math/size.h" #include "cobalt/math/size_f.h" #include "cobalt/render_tree/color_rgba.h" +#include "cobalt/render_tree/mesh.h" #include "cobalt/render_tree/node.h" #include "cobalt/render_tree/resource_provider.h" #include "cobalt/render_tree/rounded_corners.h" @@ -56,8 +58,10 @@ class UsedStyleProvider { public: - UsedStyleProvider(loader::image::ImageCache* image_cache, - dom::FontCache* font_cache); + UsedStyleProvider(dom::HTMLElementContext* html_element_context, + loader::image::ImageCache* image_cache, + dom::FontCache* font_cache, + loader::mesh::MeshCache* mesh_cache = NULL); scoped_refptr<dom::FontList> GetUsedFontList( const scoped_refptr<cssom::PropertyValue>& font_family_refptr, @@ -66,19 +70,26 @@ const scoped_refptr<cssom::PropertyValue>& font_weight_refptr); scoped_refptr<render_tree::Image> ResolveURLToImage(const GURL& url); + scoped_refptr<render_tree::Mesh> ResolveURLToMesh(const GURL& url); bool has_image_cache(const loader::image::ImageCache* image_cache) const { return image_cache == image_cache_; } + dom::HTMLElementContext* html_element_context() const { + return html_element_context_; + } + private: // Called after layout is completed so that it can perform any necessary // cleanup. Its primary current purpose is making a request to the font cache // to remove any font lists that are no longer being referenced by boxes. void CleanupAfterLayout(); + dom::HTMLElementContext* html_element_context_; loader::image::ImageCache* const image_cache_; dom::FontCache* const font_cache_; + loader::mesh::MeshCache* const mesh_cache_; // |font_list_key_| is retained in between lookups so that the font names // vector will not need to allocate elements each time that it is populated.
diff --git a/src/cobalt/loader/blob_fetcher.cc b/src/cobalt/loader/blob_fetcher.cc index d6a48b8..4118206 100644 --- a/src/cobalt/loader/blob_fetcher.cc +++ b/src/cobalt/loader/blob_fetcher.cc
@@ -29,9 +29,8 @@ resolver_callback_(resolver_callback), ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { DCHECK(!resolver_callback_.is_null()); - MessageLoop::current()->PostTask( - FROM_HERE, - base::Bind(&BlobFetcher::Fetch, weak_ptr_factory_.GetWeakPtr())); + + Fetch(); } void BlobFetcher::Fetch() {
diff --git a/src/cobalt/loader/loader.gyp b/src/cobalt/loader/loader.gyp index 45f5be4..3dd867c 100644 --- a/src/cobalt/loader/loader.gyp +++ b/src/cobalt/loader/loader.gyp
@@ -58,6 +58,7 @@ 'loader_factory.cc', 'loader_factory.h', 'loader_types.h', + 'mesh/mesh_cache.h', 'mesh/mesh_decoder.cc', 'mesh/mesh_decoder.h', 'mesh/projection_codec/constants.h', @@ -172,6 +173,7 @@ 'sources': [ '<(input_directory)/splash_screen.css', '<(input_directory)/splash_screen.html', + '<(input_directory)/splash_screen.js', '<(input_directory)/you_tube_logo.png', ], 'actions': [ @@ -184,7 +186,7 @@ 'outputs': [ '<(output_path)', ], - 'action': ['python', '<(script_path)', 'LoaderEmbeddedResources', '<(input_directory)', '<(output_path)'], + 'action': ['python', '<(script_path)', 'LoaderEmbeddedResources', '<(output_path)', '<(input_directory)'], 'message': 'Embedding layout resources in "<(input_directory)" into header file, "<(output_path)".', }, ],
diff --git a/src/cobalt/loader/mesh/mesh_cache.h b/src/cobalt/loader/mesh/mesh_cache.h new file mode 100644 index 0000000..4e01047 --- /dev/null +++ b/src/cobalt/loader/mesh/mesh_cache.h
@@ -0,0 +1,62 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COBALT_LOADER_MESH_MESH_CACHE_H_ +#define COBALT_LOADER_MESH_MESH_CACHE_H_ + +#include <string> + +#include "cobalt/loader/loader_factory.h" +#include "cobalt/loader/resource_cache.h" +#include "cobalt/render_tree/mesh.h" + +namespace cobalt { +namespace loader { +namespace mesh { + +// |MeshResourceCacheType| provides the types and implements the functions +// required by |ResourceCache<MeshResourceCacheType>| +struct MeshResourceCacheType { + typedef render_tree::Mesh ResourceType; + + static uint32 GetEstimatedSizeInBytes( + const scoped_refptr<ResourceType>& resource) { + return resource->GetEstimatedSizeInBytes(); + } +}; + +typedef CachedResource<MeshResourceCacheType> CachedMesh; +typedef CachedResourceReferenceWithCallbacks<MeshResourceCacheType> + CachedMeshReferenceWithCallbacks; +typedef CachedMeshReferenceWithCallbacks::CachedResourceReferenceVector + CachedMeshReferenceVector; + +typedef ResourceCache<MeshResourceCacheType> MeshCache; + +// CreateMeshCache() provides a mechanism for creating an |MeshCache|. +inline static scoped_ptr<MeshCache> CreateMeshCache( + const std::string& name, uint32 cache_capacity, + loader::LoaderFactory* loader_factory) { + return make_scoped_ptr<MeshCache>(new MeshCache( + name, cache_capacity, base::Bind(&loader::LoaderFactory::CreateMeshLoader, + base::Unretained(loader_factory)))); +} + +} // namespace mesh +} // namespace loader +} // namespace cobalt + +#endif // COBALT_LOADER_MESH_MESH_CACHE_H_
diff --git a/src/cobalt/loader/mesh/mesh_decoder.cc b/src/cobalt/loader/mesh/mesh_decoder.cc index 7333776..5b41f44 100644 --- a/src/cobalt/loader/mesh/mesh_decoder.cc +++ b/src/cobalt/loader/mesh/mesh_decoder.cc
@@ -74,6 +74,7 @@ scoped_ptr<MeshCollection> mesh_collection_; std::vector<render_tree::Mesh::Vertex> mesh_vertices_; render_tree::Mesh::DrawMode mesh_draw_mode_; + uint32 crc_; DISALLOW_COPY_AND_ASSIGN(MeshDecoderSink); }; @@ -84,7 +85,7 @@ MeshDecoderSink::~MeshDecoderSink() {} bool MeshDecoderSink::IsCached(uint32 crc) { - UNREFERENCED_PARAMETER(crc); + crc_ = crc; return false; } @@ -140,7 +141,7 @@ void MeshDecoderSink::EndMeshInstance() { mesh_collection_->push_back(scoped_refptr<render_tree::Mesh>( - new render_tree::Mesh(mesh_vertices_, mesh_draw_mode_))); + new render_tree::Mesh(mesh_vertices_, mesh_draw_mode_, crc_))); } void MeshDecoderSink::EndMeshCollection() { @@ -215,9 +216,9 @@ return; } - if (raw_data_->size() == 0) { - // Mesh projection boxes cannot be empty, since they are BMFF boxes and - // carry at least a size and type 4cc. + if (raw_data_->size() <= 4) { + // Mesh projection boxes cannot be empty, since they carry at least the + // version and flags. error_callback_.Run("MeshDecoder passed an empty buffer, cannot decode."); return; } @@ -225,8 +226,9 @@ std::string error_string; MeshDecoderSink::MeshCollectionList mesh_collection_list; - if (MeshDecoderSink::Decode(&raw_data_->at(0), raw_data_->size(), - &mesh_collection_list)) { + if (MeshDecoderSink::DecodeBoxContents( + 0, 0, &raw_data_->at(4), // Skip version and flags. + raw_data_->size(), &mesh_collection_list)) { scoped_refptr<render_tree::Mesh> mesh = MeshDecoderSink::ExtractSingleMesh(mesh_collection_list);
diff --git a/src/cobalt/loader/mesh/mesh_decoder.h b/src/cobalt/loader/mesh/mesh_decoder.h index d11e210..1558acd 100644 --- a/src/cobalt/loader/mesh/mesh_decoder.h +++ b/src/cobalt/loader/mesh/mesh_decoder.h
@@ -41,6 +41,15 @@ const SuccessCallback& success_callback, const ErrorCallback& error_callback); + // This function is used for binding a callback to create a MeshDecoder. + static scoped_ptr<Decoder> Create( + render_tree::ResourceProvider* resource_provider, + const SuccessCallback& success_callback, + const ErrorCallback& error_callback) { + return scoped_ptr<Decoder>( + new MeshDecoder(resource_provider, success_callback, error_callback)); + } + // From Decoder. void DecodeChunk(const char* data, size_t size) OVERRIDE; void Finish() OVERRIDE;
diff --git a/src/cobalt/loader/resource_cache.h b/src/cobalt/loader/resource_cache.h index d829a35..335c90c 100644 --- a/src/cobalt/loader/resource_cache.h +++ b/src/cobalt/loader/resource_cache.h
@@ -144,6 +144,8 @@ void RunCallbacks(CallbackType type); + void EnableCompletionCallbacks(); + const GURL url_; scoped_refptr<ResourceType> resource_; @@ -154,6 +156,14 @@ base::ThreadChecker cached_resource_thread_checker_; + // In some cases (such as when the resource input data is stored in memory), + // completion callbacks (e.g. resource fetch success/failure) could be + // triggered from within the resource initialization callstack, and we are + // not prepared to handle that. These members let us ensure that we are fully + // initialized before we proceed with any completion callbacks. + bool completion_callbacks_enabled_; + base::Closure completion_callback_; + DISALLOW_COPY_AND_ASSIGN(CachedResource); }; @@ -207,7 +217,9 @@ const GURL& url, const csp::SecurityCallback& security_callback, const CreateLoaderFunction& create_loader_function, ResourceCacheType* resource_cache) - : url_(url), resource_cache_(resource_cache) { + : url_(url), + resource_cache_(resource_cache), + completion_callbacks_enabled_(false) { DCHECK(cached_resource_thread_checker_.CalledOnValidThread()); loader_ = create_loader_function.Run( @@ -220,7 +232,10 @@ CachedResource<CacheType>::CachedResource(const GURL& url, ResourceType* resource, ResourceCacheType* resource_cache) - : url_(url), resource_(resource), resource_cache_(resource_cache) { + : url_(url), + resource_(resource), + resource_cache_(resource_cache), + completion_callbacks_enabled_(false) { DCHECK(cached_resource_thread_checker_.CalledOnValidThread()); } @@ -256,8 +271,14 @@ resource_ = resource; loader_.reset(); - resource_cache_->NotifyResourceLoadingComplete(this, - kOnLoadingSuccessCallbackType); + + completion_callback_ = + base::Bind(&ResourceCacheType::NotifyResourceLoadingComplete, + base::Unretained(resource_cache_), base::Unretained(this), + kOnLoadingSuccessCallbackType); + if (completion_callbacks_enabled_) { + completion_callback_.Run(); + } } template <typename CacheType> @@ -267,8 +288,13 @@ LOG(WARNING) << "Error while loading '" << url_ << "': " << error; loader_.reset(); - resource_cache_->NotifyResourceLoadingComplete(this, - kOnLoadingErrorCallbackType); + completion_callback_ = + base::Bind(&ResourceCacheType::NotifyResourceLoadingComplete, + base::Unretained(resource_cache_), base::Unretained(this), + kOnLoadingErrorCallbackType); + if (completion_callbacks_enabled_) { + completion_callback_.Run(); + } } template <typename CacheType> @@ -304,6 +330,14 @@ } } +template <typename CacheType> +void CachedResource<CacheType>::EnableCompletionCallbacks() { + completion_callbacks_enabled_ = true; + if (!completion_callback_.is_null()) { + completion_callback_.Run(); + } +} + ////////////////////////////////////////////////////////////////////////// // CachedResourceReferenceWithCallbacks ////////////////////////////////////////////////////////////////////////// @@ -563,6 +597,12 @@ url, security_callback_, create_loader_function_, this)); cached_resource_map_.insert( std::make_pair(url.spec(), cached_resource.get())); + + // Only now that we are finished initializing |cached_resource|, allow + // completion callbacks to proceed. This can be an issue for resources that + // load and decode synchronously and immediately. + cached_resource->EnableCompletionCallbacks(); + return cached_resource; }
diff --git a/src/cobalt/loader/testdata/projection.box b/src/cobalt/loader/testdata/projection.box index 22a3bb5..1e5cdff 100644 --- a/src/cobalt/loader/testdata/projection.box +++ b/src/cobalt/loader/testdata/projection.box Binary files differ
diff --git a/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc b/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc index 1c18737..9c00b58 100644 --- a/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc +++ b/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc
@@ -88,6 +88,11 @@ case kSbSystemDeviceTypeTV: youtube_tv_info_->device_type = YouTubeTVInfo::kTV; break; +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + case kSbSystemDeviceTypeAndroidTV: + youtube_tv_info_->device_type = YouTubeTVInfo::kAndroidTV; + break; +#endif // SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION case kSbSystemDeviceTypeDesktopPC: default: youtube_tv_info_->device_type = YouTubeTVInfo::kInvalidDeviceType;
diff --git a/src/cobalt/network/user_agent_string_factory.cc b/src/cobalt/network/user_agent_string_factory.cc index 77a7628..12fe0ef 100644 --- a/src/cobalt/network/user_agent_string_factory.cc +++ b/src/cobalt/network/user_agent_string_factory.cc
@@ -109,6 +109,10 @@ return "STB"; case YouTubeTVInfo::kTV: return "TV"; +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + case YouTubeTVInfo::kAndroidTV: + return "ATV"; +#endif // SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION case YouTubeTVInfo::kInvalidDeviceType: default: NOTREACHED();
diff --git a/src/cobalt/network/user_agent_string_factory.h b/src/cobalt/network/user_agent_string_factory.h index b391595..8d73c3b 100644 --- a/src/cobalt/network/user_agent_string_factory.h +++ b/src/cobalt/network/user_agent_string_factory.h
@@ -48,6 +48,9 @@ struct YouTubeTVInfo { enum DeviceType { kInvalidDeviceType, +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + kAndroidTV, +#endif // SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION kBlueRayDiskPlayer, kGameConsole, kOverTheTopBox,
diff --git a/src/cobalt/render_tree/map_to_mesh_filter.h b/src/cobalt/render_tree/map_to_mesh_filter.h index 0f996fa..29448d5 100644 --- a/src/cobalt/render_tree/map_to_mesh_filter.h +++ b/src/cobalt/render_tree/map_to_mesh_filter.h
@@ -19,6 +19,7 @@ #include "base/logging.h" #include "base/memory/ref_counted.h" +#include "cobalt/render_tree/mesh.h" namespace cobalt { namespace render_tree { @@ -26,16 +27,21 @@ enum StereoMode { kMono, kLeftRight, kTopBottom }; // A MapToMeshFilter can be used to map source content onto a 3D mesh, within a -// specified well-defined viewport. +// specified well-defined viewport. A null mesh indicates the equirectangular +// mesh should be used. class MapToMeshFilter { public: - explicit MapToMeshFilter(const StereoMode stereo_mode) - : stereo_mode_(stereo_mode) {} + explicit MapToMeshFilter(const StereoMode stereo_mode, + scoped_refptr<render_tree::Mesh> mesh = NULL) + : stereo_mode_(stereo_mode), mesh_(mesh) {} StereoMode GetStereoMode() const { return stereo_mode_; } + scoped_refptr<render_tree::Mesh> mesh() const { return mesh_; } + private: StereoMode stereo_mode_; + scoped_refptr<render_tree::Mesh> mesh_; }; } // namespace render_tree
diff --git a/src/cobalt/render_tree/mesh.h b/src/cobalt/render_tree/mesh.h index 334bd60..25c1def 100644 --- a/src/cobalt/render_tree/mesh.h +++ b/src/cobalt/render_tree/mesh.h
@@ -22,6 +22,7 @@ #include "base/basictypes.h" #include "base/logging.h" #include "base/memory/ref_counted.h" +#include "base/optional.h" #include "starboard/types.h" #include "third_party/glm/glm/vec2.hpp" #include "third_party/glm/glm/vec3.hpp" @@ -52,18 +53,25 @@ kDrawModeTriangleFan = 6 }; - Mesh(const std::vector<Vertex>& vertices, const DrawMode mode) - : vertices_(vertices), draw_mode_(CheckDrawMode(mode)) {} + Mesh(const std::vector<Vertex>& vertices, const DrawMode mode, + base::optional<uint32> crc = base::nullopt) + : vertices_(vertices), draw_mode_(CheckDrawMode(mode)), crc_(crc) {} const std::vector<Vertex>& vertices() const { return vertices_; } DrawMode draw_mode() const { return draw_mode_; } + const base::optional<uint32>& crc() const { return crc_; } + uint32 GetEstimatedSizeInBytes() const { return static_cast<uint32>(vertices().size() * sizeof(Vertex) + sizeof(DrawMode)); } + bool HasSameCrcAs(scoped_refptr<Mesh> other_mesh) const { + return other_mesh && other_mesh->crc() == crc_; + } + protected: virtual ~Mesh() {} @@ -86,6 +94,9 @@ const std::vector<Vertex> vertices_; const DrawMode draw_mode_; + // Cyclic Redundancy Check code of the mesh projection box that contains this + // mesh. + const base::optional<uint32> crc_; }; } // namespace render_tree
diff --git a/src/cobalt/renderer/backend/egl/graphics_context.cc b/src/cobalt/renderer/backend/egl/graphics_context.cc index fabca63..c3ab6cd 100644 --- a/src/cobalt/renderer/backend/egl/graphics_context.cc +++ b/src/cobalt/renderer/backend/egl/graphics_context.cc
@@ -64,7 +64,7 @@ // Create a dummy EGLSurface object to be assigned as the target surface // when we need to make OpenGL calls that do not depend on a surface (e.g. // creating a texture). - null_surface_ = new PBufferRenderTargetEGL(display, config, math::Size(1, 1)); + null_surface_ = new PBufferRenderTargetEGL(display, config, math::Size(0, 0)); ScopedMakeCurrent scoped_current_context(this);
diff --git a/src/cobalt/renderer/backend/egl/graphics_system.cc b/src/cobalt/renderer/backend/egl/graphics_system.cc index a83bb00..7a73c9c 100644 --- a/src/cobalt/renderer/backend/egl/graphics_system.cc +++ b/src/cobalt/renderer/backend/egl/graphics_system.cc
@@ -75,8 +75,10 @@ 8, EGL_ALPHA_SIZE, 8, +#if !SB_HAS_QUIRK(NO_EGL_BIND_TO_TEXTURE) EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE, +#endif EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE};
diff --git a/src/cobalt/renderer/backend/egl/pbuffer_render_target.cc b/src/cobalt/renderer/backend/egl/pbuffer_render_target.cc index d7af3f7..0634c82 100644 --- a/src/cobalt/renderer/backend/egl/pbuffer_render_target.cc +++ b/src/cobalt/renderer/backend/egl/pbuffer_render_target.cc
@@ -35,6 +35,14 @@ EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, EGL_NONE, }; + // When a dummy 0-area render target is requested, it will not be used as a + // drawing target and we therefore don't require for it to be a texture. + if (dimensions.height() == 0 && dimensions.width() == 0) { + // Fake 1x1 to avoid an arithmetic error (SIGFPE) in eglMakeCurrent() on + // some platforms. + surface_attrib_list[1] = surface_attrib_list[3] = 1; + surface_attrib_list[4] = EGL_NONE; + } surface_ = eglCreatePbufferSurface(display_, config_, surface_attrib_list);
diff --git a/src/cobalt/renderer/glimp_shaders/glsl/vertex_mesh.glsl b/src/cobalt/renderer/glimp_shaders/glsl/vertex_mesh.glsl index b41b78f..81611c6 100644 --- a/src/cobalt/renderer/glimp_shaders/glsl/vertex_mesh.glsl +++ b/src/cobalt/renderer/glimp_shaders/glsl/vertex_mesh.glsl
@@ -1,11 +1,10 @@ attribute vec3 a_position; attribute vec2 a_tex_coord; varying vec2 v_tex_coord; -uniform vec2 u_tex_offset; -uniform vec2 u_tex_multiplier; +uniform mat3 u_tex_transform; uniform mat4 u_mvp_matrix; void main() { gl_Position = u_mvp_matrix * vec4(a_position.xyz, 1.0); - v_tex_coord.x = a_tex_coord.x * u_tex_multiplier.x + u_tex_offset.x; - v_tex_coord.y = a_tex_coord.y * u_tex_multiplier.y + u_tex_offset.y; + vec3 tex_coord = u_tex_transform * vec3(a_tex_coord, 1.0); + v_tex_coord = tex_coord.xy; }
diff --git a/src/cobalt/script/engine.gyp b/src/cobalt/script/engine.gyp index 18af9d8..ddb6e3e 100644 --- a/src/cobalt/script/engine.gyp +++ b/src/cobalt/script/engine.gyp
@@ -31,16 +31,8 @@ # building 'all'. 'target_name': 'all_engines', 'type': 'none', - 'conditions': [ - ['OS == "starboard"', { - 'dependencies': [ - 'mozjs/mozjs.gyp:*', - ], - }, { #else - 'dependencies': [ - 'javascriptcore/javascriptcore.gyp:*', - ], - }], + 'dependencies': [ + 'mozjs/mozjs.gyp:*', ], }, ],
diff --git a/src/cobalt/script/engine_variables.gypi b/src/cobalt/script/engine_variables.gypi index 98f91e8..98f413c 100644 --- a/src/cobalt/script/engine_variables.gypi +++ b/src/cobalt/script/engine_variables.gypi
@@ -14,7 +14,6 @@ { 'includes': [ - 'javascriptcore/javascriptcore_variables.gypi', 'mozjs/mozjs_variables.gypi', 'mozjs-45/mozjs-45_variables.gypi', ],
diff --git a/src/cobalt/script/javascriptcore/constructor_base.h b/src/cobalt/script/javascriptcore/constructor_base.h deleted file mode 100644 index ab192f1..0000000 --- a/src/cobalt/script/javascriptcore/constructor_base.h +++ /dev/null
@@ -1,44 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_CONSTRUCTOR_BASE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_CONSTRUCTOR_BASE_H_ - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// All JavaScriptCore interface object classes will inherit from this. -class ConstructorBase : public JSC::JSFunction { - public: - // static override. This prevents this object from being called as a normal - // function, throwing a TypeError if the user attempts to do so. - static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&) { - return JSC::CallTypeNone; - } - - protected: - ConstructorBase(JSC::ExecState* exec_state, - JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : JSC::JSFunction(exec_state, global_object, structure) {} -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_CONSTRUCTOR_BASE_H_
diff --git a/src/cobalt/script/javascriptcore/conversion_helpers.cc b/src/cobalt/script/javascriptcore/conversion_helpers.cc deleted file mode 100644 index 9484c0d..0000000 --- a/src/cobalt/script/javascriptcore/conversion_helpers.cc +++ /dev/null
@@ -1,86 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/conversion_helpers.h" - -#include "base/logging.h" -#include "base/string_util.h" -#include "base/utf_string_conversions.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSScope.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSString.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -JSC::JSValue StringToJSValue(JSC::JSGlobalData* global_data, - const std::string& utf8_string) { - WTF::String wtf_string = ToWTFString(utf8_string); - JSC::JSString* js_string = JSC::jsString(global_data, wtf_string); - JSC::JSValue string_value(js_string); - DCHECK(string_value.isString()); - return string_value; -} - -void JSValueToString(JSC::ExecState* exec_state, JSC::JSValue value, - std::string* out_string) { - // By default null and undefined evaluate to the strings "null" and - // "undefined" respectively. - // TODO: Optimize this. - JSC::JSString* js_string = value.toString(exec_state); - const WTF::String& wtf_string = js_string->value(exec_state); - *out_string = FromWTFString(wtf_string); -} - -JSC::JSValue TokenToJSValue(JSC::JSGlobalData* global_data, - base::Token utf8_string) { - WTF::String wtf_string = ToWTFString(utf8_string.c_str()); - JSC::JSString* js_string = JSC::jsString(global_data, wtf_string); - JSC::JSValue string_value(js_string); - DCHECK(string_value.isString()); - return string_value; -} - -WTF::String ToWTFString(const std::string& utf8_string) { - WTF::String wtf_string; - // If the string is all ASCII, we can convert it using half the memory of - // the generalized conversion function. This is significant as uses - // some huge ASCII-only source files (> 10M chars). - if (IsStringASCII(utf8_string)) { - wtf_string = WTF::String(utf8_string.c_str(), utf8_string.length()); - } - - wtf_string = WTF::String::fromUTF8(utf8_string.c_str()); - if (wtf_string.isNull()) { - if (!IsStringUTF8(utf8_string)) { - DLOG(ERROR) << "Non-UTF8 characters in input string"; - } else { - DLOG(ERROR) << "Unknown error converting to WTFString"; - } - wtf_string = WTF::String::fromUTF8(""); - } - return wtf_string; -} - -std::string FromWTFString(const WTF::String& wtf_string) { - WTF::CString utf8_string = wtf_string.utf8(); - return std::string(utf8_string.data(), utf8_string.length()); -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/conversion_helpers.h b/src/cobalt/script/javascriptcore/conversion_helpers.h deleted file mode 100644 index 3b30135..0000000 --- a/src/cobalt/script/javascriptcore/conversion_helpers.h +++ /dev/null
@@ -1,577 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_CONVERSION_HELPERS_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_CONVERSION_HELPERS_H_ - -#include <limits> -#include <string> - -#include "base/logging.h" -#include "base/optional.h" -#include "cobalt/base/enable_if.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/base/token.h" -#include "cobalt/script/javascriptcore/jsc_callback_function.h" -#include "cobalt/script/javascriptcore/jsc_callback_function_holder.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h" -#include "cobalt/script/javascriptcore/jsc_exception_state.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/union_type_conversion_forward.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalData.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSValue.h" -#include "third_party/WebKit/Source/WTF/wtf/text/WTFString.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// Flags that can be used as a bitmask for special conversion behaviour. -enum ConversionFlags { - kNoConversionFlags = 0, - kConversionFlagRestricted = 1 << 0, - kConversionFlagNullable = 1 << 1, - kConversionFlagTreatNullAsEmptyString = 1 << 2, - kConversionFlagTreatUndefinedAsEmptyString = 1 << 3, - - // Valid conversion flags for numeric values. - kConversionFlagsNumeric = kConversionFlagRestricted, - - // Valid conversion flags for string types. - kConversionFlagsString = kConversionFlagTreatNullAsEmptyString | - kConversionFlagTreatUndefinedAsEmptyString, - - // Valid conversion flags for callback functions. - kConversionFlagsCallbackFunction = kConversionFlagNullable, - - // Valid conversion flags for callback interfaces. - kConversionFlagsCallbackInterface = kConversionFlagNullable, - - // Valid conversion flags for objects. - kConversionFlagsObject = kConversionFlagNullable, -}; - -// Convert std::string in utf8 encoding to WTFString. -WTF::String ToWTFString(const std::string& utf8_string); - -// Convert WTFString to std::string in utf8. -std::string FromWTFString(const WTF::String& wtf_string); - -// Convert std::string in utf8 encoding to a JSValue representing the string. -JSC::JSValue StringToJSValue(JSC::JSGlobalData* global_data, - const std::string& utf8_string); - -// Convert a JSValue to a std::string in utf8 encoding. -void JSValueToString(JSC::ExecState* exec_state, JSC::JSValue value, - std::string* out_string); - -// Convert base::Token in utf8 encoding to a JSValue representing the string. -JSC::JSValue TokenToJSValue(JSC::JSGlobalData* global_data, - base::Token utf8_string); - -// For a given JSObject* get a pointer to the corresponding Cobalt -// implementation. -template <class T> -inline T* JSObjectToWrappable(JSC::ExecState* exec_state, - JSC::JSObject* js_object, - ExceptionState* out_exception) { - // Assumes we've already checked that null values are acceptable. - if (!js_object) { - return NULL; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - Wrappable* wrappable = NULL; - const JSC::ClassInfo* class_info = NULL; - if (js_object == global_object) { - // This is the global object, so get the pointer to the global interface - // from the JSCGlobalObject. - wrappable = global_object->global_interface().get(); - class_info = JSCGlobalObject::s_classinfo(); - } else if (global_object->wrapper_factory()->IsWrapper(js_object)) { - // This is a wrapper object, so get the Wrappable from the appropriate - // base class. - if (js_object->isErrorInstance()) { - wrappable = ExceptionBase::GetWrappable(js_object).get(); - } else { - wrappable = InterfaceBase::GetWrappable(js_object).get(); - } - class_info = - global_object->wrapper_factory()->GetClassInfo(base::GetTypeId<T>()); - } else { - // This is not a platform object. Return a type error. - out_exception->SetSimpleException(kDoesNotImplementInterface); - return NULL; - } - - // Check that the js_object is the expected class. - if (js_object->inherits(class_info)) { - return base::polymorphic_downcast<T*>(wrappable); - } else { - out_exception->SetSimpleException(kDoesNotImplementInterface); - return NULL; - } -} - -// GetWrappableOrSetException functions will set an exception if the value is -// not a Wrapper object that corresponds to the Wrappable type T. -// Additionally, an exception will be set if object is NULL. -template <class T> -T* GetWrappableOrSetException(JSC::ExecState* exec_state, - JSC::JSObject* object) { - if (!object) { - JSC::throwTypeError(exec_state); - return NULL; - } - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCExceptionState exception_state(global_object); - T* impl = JSObjectToWrappable<T>(exec_state, object, &exception_state); - if (exception_state.is_exception_set()) { - JSC::throwError(exec_state, exception_state.exception_object()); - return NULL; - } - return impl; -} - -template <class T> -T* GetWrappableOrSetException(JSC::ExecState* exec_state, JSC::JSCell* cell) { - // getObject() returns NULL if the cell is not an object. - JSC::JSObject* object = cell ? cell->getObject() : NULL; - return GetWrappableOrSetException<T>(exec_state, object); -} - -template <class T> -T* GetWrappableOrSetException(JSC::ExecState* exec_state, JSC::JSValue value) { - // getObject() returns NULL if the value is not an object. - JSC::JSObject* object = value.getObject(); - return GetWrappableOrSetException<T>(exec_state, object); -} - -// Overloads of ToJSValue convert different Cobalt types to JSValue. -// -// bool -> JSValue -inline JSC::JSValue ToJSValue(JSCGlobalObject*, bool in_boolean) { - return JSC::jsBoolean(in_boolean); -} - -// numeric types -> JSValue -template <class T> -inline JSC::JSValue ToJSValue( - JSCGlobalObject*, T in_number, - typename base::enable_if<std::numeric_limits<T>::is_specialized>::type* = - NULL) { - JSC::JSValue number_value = JSC::jsNumber(in_number); - DCHECK(number_value.isNumber()); - return number_value; -} - -// std::string -> JSValue -inline JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const std::string& in_string) { - return StringToJSValue(&(global_object->globalData()), in_string); -} - -// base::Token -> JSValue -inline JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - base::Token in_token) { - return TokenToJSValue(&(global_object->globalData()), in_token); -} - -// object -> JSValue -template <class T> -inline JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const scoped_refptr<T>& in_object) { - if (!in_object) { - return JSC::jsNull(); - } - JSC::JSObject* wrapper = - global_object->wrapper_factory()->GetWrapper(global_object, in_object); - DCHECK(wrapper); - return JSC::JSValue(wrapper); -} - -// optional<T> -> JSValue -template <class T> -inline JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - base::optional<T> in_optional) { - if (!in_optional) { - return JSC::jsNull(); - } - return ToJSValue(global_object, in_optional.value()); -} - -// CallbackFunction -> JSValue -template <class T> -inline JSC::JSValue ToJSValue( - JSCGlobalObject* global_object, - const ScriptObject<CallbackFunction<T> >* callback_function) { - if (!callback_function) { - return JSC::jsNull(); - } - - // Downcast to JSCCallbackFunctionHolder, which has public members that - // we can use to dig in to get the JS object. - const JSCCallbackFunctionHolder<CallbackFunction<T> >* - jsc_callback_function_holder = base::polymorphic_downcast< - const JSCCallbackFunctionHolder<CallbackFunction<T> >*>( - callback_function); - // Get the base CallbackFunction<T> class from the JSCCallbackFunctionHolder. - const CallbackFunction<T>* callback = - jsc_callback_function_holder->GetScriptObject(); - // Shouldn't be NULL. If the callback was NULL then NULL should have been - // passed as an argument into this function. - DCHECK(callback); - // Downcast to the JSCCallbackFunction type, from which we can get the - // JSFunction. - const JSCCallbackFunction<T>* jsc_callback = - base::polymorphic_downcast<const JSCCallbackFunction<T>*>(callback); - return JSC::JSValue(jsc_callback->callable()); -} - -// CallbackInterface -> JSValue -template <class T> -inline JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const ScriptObject<T>* callback_interface) { - if (!callback_interface) { - return JSC::jsNull(); - } - typedef typename CallbackInterfaceTraits<T>::JSCCallbackInterfaceClass - JSCCallbackInterfaceClass; - // Downcast to JSCCallbackInterfaceHolder - const JSCCallbackInterfaceHolder<T>* jsc_callback_interface_holder = - base::polymorphic_downcast<const JSCCallbackInterfaceHolder<T>*>( - callback_interface); - - // Shouldn't be NULL. If the callback was NULL then NULL should have been - // passed as an argument into this function. - // Downcast to the corresponding JSCCallbackInterface type, from which we can - // get the implementing object. - const JSCCallbackInterfaceClass* jsc_callback_interface = - base::polymorphic_downcast<const JSCCallbackInterfaceClass*>( - jsc_callback_interface_holder->GetScriptObject()); - DCHECK(jsc_callback_interface); - // Return the user object implementing this interface. - return JSC::JSValue(jsc_callback_interface->implementing_object()); -} - -// OpaqueHandle -> JSValue -inline JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const OpaqueHandleHolder* opaque_handle_holder) { - if (!opaque_handle_holder) { - return JSC::jsNull(); - } - - // Downcast to JSCObjectHandleHolder, which has public members that - // we can use to dig in to get the JS object. - const JSCObjectHandleHolder* jsc_object_handle_holder = - base::polymorphic_downcast<const JSCObjectHandleHolder*>( - opaque_handle_holder); - - JSC::JSObject* js_object = jsc_object_handle_holder->js_object(); - if (js_object) { - return JSC::JSValue(js_object); - } else { - return JSC::jsNull(); - } -} - -// Overloads of FromJSValue retrieve the Cobalt value from a JSValue. -// -// JSValue -> bool -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - bool* out_bool) { - DCHECK_EQ(conversion_flags, kNoConversionFlags) - << "No conversion flags supported."; - *out_bool = jsvalue.toBoolean(exec_state); -} - -// JSValue -> signed integers <= 4 bytes -template <class T> -inline void FromJSValue( - JSC::ExecState* exec_state, JSC::JSValue jsvalue, int conversion_flags, - ExceptionState* out_exception, T* out_number, - typename base::enable_if<std::numeric_limits<T>::is_specialized && - std::numeric_limits<T>::is_integer && - std::numeric_limits<T>::is_signed && - (sizeof(T) <= 4), - T>::type* = NULL) { - DCHECK_EQ(conversion_flags, kNoConversionFlags) - << "No conversion flags supported."; - int32_t int32_value = jsvalue.toInt32(exec_state); - *out_number = static_cast<T>(int32_value); -} - -// JSValue -> unsigned integers <= 4 bytes -template <class T> -inline void FromJSValue( - JSC::ExecState* exec_state, JSC::JSValue jsvalue, int conversion_flags, - ExceptionState* out_exception, T* out_number, - typename base::enable_if<std::numeric_limits<T>::is_specialized && - std::numeric_limits<T>::is_integer && - !std::numeric_limits<T>::is_signed && - (sizeof(T) <= 4), - T>::type* = NULL) { - DCHECK_EQ(conversion_flags, kNoConversionFlags) - << "No conversion flags supported."; - uint32_t uint32_value = jsvalue.toUInt32(exec_state); - *out_number = static_cast<T>(uint32_value); -} - -// JSValue -> signed integers > 4 bytes -template <class T> -inline void FromJSValue( - JSC::ExecState* exec_state, JSC::JSValue jsvalue, int conversion_flags, - ExceptionState* out_exception, T* out_number, - typename base::enable_if<std::numeric_limits<T>::is_specialized && - std::numeric_limits<T>::is_integer && - std::numeric_limits<T>::is_signed && - (sizeof(T) > 4), - T>::type* = NULL) { - NOTIMPLEMENTED(); -} - -// JSValue -> unsigned integers > 4 bytes -template <class T> -inline void FromJSValue( - JSC::ExecState* exec_state, JSC::JSValue jsvalue, int conversion_flags, - ExceptionState* out_exception, T* out_number, - typename base::enable_if<std::numeric_limits<T>::is_specialized && - std::numeric_limits<T>::is_integer && - !std::numeric_limits<T>::is_signed && - (sizeof(T) > 4), - T>::type* = NULL) { - NOTIMPLEMENTED(); -} - -// JSValue -> double -template <class T> -inline void FromJSValue( - JSC::ExecState* exec_state, JSC::JSValue jsvalue, int conversion_flags, - ExceptionState* out_exception, T* out_number, - typename base::enable_if<std::numeric_limits<T>::is_specialized && - !std::numeric_limits<T>::is_integer, - T>::type* = NULL) { - DCHECK_EQ(conversion_flags & ~kConversionFlagsNumeric, 0) - << "Unexpected conversion flags found."; - double double_value = jsvalue.toNumber(exec_state); - if (!isfinite(double_value) && - (conversion_flags & kConversionFlagRestricted)) { - out_exception->SetSimpleException(kNotFinite); - return; - } - *out_number = double_value; -} - -// JSValue -> std::string -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - std::string* out_string) { - DCHECK_EQ(conversion_flags & ~kConversionFlagsString, 0) - << "Unexpected conversion flags found: "; - if (jsvalue.isNull() && - conversion_flags & kConversionFlagTreatNullAsEmptyString) { - *out_string = ""; - } else if (jsvalue.isUndefined() && - conversion_flags & kConversionFlagTreatUndefinedAsEmptyString) { - *out_string = ""; - } else { - JSValueToString(exec_state, jsvalue, out_string); - } -} - -// JSValue -> object -template <class T> -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - scoped_refptr<T>* out_object) { - DCHECK_EQ(conversion_flags & ~kConversionFlagsObject, 0) - << "Unexpected conversion flags found."; - - JSC::JSObject* js_object = NULL; - if (jsvalue.isNull()) { - if (!(conversion_flags & kConversionFlagNullable)) { - out_exception->SetSimpleException(kNotNullableType); - return; - } - } else { - // Returns NULL if jsvalue is not an object. - js_object = jsvalue.getObject(); - if (!js_object) { - out_exception->SetSimpleException(kNotObjectType); - return; - } - } - *out_object = JSObjectToWrappable<T>(exec_state, js_object, out_exception); -} - -// JSValue -> optional<T> -template <class T> -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - base::optional<T>* out_optional) { - if (jsvalue.isNull()) { - *out_optional = base::nullopt; - } else if (jsvalue.isUndefined()) { - *out_optional = base::nullopt; - } else { - *out_optional = T(); - FromJSValue(exec_state, jsvalue, - conversion_flags & ~kConversionFlagNullable, out_exception, - &(out_optional->value())); - } -} - -// JSValue -> optional<T> -template <> -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - base::optional<std::string>* out_optional) { - if (jsvalue.isNull()) { - *out_optional = base::nullopt; - } else if (jsvalue.isUndefined() && - !(conversion_flags & kConversionFlagTreatUndefinedAsEmptyString)) { - // If TreatUndefinedAs=EmptyString is set, skip the default conversion - // of undefined to null. - *out_optional = base::nullopt; - } else { - *out_optional = std::string(); - FromJSValue(exec_state, jsvalue, - conversion_flags & ~kConversionFlagNullable, out_exception, - &(out_optional->value())); - } -} - -// JSValue -> CallbackFunction -template <class T> -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - JSCCallbackFunctionHolder<T>* out_callback) { - DCHECK_EQ(conversion_flags & ~kConversionFlagsCallbackFunction, 0) - << "No conversion flags supported."; - if (jsvalue.isNull()) { - if (!(conversion_flags & kConversionFlagNullable)) { - out_exception->SetSimpleException(kNotNullableType); - } - // If it is a nullable type, just return. - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - // https://www.w3.org/TR/WebIDL/#es-callback-function - // 1. If V is not a Function object, throw a TypeError - if (!jsvalue.isFunction()) { - out_exception->SetSimpleException(kNotFunctionValue); - return; - } - - JSC::JSFunction* js_function = - JSC::jsCast<JSC::JSFunction*>(jsvalue.asCell()); - DCHECK(js_function); - JSCCallbackFunction<typename T::Signature> callback_function(js_function); - *out_callback = JSCCallbackFunctionHolder<T>( - callback_function, global_object->script_object_registry()); -} - -// JSValue -> CallbackInterface -template <class T> -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - JSCCallbackInterfaceHolder<T>* out_callback_interface) { - typedef typename CallbackInterfaceTraits<T>::JSCCallbackInterfaceClass - JSCCallbackInterfaceClass; - DCHECK_EQ(conversion_flags & ~kConversionFlagsCallbackFunction, 0) - << "No conversion flags supported."; - if (jsvalue.isNull()) { - if (!(conversion_flags & kConversionFlagNullable)) { - out_exception->SetSimpleException(kNotNullableType); - } - // If it is a nullable type, just return. - return; - } - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - - // https://www.w3.org/TR/WebIDL/#es-user-objects - // Any user object can be considered to implement a user interface. Actually - // checking if the correct properties exist will happen when the operation - // on the callback interface is run. - - if (!jsvalue.isFunction() && !jsvalue.isObject()) { - out_exception->SetSimpleException(kNotObjectOrFunction); - return; - } - - JSC::JSObject* js_object = jsvalue.getObject(); - DCHECK(js_object); - JSCCallbackInterfaceClass callback_interface(js_object); - *out_callback_interface = JSCCallbackInterfaceHolder<T>( - callback_interface, global_object->script_object_registry()); -} - -// JSValue -> OpaqueHandle -inline void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* out_exception, - JSCObjectHandleHolder* out_handle) { - DCHECK_EQ(conversion_flags & ~kConversionFlagsObject, 0) - << "Unexpected conversion flags found."; - JSC::JSObject* js_object = NULL; - if (jsvalue.isNull()) { - if (!(conversion_flags & kConversionFlagNullable)) { - out_exception->SetSimpleException(kNotNullableType); - } - // Return here whether an exception was set or not. - return; - } else { - // https://www.w3.org/TR/WebIDL/#es-object - // 1. If Type(V) is not Object, throw a TypeError - js_object = jsvalue.getObject(); - if (!js_object) { - out_exception->SetSimpleException(kNotObjectType); - return; - } - } - - // Null cases should be handled above. - DCHECK(js_object); - - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - JSCObjectHandle jsc_object_handle(js_object); - *out_handle = JSCObjectHandleHolder(jsc_object_handle, - global_object->script_object_registry()); -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#include "cobalt/script/javascriptcore/jsc_callback_function_impl.h" -// Union type conversion is generated by a pump script. -#include "cobalt/script/javascriptcore/union_type_conversion_impl.h" - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_CONVERSION_HELPERS_H_
diff --git a/src/cobalt/script/javascriptcore/javascriptcore.gyp b/src/cobalt/script/javascriptcore/javascriptcore.gyp deleted file mode 100644 index 73b048f..0000000 --- a/src/cobalt/script/javascriptcore/javascriptcore.gyp +++ /dev/null
@@ -1,125 +0,0 @@ -# Copyright 2015 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. - -{ - 'targets': [ - { - 'target_name': 'engine', - 'type': 'static_library', - 'sources': [ - 'conversion_helpers.cc', - 'conversion_helpers.h', - 'js_object_cache.cc', - 'js_object_cache.h', - 'jsc_call_frame.cc', - 'jsc_call_frame.h', - 'jsc_callback_interface.cc', - 'jsc_debugger.cc', - 'jsc_debugger.h', - 'jsc_engine.cc', - 'jsc_engine.h', - '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_object_handle.h', - 'jsc_object_owner.h', - 'jsc_scope.cc', - 'jsc_scope.h', - 'jsc_source_code.cc', - 'jsc_source_code.h', - 'jsc_source_provider.cc', - 'jsc_source_provider.h', - 'script_object_registry.cc', - 'script_object_registry.h', - 'thread_local_hash_table.cc', - 'thread_local_hash_table.h', - 'util/binding_helpers.cc', - 'util/binding_helpers.h', - 'util/exception_helpers.cc', - 'util/exception_helpers.h', - 'wrapper_base.h', - 'wrapper_factory.cc', - 'wrapper_factory.h', - ], - 'defines': [ - '__DISABLE_WTF_LOGGING__', - ], - 'include_dirs': [ - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore', - '<(DEPTH)/third_party/WebKit/Source/WTF', - ], - 'dependencies': [ - '<(DEPTH)/cobalt/script/script.gyp:script', - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:javascriptcore', - ], - 'all_dependent_settings': { - 'defines': [ - 'ENGINE_DEFINES_ATTRIBUTES_ON_OBJECT', - 'ENGINE_USES_CONSERVATIVE_ROOTING', - ], - }, - 'msvs_disabled_warnings': [ - # dll-interface warnings. Not easily fixed for template types. - 4251, - ], - }, - { - 'target_name': 'jsc_engine_test', - 'type': '<(gtest_target_type)', - 'sources': [ - 'numeric_conversion_test.cc', - ], - 'defines': [ - '__DISABLE_WTF_LOGGING__', - ], - 'include_dirs': [ - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore', - '<(DEPTH)/third_party/WebKit/Source/WTF', - ], - 'dependencies': [ - '<(DEPTH)/base/base.gyp:run_all_unittests', - '<(DEPTH)/cobalt/base/base.gyp:base', - '<(DEPTH)/testing/gmock.gyp:gmock', - '<(DEPTH)/testing/gtest.gyp:gtest', - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:javascriptcore', - 'engine', - ] - }, - { - # Standalone executable for JS engine - 'target_name': 'jsc', - 'type': '<(final_executable_type)', - 'sources': [ - 'jsc.cc', - ], - 'defines': [ - '__DISABLE_WTF_LOGGING__', - ], - 'include_dirs': [ - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore', - '<(DEPTH)/third_party/WebKit/Source/WTF', - ], - 'dependencies': [ - ':engine', - '<(DEPTH)/cobalt/base/base.gyp:base', - '<(DEPTH)/cobalt/script/script.gyp:standalone_javascript_runner', - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:javascriptcore', - ], - }, - ], -}
diff --git a/src/cobalt/script/javascriptcore/javascriptcore_variables.gypi b/src/cobalt/script/javascriptcore/javascriptcore_variables.gypi deleted file mode 100644 index cc0e9cd..0000000 --- a/src/cobalt/script/javascriptcore/javascriptcore_variables.gypi +++ /dev/null
@@ -1,51 +0,0 @@ -# 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. - -{ - 'variables': { - 'conditions': [ - ['javascript_engine == "javascriptcore"', { - 'generated_bindings_prefix': 'JSC', - 'engine_include_dirs': [ - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore', - '<(DEPTH)/third_party/WebKit/Source/WTF', - ], - 'engine_dependencies': [ - '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:javascriptcore', - ], - 'engine_defines': [ - # Avoid WTF LOG macro. - '__DISABLE_WTF_LOGGING__', - ], - 'engine_templates_dir': [ - '<(DEPTH)/cobalt/bindings/javascriptcore/templates', - ], - 'engine_template_files': [ - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/callback-interface.cc.template', - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/callback-interface.h.template', - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/interface.cc.template', - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/interface.h.template', - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/interface-object.template', - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/macros.cc.template', - '<(DEPTH)/cobalt/bindings/javascriptcore/templates/prototype-object.template', - ], - 'engine_bindings_scripts': [ - '<(DEPTH)/cobalt/bindings/javascriptcore/code_generator.py', - '<(DEPTH)/cobalt/bindings/javascriptcore/idl_compiler.py', - ], - 'engine_idl_compiler': '<(DEPTH)/cobalt/bindings/javascriptcore/idl_compiler.py', - }], - ], - }, -}
diff --git a/src/cobalt/script/javascriptcore/js_object_cache.cc b/src/cobalt/script/javascriptcore/js_object_cache.cc deleted file mode 100644 index 1a99230..0000000 --- a/src/cobalt/script/javascriptcore/js_object_cache.cc +++ /dev/null
@@ -1,105 +0,0 @@ -/* - * Copyright 2015 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/javascriptcore/js_object_cache.h" - -#include <utility> - -#include "base/hash_tables.h" - -#if !defined(BASE_HASH_USE_HASH_STRUCT) -namespace BASE_HASH_NAMESPACE { -template<> -inline size_t hash_value(const JSC::WriteBarrier<JSC::JSObject>& value) { - return hash_value(value.get()); -} -} // namespace BASE_HASH_NAMESPACE -#endif - -namespace cobalt { -namespace script { -namespace javascriptcore { - -PrototypeBase* JSObjectCache::GetCachedPrototype( - const JSC::ClassInfo* class_info) { - CachedPrototypeMap::iterator it = cached_prototypes_.find(class_info); - if (it != cached_prototypes_.end()) { - return it->second.get(); - } - return NULL; -} - -void JSObjectCache::CachePrototype(const JSC::ClassInfo* class_info, - PrototypeBase* object) { - std::pair<CachedPrototypeMap::iterator, bool> pair_ib; - pair_ib = cached_prototypes_.insert(std::make_pair( - class_info, JSC::WriteBarrier<PrototypeBase>(global_object_->globalData(), - global_object_, object))); - DCHECK(pair_ib.second) - << "Another Prototype was already registered for this ClassInfo"; -} - -ConstructorBase* JSObjectCache::GetCachedConstructor( - const JSC::ClassInfo* class_info) { - CachedConstructorMap::iterator it = cached_constructors_.find(class_info); - if (it != cached_constructors_.end()) { - return it->second.get(); - } - return NULL; -} - -void JSObjectCache::CacheConstructor(const JSC::ClassInfo* class_info, - ConstructorBase* object) { - std::pair<CachedConstructorMap::iterator, bool> pair_ib; - pair_ib = cached_constructors_.insert(std::make_pair( - class_info, JSC::WriteBarrier<ConstructorBase>( - global_object_->globalData(), global_object_, object))); - DCHECK(pair_ib.second) - << "Another Prototype was already registered for this ClassInfo"; -} - -void JSObjectCache::CacheJSObject(JSC::JSObject* js_object) { - cached_objects_.insert(js_object); -} - -void JSObjectCache::UncacheJSObject(JSC::JSObject* js_object) { - CachedObjectMultiset::iterator it = cached_objects_.find(js_object); - if (it != cached_objects_.end()) { - cached_objects_.erase(it); - } else { - NOTREACHED() << "Trying to uncache a JSObject that was not cached."; - } -} - -void JSObjectCache::VisitChildren(JSC::SlotVisitor* visitor) { - for (CachedPrototypeMap::iterator it = cached_prototypes_.begin(); - it != cached_prototypes_.end(); ++it) { - visitor->append(&(it->second)); - } - for (CachedConstructorMap::iterator it = cached_constructors_.begin(); - it != cached_constructors_.end(); ++it) { - visitor->append(&(it->second)); - } - for (CachedObjectMultiset::iterator it = cached_objects_.begin(); - it != cached_objects_.end(); ++it) { - JSC::JSObject* js_object = *it; - visitor->appendUnbarrieredPointer(&js_object); - } -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/js_object_cache.h b/src/cobalt/script/javascriptcore/js_object_cache.h deleted file mode 100644 index 6e5a271..0000000 --- a/src/cobalt/script/javascriptcore/js_object_cache.h +++ /dev/null
@@ -1,84 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JS_OBJECT_CACHE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JS_OBJECT_CACHE_H_ - -#include "base/bind.h" -#include "base/hash_tables.h" -#include "base/memory/ref_counted.h" -#include "cobalt/base/type_id.h" -#include "cobalt/script/javascriptcore/constructor_base.h" -#include "cobalt/script/javascriptcore/prototype_base.h" -#include "cobalt/script/wrappable.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class JSCGlobalObject; - -// -class JSObjectCache { - public: - explicit JSObjectCache(JSC::JSGlobalObject* global_object) - : global_object_(global_object) {} - // Cache an interface's Prototype object by ClassInfo. Cached objects will - // not be garbage collected. - PrototypeBase* GetCachedPrototype(const JSC::ClassInfo* class_info); - void CachePrototype(const JSC::ClassInfo* class_info, PrototypeBase* object); - - // Cache an interface's Interface Object (constructor) by ClassInfo. Cached - // objects will not be garbage collected. - ConstructorBase* GetCachedConstructor(const JSC::ClassInfo* class_info); - void CacheConstructor(const JSC::ClassInfo* class_info, - ConstructorBase* object); - - // Cache a reference to this JS object internally and visit it during garbage - // collection. This will prevent it from being garbage collected. - // Calling this multiple times for the same object results in multiple - // references being stored. - void CacheJSObject(JSC::JSObject* js_object); - - // Remove a reference to this JS object from the internal list of objects - // that are visited during garbage collection. - void UncacheJSObject(JSC::JSObject* js_object); - - // Called during garbage collection phase. Cached objects will be visited and - // thus prevented from being garbage collected. - void VisitChildren(JSC::SlotVisitor* visitor); - - private: - typedef base::hash_map<const JSC::ClassInfo*, - JSC::WriteBarrier<PrototypeBase> > CachedPrototypeMap; - typedef base::hash_map<const JSC::ClassInfo*, - JSC::WriteBarrier<ConstructorBase> > - CachedConstructorMap; - typedef base::hash_multiset<JSC::JSObject*> CachedObjectMultiset; - - JSC::JSGlobalObject* global_object_; - CachedPrototypeMap cached_prototypes_; - CachedConstructorMap cached_constructors_; - CachedObjectMultiset cached_objects_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JS_OBJECT_CACHE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc.cc b/src/cobalt/script/javascriptcore/jsc.cc deleted file mode 100644 index 45ab380..0000000 --- a/src/cobalt/script/javascriptcore/jsc.cc +++ /dev/null
@@ -1,124 +0,0 @@ -/* - * 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 <iostream> - -#include "base/command_line.h" -#include "base/file_path.h" -#include "base/string_util.h" -#include "cobalt/base/wrap_main.h" -#include "cobalt/script/javascriptcore/jsc_engine.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 -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/JSCTypedArrayStubs.h" // NOLINT(build/include_alpha) -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Identifier.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace { - -JSC::EncodedJSValue JSC_HOST_CALL PrintFunction(JSC::ExecState* exec) { - std::vector<std::string> string_args; - for (uint32 i = 0; i < exec->argumentCount(); ++i) { - string_args.push_back( - exec->argument(i).toString(exec)->value(exec).utf8().data()); - } - std::string joined = JoinString(string_args, ' '); - std::cout << joined << std::endl; - return JSC::JSValue::encode(JSC::jsUndefined()); -} - -void AddFunction(JSCGlobalObject* global_object, const char* name, - JSC::NativeFunction function, uint32 arguments) { - JSC::Identifier identifier(global_object->globalExec(), name); - global_object->putDirect( - global_object->globalData(), identifier, - JSC::JSFunction::create(global_object->globalExec(), global_object, - arguments, identifier.string(), function)); -} - -#if !USE(EXPORT_MACROS) -void AddConstructableFunction(JSCGlobalObject* global_object, const char* name, - JSC::NativeFunction function, uint32 arguments) { - JSC::Identifier identifier(global_object->globalExec(), name); - global_object->putDirect( - global_object->globalData(), identifier, - JSC::JSFunction::create(global_object->globalExec(), global_object, - arguments, identifier.string(), function, - JSC::NoIntrinsic, function)); -} -#endif - -void SetupBindings(JSCGlobalObject* global_object) { - JSC::JSLockHolder lock(&global_object->globalData()); - AddFunction(global_object, "print", &PrintFunction, 1); - - // Getting these exported properly will take a bit of work, and it's likely - // not worth it. -#if !USE(EXPORT_MACROS) - AddConstructableFunction(global_object, "Uint8Array", - JSC::constructJSUint8Array, 1); - AddConstructableFunction(global_object, "Uint8ClampedArray", - JSC::constructJSUint8ClampedArray, 1); - AddConstructableFunction(global_object, "Uint16Array", - JSC::constructJSUint16Array, 1); - AddConstructableFunction(global_object, "Uint32Array", - JSC::constructJSUint32Array, 1); - AddConstructableFunction(global_object, "Int8Array", - JSC::constructJSInt8Array, 1); - AddConstructableFunction(global_object, "Int16Array", - JSC::constructJSInt16Array, 1); - AddConstructableFunction(global_object, "Int32Array", - JSC::constructJSInt32Array, 1); - AddConstructableFunction(global_object, "Float32Array", - JSC::constructJSFloat32Array, 1); - AddConstructableFunction(global_object, "Float64Array", - JSC::constructJSFloat64Array, 1); -#endif -} - -int JSCMain(int argc, char** argv) { - cobalt::script::StandaloneJavascriptRunner standalone_runner; - standalone_runner.global_environment()->EnableEval(); - - JSCGlobalObject* global_object = - static_cast<JSCGlobalEnvironment*>( - standalone_runner.global_environment().get()) - ->global_object(); - SetupBindings(global_object); - - CommandLine command_line(argc, argv); - CommandLine::StringVector args = command_line.GetArgs(); - if (!args.empty()) { - FilePath source_file(args[0]); - standalone_runner.ExecuteFile(source_file); - } else { - standalone_runner.RunInteractive(); - } - return 0; -} - -} // namespace -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -COBALT_WRAP_SIMPLE_MAIN(cobalt::script::javascriptcore::JSCMain);
diff --git a/src/cobalt/script/javascriptcore/jsc_call_frame.cc b/src/cobalt/script/javascriptcore/jsc_call_frame.cc deleted file mode 100644 index 864e8d0..0000000 --- a/src/cobalt/script/javascriptcore/jsc_call_frame.cc +++ /dev/null
@@ -1,134 +0,0 @@ -/* - * 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/javascriptcore/jsc_call_frame.h" - -#include "base/logging.h" -#include "base/string_number_conversions.h" -#include "cobalt/script/javascriptcore/jsc_scope.h" - -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/CallFrame.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/WTF/wtf/text/CString.h" -#include "third_party/WebKit/Source/WTF/wtf/text/WTFString.h" - -namespace cobalt { -namespace script { - -namespace javascriptcore { - -namespace { -// Conversion from intptr_t to std::string. -// Used to generate a unique string ID by converting the object pointer. -std::string IntptrToString(intptr_t input) { - COMPILE_ASSERT(sizeof(int64) >= sizeof(intptr_t), - int64_not_big_enough_to_store_intptr_t); - int64 input_as_int64 = static_cast<int64>(input); - return base::Int64ToString(input_as_int64); -} -} // namespace - -JSCCallFrame::JSCCallFrame(const JSC::DebuggerCallFrame& call_frame, - intptr_t script_id, int line_number) - : call_frame_(call_frame), - script_id_(IntptrToString(script_id)), - line_number_(line_number) { - Initialize(); -} - -JSCCallFrame::JSCCallFrame(const JSC::DebuggerCallFrame& call_frame, - intptr_t script_id, int line_number, - int column_number) - : call_frame_(call_frame), - script_id_(IntptrToString(script_id)), - line_number_(line_number), - column_number_(column_number) { - Initialize(); -} - -JSCCallFrame::~JSCCallFrame() {} - -void JSCCallFrame::Initialize() { - DCHECK(call_frame_.callFrame()); - DCHECK_GT(script_id_.length(), 0); - global_object_ = JSC::jsCast<JSCGlobalObject*>( - call_frame_.callFrame()->dynamicGlobalObject()); - DCHECK(global_object_); - - JSC::JSValue this_value = call_frame_.callFrame()->thisValue(); - JSC::JSObject* this_object = this_value.getObject(); - if (this_object) { - this_holder_.reset( - new JSCObjectHandleHolder(JSCObjectHandle(this_object), - global_object_->script_object_registry())); - } else { - DLOG(WARNING) << "JavaScript 'this' value is not an object."; - } -} - -std::string JSCCallFrame::GetCallFrameId() { - return IntptrToString(reinterpret_cast<intptr_t>(call_frame_.callFrame())); -} - -scoped_ptr<CallFrame> JSCCallFrame::GetCaller() { - JSC::CallFrame* call_frame = call_frame_.callFrame(); - DCHECK(call_frame); - DCHECK(!call_frame->hasHostCallFrameFlag()); - - // Get the caller. - intptr_t source_id; - int line_number; - String url; - JSC::JSValue function; - call_frame->interpreter()->retrieveLastCaller(call_frame, line_number, - source_id, url, function); - call_frame = call_frame->callerFrame(); - - if (!call_frame || call_frame->hasHostCallFrameFlag()) { - // No valid JavaScript caller, return NULL; - return scoped_ptr<CallFrame>(); - } - - return scoped_ptr<CallFrame>(new JSCCallFrame( - JSC::DebuggerCallFrame(call_frame), source_id, line_number)); -} - -std::string JSCCallFrame::GetFunctionName() { - return call_frame_.functionName().utf8().data(); -} - -int JSCCallFrame::GetLineNumber() { - // Line number is absolute - will need to be adjusted for the start line in - // inline scripts. - DCHECK_GT(line_number_, 0); - return line_number_; -} - -base::optional<int> JSCCallFrame::GetColumnNumber() { return column_number_; } - -std::string JSCCallFrame::GetScriptId() { return script_id_; } - -scoped_ptr<Scope> JSCCallFrame::GetScopeChain() { - DCHECK(call_frame_.callFrame()); - DCHECK(call_frame_.callFrame()->scope()); - return scoped_ptr<Scope>(new JSCScope(call_frame_.callFrame()->scope())); -} - -const OpaqueHandleHolder* JSCCallFrame::GetThis() { return this_holder_.get(); } - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_call_frame.h b/src/cobalt/script/javascriptcore/jsc_call_frame.h deleted file mode 100644 index dbaebf5..0000000 --- a/src/cobalt/script/javascriptcore/jsc_call_frame.h +++ /dev/null
@@ -1,68 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_JSC_CALL_FRAME_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALL_FRAME_H_ - -#include <string> - -#include "base/optional.h" -#include "cobalt/script/call_frame.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/scope.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/debugger/DebuggerCallFrame.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// JavaScriptCore-specific implementation of a JavaScript call frame. -class JSCCallFrame : public CallFrame { - public: - JSCCallFrame(const JSC::DebuggerCallFrame& call_frame, intptr_t script_id, - int line_number); - JSCCallFrame(const JSC::DebuggerCallFrame& call_frame, intptr_t script_id, - int line_number, int column_number); - ~JSCCallFrame() OVERRIDE; - - std::string GetCallFrameId() OVERRIDE; - scoped_ptr<CallFrame> GetCaller() OVERRIDE; - std::string GetFunctionName() OVERRIDE; - int GetLineNumber() OVERRIDE; - base::optional<int> GetColumnNumber() OVERRIDE; - std::string GetScriptId() OVERRIDE; - scoped_ptr<Scope> GetScopeChain() OVERRIDE; - const OpaqueHandleHolder* GetThis() OVERRIDE; - - private: - // Called by both constructors to perform common initialization. - void Initialize(); - - JSC::DebuggerCallFrame call_frame_; - std::string script_id_; - int line_number_; - base::optional<int> column_number_; - JSCGlobalObject* global_object_; - scoped_ptr<JSCObjectHandleHolder> this_holder_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALL_FRAME_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_function.h b/src/cobalt/script/javascriptcore/jsc_callback_function.h deleted file mode 100644 index 818acec..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_function.h +++ /dev/null
@@ -1,503 +0,0 @@ -// This file was GENERATED by command: -// pump.py jsc_callback_function.h.pump -// DO NOT EDIT BY HAND!!! - -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_H_ - -#include "base/debug/trace_event.h" -#include "base/logging.h" -#include "cobalt/script/callback_function.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "cobalt/script/logging_exception_state.h" -#include "cobalt/script/script_object.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" - -// The JSCCallbackFunction type is used to represent IDL callback functions. -// Create a new JSCCallbackFunction by specifying the base CallbackFunction -// as a template parameter to the constructor. -// -// Constructor parameters: -// callable: A handle that keeps keeps alive the JSC::JSFunction that -// will be called when the callback is fired. -// callback: A base::Callback that will be executed when the Run(...) -// function is executed. It will take as parameters a JSC::JSFunction -// followed by any arguments that are defined on the callback type. - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace internal { -// Helper template functions for Callback functions' return values before being -// returned to Cobalt. -// Converts the return value from JavaScript into the correct Cobalt type, or -// sets the exception bit if conversion fails. -template <typename R> -inline CallbackResult<R> ConvertReturnValue(JSC::ExecState* exec_state, - JSC::JSValue jsvalue); -} -// First, we forward declare the Callback class template. This informs the -// compiler that the template only has 1 type parameter which is the base -// CallbackFunction template class with parameters. -// -// See base/callback.h.pump for further discussion on this pattern. -template <typename Sig> -class JSCCallbackFunction; - -template <typename R> -class JSCCallbackFunction<R(void)> - : public CallbackFunction<R(void)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run() - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1> -class JSCCallbackFunction<R(A1)> - : public CallbackFunction<R(A1)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1, typename A2> -class JSCCallbackFunction<R(A1, A2)> - : public CallbackFunction<R(A1, A2)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1, - typename base::internal::CallbackParamTraits<A2>::ForwardType a2) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - args.append(ToJSValue(global_object, a2)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1, typename A2, typename A3> -class JSCCallbackFunction<R(A1, A2, A3)> - : public CallbackFunction<R(A1, A2, A3)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1, - typename base::internal::CallbackParamTraits<A2>::ForwardType a2, - typename base::internal::CallbackParamTraits<A3>::ForwardType a3) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - args.append(ToJSValue(global_object, a2)); - args.append(ToJSValue(global_object, a3)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1, typename A2, typename A3, typename A4> -class JSCCallbackFunction<R(A1, A2, A3, A4)> - : public CallbackFunction<R(A1, A2, A3, A4)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1, - typename base::internal::CallbackParamTraits<A2>::ForwardType a2, - typename base::internal::CallbackParamTraits<A3>::ForwardType a3, - typename base::internal::CallbackParamTraits<A4>::ForwardType a4) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - args.append(ToJSValue(global_object, a2)); - args.append(ToJSValue(global_object, a3)); - args.append(ToJSValue(global_object, a4)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1, typename A2, typename A3, typename A4, - typename A5> -class JSCCallbackFunction<R(A1, A2, A3, A4, A5)> - : public CallbackFunction<R(A1, A2, A3, A4, A5)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1, - typename base::internal::CallbackParamTraits<A2>::ForwardType a2, - typename base::internal::CallbackParamTraits<A3>::ForwardType a3, - typename base::internal::CallbackParamTraits<A4>::ForwardType a4, - typename base::internal::CallbackParamTraits<A5>::ForwardType a5) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - args.append(ToJSValue(global_object, a2)); - args.append(ToJSValue(global_object, a3)); - args.append(ToJSValue(global_object, a4)); - args.append(ToJSValue(global_object, a5)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1, typename A2, typename A3, typename A4, - typename A5, typename A6> -class JSCCallbackFunction<R(A1, A2, A3, A4, A5, A6)> - : public CallbackFunction<R(A1, A2, A3, A4, A5, A6)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1, - typename base::internal::CallbackParamTraits<A2>::ForwardType a2, - typename base::internal::CallbackParamTraits<A3>::ForwardType a3, - typename base::internal::CallbackParamTraits<A4>::ForwardType a4, - typename base::internal::CallbackParamTraits<A5>::ForwardType a5, - typename base::internal::CallbackParamTraits<A6>::ForwardType a6) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - args.append(ToJSValue(global_object, a2)); - args.append(ToJSValue(global_object, a3)); - args.append(ToJSValue(global_object, a4)); - args.append(ToJSValue(global_object, a5)); - args.append(ToJSValue(global_object, a6)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -template <typename R, typename A1, typename A2, typename A3, typename A4, - typename A5, typename A6, typename A7> -class JSCCallbackFunction<R(A1, A2, A3, A4, A5, A6, A7)> - : public CallbackFunction<R(A1, A2, A3, A4, A5, A6, A7)> { - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run( - typename base::internal::CallbackParamTraits<A1>::ForwardType a1, - typename base::internal::CallbackParamTraits<A2>::ForwardType a2, - typename base::internal::CallbackParamTraits<A3>::ForwardType a3, - typename base::internal::CallbackParamTraits<A4>::ForwardType a4, - typename base::internal::CallbackParamTraits<A5>::ForwardType a5, - typename base::internal::CallbackParamTraits<A6>::ForwardType a6, - typename base::internal::CallbackParamTraits<A7>::ForwardType a7) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - args.append(ToJSValue(global_object, a1)); - args.append(ToJSValue(global_object, a2)); - args.append(ToJSValue(global_object, a3)); - args.append(ToJSValue(global_object, a4)); - args.append(ToJSValue(global_object, a5)); - args.append(ToJSValue(global_object, a6)); - args.append(ToJSValue(global_object, a7)); - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, - args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_function.h.pump b/src/cobalt/script/javascriptcore/jsc_callback_function.h.pump deleted file mode 100644 index abba9da..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_function.h.pump +++ /dev/null
@@ -1,137 +0,0 @@ -$$ This is a pump file for generating file templates. Pump is a python -$$ script that is part of the Google Test suite of utilities. Description -$$ can be found here: -$$ -$$ http://code.google.com/p/googletest/wiki/PumpManual -$$ - -$$ This should be no larger than MAX_ARITY in base/bind.h.pump. -$var MAX_ARITY = 7 -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_H_ - -#include "base/debug/trace_event.h" -#include "base/logging.h" -#include "cobalt/script/callback_function.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" -#include "cobalt/script/logging_exception_state.h" -#include "cobalt/script/script_object.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" - -// The JSCCallbackFunction type is used to represent IDL callback functions. -// Create a new JSCCallbackFunction by specifying the base CallbackFunction -// as a template parameter to the constructor. -// -// Constructor parameters: -// callable: A handle that keeps keeps alive the JSC::JSFunction that -// will be called when the callback is fired. -// callback: A base::Callback that will be executed when the Run(...) -// function is executed. It will take as parameters a JSC::JSFunction -// followed by any arguments that are defined on the callback type. - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace internal { -// Helper template functions for Callback functions' return values before being -// returned to Cobalt. -// Converts the return value from JavaScript into the correct Cobalt type, or -// sets the exception bit if conversion fails. -template <typename R> -inline CallbackResult<R> ConvertReturnValue(JSC::ExecState* exec_state, - JSC::JSValue jsvalue); -} -// First, we forward declare the Callback class template. This informs the -// compiler that the template only has 1 type parameter which is the base -// CallbackFunction template class with parameters. -// -// See base/callback.h.pump for further discussion on this pattern. -template <typename Sig> -class JSCCallbackFunction; - -$range ARITY 0..MAX_ARITY -$for ARITY [[ -$range ARG 1..ARITY - - -$if ARITY == 0 [[ -template <typename R> -class JSCCallbackFunction<R(void)> - : public CallbackFunction<R(void)> { -]] $else [[ -template <typename R, $for ARG , [[typename A$(ARG)]]> -class JSCCallbackFunction<R($for ARG , [[A$(ARG)]])> - : public CallbackFunction<R($for ARG , [[A$(ARG)]])> { -]] - - public: - explicit JSCCallbackFunction(JSC::JSFunction* callable) - : callable_(callable) { DCHECK(callable_); } - - CallbackResult<R> Run($for ARG , [[ - - typename base::internal::CallbackParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) - const OVERRIDE { - TRACE_EVENT0("cobalt::script::javascriptcore", "JSCCallbackFunction::Run"); - DCHECK(callable_); - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(callable_->globalObject()); - JSC::JSLockHolder lock(global_object->globalData()); - - // https://www.w3.org/TR/WebIDL/#es-invoking-callback-functions - // Callback 'this' is set to null, unless overridden by other specifications - JSC::JSValue this_value = JSC::jsNull(); - JSC::MarkedArgumentBuffer args; - $for ARG [[args.append(ToJSValue(global_object, a$(ARG))); - ]] - - JSC::CallData call_data; - JSC::CallType call_type = - JSC::JSFunction::getCallData(callable_, call_data); - JSC::ExecState* exec_state = global_object->globalExec(); - JSC::JSGlobalData& global_data = global_object->globalData(); - JSC::JSValue retval = - JSC::call(exec_state, callable_, call_type, call_data, this_value, args); - CallbackResult<R> callback_result; - if (exec_state->hadException()) { - DLOG(WARNING) << "Exception in callback: " - << util::GetExceptionString(exec_state); - - exec_state->clearException(); - callback_result.exception = true; - } else { - callback_result = internal::ConvertReturnValue<R>(exec_state, retval); - } - return callback_result; - } - - JSC::JSFunction* callable() const { return callable_; } - - private: - JSC::JSFunction* callable_; -}; - -]] - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_function_holder.h b/src/cobalt/script/javascriptcore/jsc_callback_function_holder.h deleted file mode 100644 index eeb641f..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_function_holder.h +++ /dev/null
@@ -1,89 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_HOLDER_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_HOLDER_H_ - -#include "base/memory/scoped_ptr.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/javascriptcore/jsc_callback_function.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/script_object.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// Implementation of the ScriptObject interface for JSCCallbackFunctions. -template <typename CallbackFunction> -class JSCCallbackFunctionHolder : public ScriptObject<CallbackFunction> { - public: - typedef JSCCallbackFunction<typename CallbackFunction::Signature> - JSCCallbackFunctionClass; - typedef ScriptObject<CallbackFunction> BaseClass; - - JSCCallbackFunctionHolder() : script_object_registry_(NULL) {} - - explicit JSCCallbackFunctionHolder( - const JSCCallbackFunctionClass& cb, - ScriptObjectRegistry* script_object_registry) - : jsc_callable_(cb), script_object_registry_(script_object_registry) { - JSC::validateCell(jsc_callable_.value().callable()); - } - - void RegisterOwner(Wrappable* owner) OVERRIDE { - JSC::validateCell(jsc_callable_.value().callable()); - script_object_registry_->RegisterObjectOwner( - owner, jsc_callable_.value().callable()); - } - - void DeregisterOwner(Wrappable* owner) OVERRIDE { - // callable_ may be in the process of being garbage collected. - script_object_registry_->DeregisterObjectOwner( - owner, jsc_callable_.value().callable()); - } - - const CallbackFunction* GetScriptObject() const OVERRIDE { - return jsc_callable_ ? &jsc_callable_.value() : NULL; - } - - scoped_ptr<BaseClass> MakeCopy() const OVERRIDE { - DCHECK(jsc_callable_); - return make_scoped_ptr<BaseClass>(new JSCCallbackFunctionHolder( - jsc_callable_.value(), script_object_registry_)); - } - - bool EqualTo(const BaseClass& other) const OVERRIDE { - const JSCCallbackFunctionHolder* jsc_other = - base::polymorphic_downcast<const JSCCallbackFunctionHolder*>(&other); - if (!jsc_callable_) { - return !jsc_other->jsc_callable_; - } - DCHECK(jsc_callable_); - DCHECK(jsc_other->jsc_callable_); - return jsc_callable_->callable() == jsc_other->jsc_callable_->callable(); - } - - private: - base::optional<JSCCallbackFunctionClass> jsc_callable_; - ScriptObjectRegistry* script_object_registry_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_HOLDER_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_function_impl.h b/src/cobalt/script/javascriptcore/jsc_callback_function_impl.h deleted file mode 100644 index c95a14a..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_function_impl.h +++ /dev/null
@@ -1,54 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_IMPL_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_IMPL_H_ - -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/jsc_callback_function.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace internal { -// Helper template functions for Callback functions' return values before being -// returned to Cobalt. -// Converts the return value from JavaScript into the correct Cobalt type, or -// sets the exception bit if conversion fails. -template <typename R> -inline CallbackResult<R> ConvertReturnValue(JSC::ExecState* exec_state, - JSC::JSValue jsvalue) { - // TODO: Pass conversion flags to callback function return value. - const int kConversionFlags = 0; - CallbackResult<R> callback_result; - LoggingExceptionState exception_state; - FromJSValue(exec_state, jsvalue, kConversionFlags, &exception_state, - &callback_result.result); - callback_result.exception = exception_state.is_exception_set(); - return callback_result; -} -template <> -inline CallbackResult<void> ConvertReturnValue(JSC::ExecState* exec_state, - JSC::JSValue jsvalue) { - // No conversion necessary. - return CallbackResult<void>(); -} -} // namespace internal -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_FUNCTION_IMPL_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_interface.cc b/src/cobalt/script/javascriptcore/jsc_callback_interface.cc deleted file mode 100644 index 967d24e..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_interface.cc +++ /dev/null
@@ -1,50 +0,0 @@ -/* - * 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/javascriptcore/jsc_callback_interface.h" - -#include "base/logging.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSScope.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// Helper class to get the actual callable object from a JSObject. -JSC::CallType GetCallableForCallbackInterface( - JSC::ExecState* exec_state, JSC::JSObject* implementing_object, - const char* property_name, JSC::JSValue* out_callable, - JSC::CallData* out_call_data) { - DCHECK(implementing_object); - DCHECK(out_callable); - DCHECK(out_call_data); - - JSC::JSValue callable = implementing_object; - JSC::CallType call_type = JSC::getCallData(callable, *out_call_data); - if (call_type == JSC::CallTypeNone) { - JSC::Identifier identifier(exec_state, property_name); - callable = implementing_object->get(exec_state, identifier); - call_type = JSC::getCallData(callable, *out_call_data); - } - if (call_type != JSC::CallTypeNone) { - *out_callable = callable; - } - return call_type; -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_interface.h b/src/cobalt/script/javascriptcore/jsc_callback_interface.h deleted file mode 100644 index 2c62925..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_interface.h +++ /dev/null
@@ -1,41 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_JSC_CALLBACK_INTERFACE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_INTERFACE_H_ - -#include "cobalt/script/callback_interface_traits.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/CallFrame.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/CallData.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSValue.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// Helper class to get the actual callable object from a JSObject. -JSC::CallType GetCallableForCallbackInterface( - JSC::ExecState* exec_state, JSC::JSObject* implementing_object, - const char* property_name, JSC::JSValue* out_callable, - JSC::CallData* out_call_data); - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_INTERFACE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_callback_interface_holder.h b/src/cobalt/script/javascriptcore/jsc_callback_interface_holder.h deleted file mode 100644 index 686e442..0000000 --- a/src/cobalt/script/javascriptcore/jsc_callback_interface_holder.h +++ /dev/null
@@ -1,93 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_JSC_CALLBACK_INTERFACE_HOLDER_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_INTERFACE_HOLDER_H_ - -#include "base/memory/scoped_ptr.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface.h" -#include "cobalt/script/javascriptcore/jsc_exception_state.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/script_object.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -template <typename CallbackInterface> -class JSCCallbackInterfaceHolder : public ScriptObject<CallbackInterface> { - public: - typedef typename CallbackInterfaceTraits< - CallbackInterface>::JSCCallbackInterfaceClass JSCCallbackInterface; - typedef ScriptObject<CallbackInterface> BaseClass; - - JSCCallbackInterfaceHolder() : script_object_registry_(NULL) {} - JSCCallbackInterfaceHolder(const JSCCallbackInterface& callback_interface, - ScriptObjectRegistry* script_object_registry) - : callback_interface_(callback_interface), - script_object_registry_(script_object_registry) {} - - void RegisterOwner(Wrappable* owner) OVERRIDE { - DCHECK(callback_interface_); - JSC::JSObject* implementing_object = - callback_interface_->implementing_object(); - JSC::validateCell(implementing_object); - script_object_registry_->RegisterObjectOwner(owner, implementing_object); - } - - void DeregisterOwner(Wrappable* owner) OVERRIDE { - // The implementing object may be NULL if it's been garbage collected. Still - // call Deregister in this case. - DCHECK(callback_interface_); - JSC::JSObject* implementing_object = - callback_interface_->implementing_object(); - script_object_registry_->DeregisterObjectOwner(owner, implementing_object); - } - - const CallbackInterface* GetScriptObject() const OVERRIDE { - return callback_interface_ ? &callback_interface_.value() : NULL; - } - - scoped_ptr<ScriptObject<CallbackInterface> > MakeCopy() const OVERRIDE { - DCHECK(callback_interface_); - return make_scoped_ptr<BaseClass>(new JSCCallbackInterfaceHolder( - callback_interface_.value(), script_object_registry_)); - } - - bool EqualTo(const BaseClass& other) const OVERRIDE { - const JSCCallbackInterfaceHolder* jsc_other = - base::polymorphic_downcast<const JSCCallbackInterfaceHolder*>(&other); - if (!callback_interface_) { - return !jsc_other->callback_interface_; - } - DCHECK(callback_interface_); - DCHECK(jsc_other->callback_interface_); - return callback_interface_->implementing_object() == - jsc_other->callback_interface_->implementing_object(); - } - - private: - base::optional<JSCCallbackInterface> callback_interface_; - ScriptObjectRegistry* script_object_registry_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_CALLBACK_INTERFACE_HOLDER_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_debugger.cc b/src/cobalt/script/javascriptcore/jsc_debugger.cc deleted file mode 100644 index 78c3a63..0000000 --- a/src/cobalt/script/javascriptcore/jsc_debugger.cc +++ /dev/null
@@ -1,343 +0,0 @@ -/* - * Copyright 2015 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/javascriptcore/jsc_debugger.h" - -#include <cstdlib> -#include <string> - -#include "base/logging.h" -#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_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_source_provider.h" - -#include "third_party/WebKit/Source/JavaScriptCore/debugger/DebuggerCallFrame.h" -#include "third_party/WebKit/Source/JavaScriptCore/heap/MarkedBlock.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/CallFrame.h" -#include "third_party/WebKit/Source/JavaScriptCore/parser/SourceProvider.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Executable.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSCell.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalData.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSScope.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSValue.h" - -namespace cobalt { -namespace script { - -// Static factory method declared in public interface. -scoped_ptr<ScriptDebugger> ScriptDebugger::CreateDebugger( - GlobalEnvironment* global_environment, Delegate* delegate) { - return scoped_ptr<ScriptDebugger>( - new javascriptcore::JSCDebugger(global_environment, delegate)); -} - -namespace javascriptcore { - -namespace { -// Type used to store a set of source providers. -typedef WTF::HashSet<JSC::SourceProvider*> SourceProviderSet; - -// Functor to iterate over the JS cells and gather source providers. -class GathererFunctor : public JSC::MarkedBlock::VoidFunctor { - public: - GathererFunctor(JSC::JSGlobalObject* global_object, - SourceProviderSet* source_providers) - : global_object_(global_object), source_providers_(source_providers) {} - - void operator()(JSC::JSCell* cell) { - JSC::JSFunction* function = JSC::jsDynamicCast<JSC::JSFunction*>(cell); - if (function && !function->isHostFunction() && - function->scope()->globalObject() == global_object_ && - function->executable()->isFunctionExecutable()) { - source_providers_->add( - JSC::jsCast<JSC::FunctionExecutable*>(function->executable()) - ->source() - .provider()); - } - } - - private: - SourceProviderSet* source_providers_; - JSC::JSGlobalObject* global_object_; -}; - -// Uses the GatherorFunctor defined above to gather all the currently parsed -// source providers defined in |global_object| and populate |source_providers|. -// This is called once by the |attach| method; the script debugger is -// automatically notified of subsequently parsed scripts via the |source_parsed| -// method. -void GatherSourceProviders(JSC::JSGlobalObject* global_object, - SourceProviderSet* source_providers) { - DCHECK(global_object); - DCHECK(source_providers); - source_providers->clear(); - GathererFunctor gatherer_functor(global_object, source_providers); - JSC::JSGlobalData& global_data = global_object->globalData(); - global_data.heap.objectSpace().forEachLiveCell(gatherer_functor); -} - -intptr_t StringToIntptr(const std::string& input) { - COMPILE_ASSERT(sizeof(int64) >= sizeof(intptr_t), - int64_not_big_enough_to_store_intptr_t); - int64 as_int64 = 0; - bool did_convert = base::StringToInt64(input, &as_int64); - DCHECK(did_convert); - return static_cast<intptr_t>(as_int64); -} -} // namespace - -JSCDebugger::JSCDebugger(GlobalEnvironment* global_environment, - Delegate* delegate) - : global_environment_(global_environment), - delegate_(delegate), - pause_on_exceptions_(kNone), - pause_on_next_statement_(false), - pause_on_call_frame_(NULL), - current_call_frame_(NULL), - current_source_id_(0), - current_line_number_(0), - current_column_number_(0), - is_paused_(false) {} - -JSCDebugger::~JSCDebugger() { - if (GetGlobalObject()->debugger() == this) { - detach(GetGlobalObject()); - } -} - -void JSCDebugger::Attach() { - if (GetGlobalObject()->debugger() == NULL) { - attach(GetGlobalObject()); - } else { - DLOG(WARNING) << "Debugger is already attached."; - } -} - -void JSCDebugger::Detach() { - if (GetGlobalObject()->debugger() == this) { - detach(GetGlobalObject()); - } else { - DLOG(WARNING) << "Debugger is not attached."; - } -} - -void JSCDebugger::Pause() { - pause_on_next_statement_ = true; - pause_on_call_frame_ = NULL; -} - -void JSCDebugger::Resume() { - pause_on_next_statement_ = false; - pause_on_call_frame_ = NULL; -} - -void JSCDebugger::SetBreakpoint(const std::string& script_id, int line_number, - int column_number) { - // Convert the string script_id used by devtools into the intptr_t source_id - // used internally. - intptr_t source_id = StringToIntptr(script_id); - - breakpoints_.push_back(Breakpoint(source_id, line_number, column_number)); -} - -script::ScriptDebugger::PauseOnExceptionsState -JSCDebugger::SetPauseOnExceptions(PauseOnExceptionsState state) { - const PauseOnExceptionsState previous_state = pause_on_exceptions_; - pause_on_exceptions_ = state; - return previous_state; -} - -void JSCDebugger::StepInto() { - pause_on_next_statement_ = true; - pause_on_call_frame_ = NULL; -} - -void JSCDebugger::StepOut() { - pause_on_next_statement_ = false; - const JSC::CallFrame* call_frame = current_call_frame_.callFrame(); - pause_on_call_frame_ = call_frame ? call_frame->callerFrame() : NULL; -} - -void JSCDebugger::StepOver() { - pause_on_next_statement_ = false; - pause_on_call_frame_ = current_call_frame_.callFrame(); - DCHECK(pause_on_call_frame_); -} - -JSCGlobalObject* JSCDebugger::GetGlobalObject() const { - return base::polymorphic_downcast<JSCGlobalEnvironment*>(global_environment_) - ->global_object(); -} - -void JSCDebugger::attach(JSC::JSGlobalObject* global_object) { - DCHECK(global_object); - JSC::Debugger::attach(global_object); - - // Gather the source providers and call |sourceParsed| on each one. - // Any scripts parsed after this point will automatically invoke a call - // to |sourceParsed|. - SourceProviderSet source_providers; - GatherSourceProviders(global_object, &source_providers); - - for (SourceProviderSet::iterator iter = source_providers.begin(); - iter != source_providers.end(); ++iter) { - sourceParsed(global_object->globalExec(), *iter, -1, String()); - } -} - -void JSCDebugger::detach(JSC::JSGlobalObject* global_object) { - DCHECK(global_object); - JSC::Debugger::detach(global_object); - delegate_->OnScriptDebuggerDetach("canceled_by_user"); -} - -void JSCDebugger::sourceParsed(JSC::ExecState* exec_state, - JSC::SourceProvider* source_provider, - int error_line, - const WTF::String& error_message) { - UNREFERENCED_PARAMETER(exec_state); - DCHECK(source_provider); - - if (error_line < 0) { - // Script was parsed successfully. - delegate_->OnScriptParsed( - scoped_ptr<SourceProvider>(new JSCSourceProvider(source_provider))); - } else { - // Script failed to parse. - delegate_->OnScriptFailedToParse( - scoped_ptr<SourceProvider>(new JSCSourceProvider( - source_provider, error_line, error_message.utf8().data()))); - } -} - -void JSCDebugger::exception(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number, bool has_handler) { - if (pause_on_exceptions_ == kAll || - (pause_on_exceptions_ == kUncaught && !has_handler)) { - pause_on_next_statement_ = true; - pause_on_call_frame_ = NULL; - } - - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::atStatement(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) { - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::callEvent(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) { - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::returnEvent(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) { - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::willExecuteProgram(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) { - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::didExecuteProgram(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) { - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::didReachBreakpoint(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) { - pause_on_next_statement_ = true; - pause_on_call_frame_ = NULL; - UpdateAndPauseIfNeeded(call_frame, source_id, line_number, column_number); -} - -void JSCDebugger::UpdateAndPauseIfNeeded( - const JSC::DebuggerCallFrame& call_frame, intptr_t source_id, - int line_number, int column_number) { - // Don't do anything if we're currently paused. We want to remember the call - // frame and source location at the point we paused, not override them with - // any debugging scripts that get evaluated while paused. - if (is_paused_) { - return; - } - - UpdateSourceLocation(source_id, line_number, column_number); - UpdateCallFrame(call_frame); - PauseIfNeeded(call_frame); -} - -void JSCDebugger::UpdateSourceLocation(intptr_t source_id, int line_number, - int column_number) { - current_source_id_ = source_id; - current_line_number_ = line_number; - current_column_number_ = column_number; -} - -void JSCDebugger::UpdateCallFrame(const JSC::DebuggerCallFrame& call_frame) { - current_call_frame_ = call_frame; -} - -void JSCDebugger::PauseIfNeeded(const JSC::DebuggerCallFrame& call_frame) { - // Determine whether we should pause. - bool will_pause = pause_on_next_statement_; - will_pause |= - pause_on_call_frame_ && pause_on_call_frame_ == call_frame.callFrame(); - will_pause |= IsBreakpointAtCurrentLocation(); - - if (!will_pause) { - return; - } - - // Set the |is_paused_| state for the remainder of this function. - ScopedPausedState paused(this); - - // Delegate handles the actual blocking of the thread to implement Pause. - delegate_->OnScriptDebuggerPause(scoped_ptr<CallFrame>( - new JSCCallFrame(call_frame, current_source_id_, current_line_number_, - current_column_number_))); -} - -bool JSCDebugger::IsBreakpointAtCurrentLocation() const { - for (BreakpointVector::const_iterator it = breakpoints_.begin(); - it != breakpoints_.end(); ++it) { - if (it->source_id == current_source_id_ && - it->line_number == current_line_number_ && - (it->column_number == 0 || - it->column_number == current_column_number_)) { - return true; - } - } - return false; -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_debugger.h b/src/cobalt/script/javascriptcore/jsc_debugger.h deleted file mode 100644 index 7c0b03b..0000000 --- a/src/cobalt/script/javascriptcore/jsc_debugger.h +++ /dev/null
@@ -1,191 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_DEBUGGER_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_DEBUGGER_H_ - -#include <string> -#include <vector> - -#include "base/compiler_specific.h" -#include "base/threading/thread_checker.h" -#include "cobalt/script/javascriptcore/jsc_global_environment.h" -#include "cobalt/script/script_debugger.h" -#include "cobalt/script/source_provider.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/debugger/Debugger.h" -#include "third_party/WebKit/Source/JavaScriptCore/debugger/DebuggerCallFrame.h" -#include "third_party/WebKit/Source/WTF/wtf/HashSet.h" -#include "third_party/WebKit/Source/WTF/wtf/text/WTFString.h" - -namespace JSC { -class ExecState; -class JSGlobalData; -class JSGlobalObject; -class JSScope; -class JSValue; -class SourceProvider; -} - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// JavaScriptCore-specific implementation of a JavaScript debugger. -// Uses multiple inheritance in accordance with the C++ style guide to extend -// JSC::Debugger and implement ScriptDebugger. -// -// Only the ScriptDebugger is publicly exposed. -// This class is not designed to be thread-safe - it is assumed that all -// public methods will be run on the same message loop as the JavaScript -// global object to which this debugger connects. -class JSCDebugger : protected JSC::Debugger, public ScriptDebugger { - public: - JSCDebugger(GlobalEnvironment* global_environment, Delegate* delegate); - ~JSCDebugger() OVERRIDE; - - // Implementation of ScriptDebugger. - void Attach() OVERRIDE; - void Detach() OVERRIDE; - void Pause() OVERRIDE; - void Resume() OVERRIDE; - void SetBreakpoint(const std::string& script_id, int line_number, - int column_number) OVERRIDE; - PauseOnExceptionsState SetPauseOnExceptions( - PauseOnExceptionsState state) OVERRIDE; - void StepInto() OVERRIDE; - void StepOut() OVERRIDE; - void StepOver() OVERRIDE; - - protected: - // Hides a non-virtual JSC::Debugger method with the same name. - void attach(JSC::JSGlobalObject* global_object); - - // The following methods are overrides of pure virtual methods in - // JSC::Debugger, hence the non-standard names. - void detach(JSC::JSGlobalObject* global_object) OVERRIDE; - - void sourceParsed(JSC::ExecState* exec_state, - JSC::SourceProvider* source_provider, int error_line, - const WTF::String& error_message) OVERRIDE; - - void exception(const JSC::DebuggerCallFrame& call_frame, intptr_t source_id, - int line_number, int column_number, bool has_handler) OVERRIDE; - - void atStatement(const JSC::DebuggerCallFrame& call_frame, intptr_t source_id, - int line_number, int column_number) OVERRIDE; - - void callEvent(const JSC::DebuggerCallFrame& call_frame, intptr_t source_id, - int line_number, int column_number) OVERRIDE; - - void returnEvent(const JSC::DebuggerCallFrame& call_frame, intptr_t source_id, - int line_number, int column_number) OVERRIDE; - - void willExecuteProgram(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) OVERRIDE; - - void didExecuteProgram(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) OVERRIDE; - - void didReachBreakpoint(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number) OVERRIDE; - - private: - // Physical breakpoint corresponding to a specific source location. - // TODO: Include other attributes, e.g. condition. - struct Breakpoint { - Breakpoint(intptr_t source_id, int line_number, int column_number) - : source_id(source_id), - line_number(line_number), - column_number(column_number) {} - intptr_t source_id; - int line_number; - int column_number; - }; - - typedef std::vector<Breakpoint> BreakpointVector; - - // Sets the |is_paused_| member of the debugger while in scope, unsets it - // on destruction. - class ScopedPausedState { - public: - explicit ScopedPausedState(JSCDebugger* debugger) : debugger(debugger) { - debugger->is_paused_ = true; - } - ~ScopedPausedState() { debugger->is_paused_ = false; } - - private: - JSCDebugger* debugger; - }; - - // Convenience function to get the global object pointer from the proxy. - JSCGlobalObject* GetGlobalObject() const; - - // Update functions called by the overridden methods from JSC:Debugger above - // (e.g. |atStatement|) as script is executed. - void UpdateAndPauseIfNeeded(const JSC::DebuggerCallFrame& call_frame, - intptr_t source_id, int line_number, - int column_number); - void UpdateSourceLocation(intptr_t source_id, int line_number, - int column_number); - void UpdateCallFrame(const JSC::DebuggerCallFrame& call_frame); - void PauseIfNeeded(const JSC::DebuggerCallFrame& call_frame); - - // Sends event notifications via |delegate_|. - void SendPausedEvent(const JSC::DebuggerCallFrame& call_frame); - void SendResumedEvent(); - - // Whether any of the currently active breakpoints matches the current - // source location. - bool IsBreakpointAtCurrentLocation() const; - - base::ThreadChecker thread_checker_; - GlobalEnvironment* global_environment_; - - // Lifetime managed by the caller of this object's constructor. - Delegate* delegate_; - - // Whether script execution pauses on exceptions. - PauseOnExceptionsState pause_on_exceptions_; - - // Code execution control flags. Script execution can pause on the next - // statement, or on a specific call frame. - bool pause_on_next_statement_; - JSC::CallFrame* pause_on_call_frame_; - - // Current call frame. - JSC::DebuggerCallFrame current_call_frame_; - - // Current source location. - intptr_t current_source_id_; - int current_line_number_; - int current_column_number_; - - // Whether script execution is currently paused. - bool is_paused_; - - // Currently active breakpoints. - BreakpointVector breakpoints_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_DEBUGGER_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_engine.cc b/src/cobalt/script/javascriptcore/jsc_engine.cc deleted file mode 100644 index 178f66b..0000000 --- a/src/cobalt/script/javascriptcore/jsc_engine.cc +++ /dev/null
@@ -1,126 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/jsc_engine.h" - -#include "base/logging.h" -#include "base/memory/singleton.h" -#include "base/message_loop.h" -#include "base/synchronization/lock.h" -#include "base/time.h" -#include "cobalt/base/c_val.h" -#include "cobalt/script/javascriptcore/jsc_global_environment.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/InitializeThreading.h" -#include "third_party/WebKit/Source/WTF/wtf/OSAllocator.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -namespace { - -class JSCEngineStats { - public: - JSCEngineStats(); - - static JSCEngineStats* GetInstance() { - return Singleton<JSCEngineStats, - StaticMemorySingletonTraits<JSCEngineStats> >::get(); - } - - void JSCEngineCreated() { - base::AutoLock auto_lock(lock_); - ++js_engine_count_; - } - - void JSCEngineDestroyed() { - base::AutoLock auto_lock(lock_); - --js_engine_count_; - } - - size_t UpdateMemoryStatsAndReturnReserved() { - base::AutoLock auto_lock(lock_); - if (js_engine_count_.value() == 0) { - return 0; - } - return OSAllocator::getCurrentBytesAllocated(); - } - - private: - friend struct StaticMemorySingletonTraits<JSCEngineStats>; - - base::Lock lock_; - base::CVal<size_t> js_engine_count_; -}; - -JSCEngineStats::JSCEngineStats() - : js_engine_count_("Count.JS.Engine", 0, - "Total JavaScript engine registered.") {} - -} // namespace - -JSCEngine::JSCEngine() { - global_data_ = JSC::JSGlobalData::create(JSC::LargeHeap); - JSCEngineStats::GetInstance()->JSCEngineCreated(); -} - -JSCEngine::~JSCEngine() { - DCHECK(thread_checker_.CalledOnValidThread()); - JSCEngineStats::GetInstance()->JSCEngineDestroyed(); - script_object_registry_.ClearEntries(); -} - -scoped_refptr<GlobalEnvironment> JSCEngine::CreateGlobalEnvironment() { - DCHECK(thread_checker_.CalledOnValidThread()); - return new JSCGlobalEnvironment(this); -} - -void JSCEngine::CollectGarbage() { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(global_data_.get()); - DCHECK(global_data_->heap.isSafeToCollect()); - global_data_->heap.collectAllGarbage(); -} - -void JSCEngine::ReportExtraMemoryCost(size_t bytes) { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(global_data_.get()); - global_data_->heap.reportExtraMemoryCost(bytes); -} - -size_t JSCEngine::UpdateMemoryStatsAndReturnReserved() { - return JSCEngineStats::GetInstance()->UpdateMemoryStatsAndReturnReserved(); -} - -} // namespace javascriptcore - -scoped_ptr<JavaScriptEngine> JavaScriptEngine::CreateEngine() { - // Documentation in InitializeThreading.h states this function should be - // called from the main thread. However, calling it here from the thread each - // engine is created on appears to show no difference in practice. - JSC::initializeThreading(); - - // There must be at most one JSGlobalData instance created per thread. - scoped_ptr<javascriptcore::JSCEngine> engine(new javascriptcore::JSCEngine()); - - // Global data should be of Default type - one per thread. - DCHECK(!engine->global_data()->usingAPI()); - - return engine.PassAs<JavaScriptEngine>(); -} - -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_engine.h b/src/cobalt/script/javascriptcore/jsc_engine.h deleted file mode 100644 index 7ee06e0..0000000 --- a/src/cobalt/script/javascriptcore/jsc_engine.h +++ /dev/null
@@ -1,54 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_JSC_ENGINE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_ENGINE_H_ - -#include "base/threading/thread_checker.h" -#include "cobalt/script/javascript_engine.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalData.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class JSCEngine : public JavaScriptEngine { - public: - JSCEngine(); - ~JSCEngine() OVERRIDE; - - scoped_refptr<GlobalEnvironment> CreateGlobalEnvironment() OVERRIDE; - void CollectGarbage() OVERRIDE; - void ReportExtraMemoryCost(size_t bytes) OVERRIDE; - size_t UpdateMemoryStatsAndReturnReserved() OVERRIDE; - - JSC::JSGlobalData* global_data() { return global_data_.get(); } - ScriptObjectRegistry* script_object_registry() { - return &script_object_registry_; - } - - private: - base::ThreadChecker thread_checker_; - ScriptObjectRegistry script_object_registry_; - RefPtr<JSC::JSGlobalData> global_data_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_ENGINE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_exception_state.cc b/src/cobalt/script/javascriptcore/jsc_exception_state.cc deleted file mode 100644 index b1c63d2..0000000 --- a/src/cobalt/script/javascriptcore/jsc_exception_state.cc +++ /dev/null
@@ -1,71 +0,0 @@ -/* - * Copyright 2015 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/javascriptcore/jsc_exception_state.h" - -#include <string> - -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Error.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ErrorInstance.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -void JSCExceptionState::SetException( - const scoped_refptr<ScriptException>& exception) { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(&global_object_->globalData()); - exception_ = - global_object_->wrapper_factory()->GetWrapper(global_object_, exception); - DCHECK(exception_->isErrorInstance()); -} - -void JSCExceptionState::SetSimpleException(MessageType message_type, ...) { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(&global_object_->globalData()); - - va_list arguments; - va_start(arguments, message_type); - WTF::String error_string = ToWTFString( - base::StringPrintV(GetExceptionMessageFormat(message_type), arguments)); - va_end(arguments); - - switch (GetSimpleExceptionType(message_type)) { - case kError: - exception_ = JSC::createError(global_object_, error_string); - break; - case kTypeError: - exception_ = JSC::createTypeError(global_object_, error_string); - break; - case kRangeError: - exception_ = JSC::createRangeError(global_object_, error_string); - break; - case kReferenceError: - exception_ = JSC::createReferenceError(global_object_, error_string); - break; - case kSyntaxError: - exception_ = JSC::createSyntaxError(global_object_, error_string); - break; - case kURIError: - exception_ = JSC::createURIError(global_object_, error_string); - break; - } -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_exception_state.h b/src/cobalt/script/javascriptcore/jsc_exception_state.h deleted file mode 100644 index 1dfd273..0000000 --- a/src/cobalt/script/javascriptcore/jsc_exception_state.h +++ /dev/null
@@ -1,49 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_EXCEPTION_STATE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_EXCEPTION_STATE_H_ - -#include "base/threading/thread_checker.h" -#include "cobalt/script/exception_state.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class JSCExceptionState : public ExceptionState { - public: - explicit JSCExceptionState(JSCGlobalObject* global_object) - : global_object_(global_object), exception_(NULL) {} - // ExceptionState interface - void SetException(const scoped_refptr<ScriptException>& exception) OVERRIDE; - void SetSimpleException(MessageType message_type, ...) OVERRIDE; - - bool is_exception_set() const { return (exception_ != NULL); } - JSC::JSObject* exception_object() { return exception_; } - - private: - JSCGlobalObject* global_object_; - JSC::JSObject* exception_; - base::ThreadChecker thread_checker_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_EXCEPTION_STATE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_global_environment.cc b/src/cobalt/script/javascriptcore/jsc_global_environment.cc deleted file mode 100644 index 98e6d01..0000000 --- a/src/cobalt/script/javascriptcore/jsc_global_environment.cc +++ /dev/null
@@ -1,211 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/jsc_global_environment.h" - -#include <algorithm> -#include <string> - -#include "base/debug/trace_event.h" -#include "base/string_util.h" -#include "base/stringprintf.h" -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/javascriptcore/jsc_engine.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/javascriptcore/jsc_source_code.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/heap/StrongInlines.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Completion.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -void JSCGlobalEnvironment::PreventGarbageCollection( - const scoped_refptr<Wrappable>& wrappable) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(global_object_); - - JSC::JSLockHolder lock(global_object_->globalData()); - - JSC::JSObject* wrapper = global_object_->wrapper_factory()->GetWrapper( - global_object_.get(), wrappable); - global_object_->object_cache()->CacheJSObject(wrapper); -} - -JSCGlobalEnvironment::~JSCGlobalEnvironment() { - if (global_object_.get()) { - global_object_->setReportEvalCallback(NULL); - } -} - -void JSCGlobalEnvironment::CreateGlobalObject() { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(engine_->global_data()); - - JSCGlobalObject* global_object = JSCGlobalObject::Create( - engine_->global_data(), engine_->script_object_registry()); - SetGlobalObject(global_object); -} - -void JSCGlobalEnvironment::AllowGarbageCollection( - const scoped_refptr<Wrappable>& wrappable) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(global_object_); - - JSC::JSLockHolder lock(global_object_->globalData()); - - JSC::JSObject* wrapper = global_object_->wrapper_factory()->GetWrapper( - global_object_.get(), wrappable); - global_object_->object_cache()->UncacheJSObject(wrapper); -} - -void JSCGlobalEnvironment::DisableEval(const std::string& message) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(global_object_); - global_object_->setEvalEnabled(false, message.c_str()); -} - -void JSCGlobalEnvironment::EnableEval() { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(global_object_); - global_object_->setEvalEnabled(true); -} - -void JSCGlobalEnvironment::DisableJit() {} - -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::JSCGlobalEnvironment*>(this) - ->global_object(); - - JSC::JSLockHolder lock(&jsc_global_object->globalData()); - - JSC::JSObject* wrapper = - jsc_global_object->wrapper_factory()->GetWrapper(jsc_global_object, impl); - - JSC::Identifier jsc_identifier = - JSC::Identifier(jsc_global_object->globalExec(), identifier.c_str()); - - // Make sure the property we are binding doesn't already exist. - DCHECK(!jsc_global_object->hasOwnProperty(jsc_global_object->globalExec(), - jsc_identifier)); - - // Add the property to the global object. - jsc_global_object->putDirect(jsc_global_object->globalData(), jsc_identifier, - wrapper); -} - -bool JSCGlobalEnvironment::EvaluateScript( - const scoped_refptr<SourceCode>& source_code, std::string* out_result) { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(global_object_->globalData()); - - JSC::JSValue result; - bool success = EvaluateScriptInternal(source_code, &result); - if (out_result) { - if (!success) { - *out_result = - util::GetExceptionString(global_object_->globalExec(), result); - } else { - WTF::String return_string = - result.toWTFString(global_object_->globalExec()); - *out_result = return_string.utf8().data(); - } - } - - return success; -} - -bool JSCGlobalEnvironment::EvaluateScript( - const scoped_refptr<SourceCode>& source_code, - const scoped_refptr<Wrappable>& owning_object, - base::optional<OpaqueHandleHolder::Reference>* out_opaque_handle) { - DCHECK(thread_checker_.CalledOnValidThread()); - JSC::JSLockHolder lock(global_object_->globalData()); - - JSC::JSValue result; - if (!EvaluateScriptInternal(source_code, &result)) { - std::string exception = - util::GetExceptionString(global_object_->globalExec(), result); - DLOG(ERROR) << exception; - return false; - } - JSCObjectHandle jsc_object_handle(JSC::asObject(result)); - JSCObjectHandleHolder jsc_object_holder( - JSCObjectHandle(JSC::asObject(result)), - global_object_->script_object_registry()); - out_opaque_handle->emplace(owning_object.get(), jsc_object_holder); - return true; -} - -std::vector<StackFrame> JSCGlobalEnvironment::GetStackTrace(int max_frames) { - DCHECK(thread_checker_.CalledOnValidThread()); - return util::GetStackTrace(global_object_->globalExec(), max_frames); -} - -void JSCGlobalEnvironment::reportEval() { - if (!report_eval_cb_.is_null()) { - report_eval_cb_.Run(); - } -} - -void JSCGlobalEnvironment::SetGlobalObject(JSCGlobalObject* jsc_global_object) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK_EQ(reinterpret_cast<uintptr_t>(global_object_.get()), NULL); - global_object_ = - JSC::Strong<JSCGlobalObject>(*engine_->global_data(), jsc_global_object); - global_object_->setReportEvalCallback(this); - // Disable eval() unless it's explicitly enabled (by CSP, for example). - DisableEval("eval() is disabled by default."); -} - -bool JSCGlobalEnvironment::EvaluateScriptInternal( - const scoped_refptr<SourceCode>& source_code, JSC::JSValue* out_result) { - TRACE_EVENT0("cobalt::script::javascriptcore", - "JSCGlobalEnvironment::EvaluateScriptInternal"); - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(global_object_); - - JSC::ExecState* exec = global_object_->globalExec(); - // Downcast to the JSC implementation of the SourceCode interface. - JSCSourceCode* jsc_source_code = - base::polymorphic_downcast<JSCSourceCode*>(source_code.get()); - - // Evaluate the source code and gather the return value and exception if - // one occurred. - JSC::JSValue exception; - JSC::JSValue return_value = JSC::evaluate(exec, jsc_source_code->source(), - JSC::JSValue(), // thisValue - &exception); - if (exception) { - *out_result = exception; - exec->clearException(); - return false; - } else { - *out_result = return_value; - return true; - } -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_global_environment.h b/src/cobalt/script/javascriptcore/jsc_global_environment.h deleted file mode 100644 index dcb530d..0000000 --- a/src/cobalt/script/javascriptcore/jsc_global_environment.h +++ /dev/null
@@ -1,108 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_JSC_GLOBAL_ENVIRONMENT_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_ENVIRONMENT_H_ - -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/memory/ref_counted.h" -#include "base/threading/thread_checker.h" -#include "cobalt/script/global_environment.h" -#include "cobalt/script/javascriptcore/jsc_engine.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class ScriptObjectRegistry; - -// 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 JSCGlobalEnvironment : public GlobalEnvironment, - public JSC::ReportEvalCallback { - public: - explicit JSCGlobalEnvironment(JSCEngine* engine) : engine_(engine) {} - ~JSCGlobalEnvironment() OVERRIDE; - - void CreateGlobalObject() OVERRIDE; - - // out_result holds the string value of the last statement executed, or - // an exception message in the case of an exception. - bool EvaluateScript(const scoped_refptr<SourceCode>& source_code, - std::string* out_result) OVERRIDE; - - bool EvaluateScript(const scoped_refptr<SourceCode>& script_utf8, - const scoped_refptr<Wrappable>& owning_object, - base::optional<OpaqueHandleHolder::Reference>* - out_opaque_handle) OVERRIDE; - - std::vector<StackFrame> GetStackTrace(int max_frames = 0) OVERRIDE; - - // Create the wrapper object if it has not been created, and add it to - // the JSObjectCache. - void PreventGarbageCollection( - const scoped_refptr<Wrappable>& wrappable) OVERRIDE; - - // Remove a reference to the wrapper object from the JSObjectCache. - void AllowGarbageCollection( - const scoped_refptr<Wrappable>& wrappable) OVERRIDE; - - void DisableEval(const std::string& message) OVERRIDE; - - void EnableEval() OVERRIDE; - - void DisableJit() OVERRIDE; - - void SetReportEvalCallback(const base::Closure& report_eval) OVERRIDE { - DCHECK(thread_checker_.CalledOnValidThread()); - report_eval_cb_ = report_eval; - } - - // Dynamically bind an object to the global object. - void Bind(const std::string& identifier, - const scoped_refptr<Wrappable>& impl) OVERRIDE; - - JSCGlobalObject* global_object() { return global_object_.get(); } - - JSCEngine* engine() { return engine_; } - - private: - // JSC::ReportEvalCallback - void reportEval() OVERRIDE; - - void SetGlobalObject(JSCGlobalObject* jsc_global_object); - - bool EvaluateScriptInternal(const scoped_refptr<SourceCode>& source_code, - JSC::JSValue* out_result); - - base::ThreadChecker thread_checker_; - // Strong references prevent the object from getting garbage collected. It - // is used as a root for object graph traversal. - JSC::Strong<JSCGlobalObject> global_object_; - JSCEngine* engine_; - base::Closure report_eval_cb_; - friend class GlobalEnvironment; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_ENVIRONMENT_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_global_object.cc b/src/cobalt/script/javascriptcore/jsc_global_object.cc deleted file mode 100644 index 9122348..0000000 --- a/src/cobalt/script/javascriptcore/jsc_global_object.cc +++ /dev/null
@@ -1,67 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/jsc_global_object.h" - -#include "base/logging.h" -#include "cobalt/script/javascriptcore/util/exception_helpers.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -const JSC::ClassInfo JSCGlobalObject::s_info = { - "JSCGlobalObject", JSC::JSGlobalObject::s_classinfo(), 0, 0, - CREATE_METHOD_TABLE(JSCGlobalObject)}; - -JSCGlobalObject* JSCGlobalObject::Create( - JSC::JSGlobalData* global_data, - ScriptObjectRegistry* script_object_registry) { - JSC::Structure* structure = JSC::Structure::create( - *global_data, - NULL, // JSC::JSGlobalObject* - JSC::jsNull(), // prototype - JSC::TypeInfo(JSC::GlobalObjectType, JSC::JSGlobalObject::StructureFlags), - &s_info); - JSCGlobalObject* global_object = - new (NotNull, JSC::allocateCell<JSCGlobalObject>(global_data->heap)) - JSCGlobalObject(global_data, structure, script_object_registry, NULL, - scoped_ptr<WrapperFactory>(), NULL); - global_object->finishCreation(*global_data); - global_data->heap.addFinalizer(global_object, destroy); - return global_object; -} - -JSCGlobalObject::JSCGlobalObject(JSC::JSGlobalData* global_data, - JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<Wrappable>& wrappable, - scoped_ptr<WrapperFactory> wrapper_factory, - EnvironmentSettings* environment_settings) - : JSC::JSGlobalObject(*global_data, structure), - global_interface_(wrappable), - wrapper_factory_(wrapper_factory.Pass()), - object_cache_(new JSObjectCache(this)), - script_object_registry_(script_object_registry), - environment_settings_(environment_settings) {} - -std::vector<script::StackFrame> JSCGlobalObject::GetStackTrace(int max_frames) { - return util::GetStackTrace(globalExec(), max_frames); -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_global_object.h b/src/cobalt/script/javascriptcore/jsc_global_object.h deleted file mode 100644 index 89f0dc6..0000000 --- a/src/cobalt/script/javascriptcore/jsc_global_object.h +++ /dev/null
@@ -1,112 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_JSC_GLOBAL_OBJECT_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_OBJECT_H_ - -#include <vector> - -#include "base/bind.h" -#include "base/hash_tables.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "cobalt/script/environment_settings.h" -#include "cobalt/script/javascriptcore/js_object_cache.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "cobalt/script/javascriptcore/wrapper_factory.h" -#include "cobalt/script/stack_frame.h" -#include "cobalt/script/wrappable.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalData.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// JSCGlobalObject is JavaScriptCore's Global Object in Cobalt. It inherits from -// JSC::GlobalObject so we can use this wherever a JSC::GlobalObject would be -// used, allowing us to downcast to JSCGlobalObject. -// JSCGlobalObject is a garbage-collected object. -class JSCGlobalObject : public JSC::JSGlobalObject { - public: - // Create a new garbage-collected JSCGlobalObject instance. - static JSCGlobalObject* Create(JSC::JSGlobalData* global_data, - ScriptObjectRegistry* script_object_registry); - - scoped_refptr<Wrappable> global_interface() { return global_interface_; } - - const WrapperFactory* wrapper_factory() { return wrapper_factory_.get(); } - - JSObjectCache* object_cache() { return object_cache_.get(); } - - ScriptObjectRegistry* script_object_registry() { - return script_object_registry_; - } - - // Getters for CallWith= arguments - EnvironmentSettings* GetEnvironmentSettings() { - return environment_settings_; - } - std::vector<StackFrame> GetStackTrace(int max_frames = 0); - - // JavaScriptCore stuff - DECLARE_CLASSINFO(); - - // Classes that inherit from JSC::GlobalObject set this flag, and set a - // finalizer method on creation. - static const bool needsDestruction = false; - - // Statically override this to ensure that we visit objects that are cached - // or otherwise should not be garbage collected. - static void visitChildren(JSC::JSCell* cell, - JSC::SlotVisitor& visitor) { // NOLINT - JSC::JSGlobalObject::visitChildren(cell, visitor); - // Cast the JSC::JSCell* to a JSCGlobalObject, and call the non-static - // visit_children function. - ASSERT_GC_OBJECT_INHERITS(cell, &s_info); - JSCGlobalObject* this_object = JSC::jsCast<JSCGlobalObject*>(cell); - this_object->object_cache_->VisitChildren(&visitor); - this_object->script_object_registry_->VisitOwnedObjects( - this_object->global_interface_.get(), &visitor); - } - - // static override. This will be called when this object is garbage collected. - static void destroy(JSC::JSCell* cell) { - // This is necessary when a garbage-collected object has a non-trivial - // destructor. - static_cast<JSCGlobalObject*>(cell)->~JSCGlobalObject(); - } - - protected: - JSCGlobalObject(JSC::JSGlobalData* global_data, JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<Wrappable>& global_interface, - scoped_ptr<WrapperFactory> wrapper_factory, - EnvironmentSettings* environment_settings); - - private: - scoped_refptr<Wrappable> global_interface_; - scoped_ptr<WrapperFactory> wrapper_factory_; - scoped_ptr<JSObjectCache> object_cache_; - ScriptObjectRegistry* script_object_registry_; - EnvironmentSettings* environment_settings_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_OBJECT_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_object_handle.h b/src/cobalt/script/javascriptcore/jsc_object_handle.h deleted file mode 100644 index 3b79a93..0000000 --- a/src/cobalt/script/javascriptcore/jsc_object_handle.h +++ /dev/null
@@ -1,41 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_JSC_OBJECT_HANDLE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_OBJECT_HANDLE_H_ - -#include "cobalt/script/opaque_handle.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// A wrapper around a JSC::JSObject that can be passed into Cobalt as an -// opaque script object. -class JSCObjectHandle : public OpaqueHandle { - public: - explicit JSCObjectHandle(JSC::JSObject* wrapper) : handle_(wrapper) {} - JSC::JSObject* handle() const { return handle_; } - - private: - JSC::JSObject* handle_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_OBJECT_HANDLE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_object_handle_holder.h b/src/cobalt/script/javascriptcore/jsc_object_handle_holder.h deleted file mode 100644 index 6c1c172..0000000 --- a/src/cobalt/script/javascriptcore/jsc_object_handle_holder.h +++ /dev/null
@@ -1,87 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_OBJECT_HANDLE_HOLDER_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_OBJECT_HANDLE_HOLDER_H_ - -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/javascriptcore/jsc_object_handle.h" -#include "cobalt/script/javascriptcore/script_object_registry.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// Implementation of OpaqueHandleHolder class which is used to pass opaque -// script handles into Cobalt. -class JSCObjectHandleHolder : public OpaqueHandleHolder { - public: - JSCObjectHandleHolder() : script_object_registry_(NULL) {} - - explicit JSCObjectHandleHolder(const JSCObjectHandle& handle, - ScriptObjectRegistry* script_object_registry) - : object_handle_(handle), - script_object_registry_(script_object_registry) {} - - void RegisterOwner(Wrappable* owner) OVERRIDE { - JSC::JSObject* object = js_object(); - JSC::validateCell(object); - script_object_registry_->RegisterObjectOwner(owner, object); - } - - void DeregisterOwner(Wrappable* owner) OVERRIDE { - JSC::JSObject* object = js_object(); - // object may be in the process of being garbage collected, so do not - // dereference it. - script_object_registry_->DeregisterObjectOwner(owner, object); - } - - const OpaqueHandle* GetScriptObject() const OVERRIDE { - return object_handle_ ? &object_handle_.value() : NULL; - } - - scoped_ptr<OpaqueHandleHolder> MakeCopy() const OVERRIDE { - DCHECK(object_handle_); - return make_scoped_ptr<OpaqueHandleHolder>(new JSCObjectHandleHolder( - object_handle_.value(), script_object_registry_)); - } - - bool EqualTo(const OpaqueHandleHolder& other) const OVERRIDE { - const JSCObjectHandleHolder* jsc_other = - base::polymorphic_downcast<const JSCObjectHandleHolder*>(&other); - if (!object_handle_) { - return !jsc_other->object_handle_; - } - DCHECK(object_handle_); - DCHECK(jsc_other->object_handle_); - return object_handle_->handle() == jsc_other->object_handle_->handle(); - } - - JSC::JSObject* js_object() const { - DCHECK(object_handle_); - return object_handle_->handle(); - } - - private: - base::optional<JSCObjectHandle> object_handle_; - ScriptObjectRegistry* script_object_registry_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_OBJECT_HANDLE_HOLDER_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_property_enumerator.h b/src/cobalt/script/javascriptcore/jsc_property_enumerator.h deleted file mode 100644 index 709cf08..0000000 --- a/src/cobalt/script/javascriptcore/jsc_property_enumerator.h +++ /dev/null
@@ -1,48 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_JSC_PROPERTY_ENUMERATOR_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_PROPERTY_ENUMERATOR_H_ - -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/property_enumerator.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// Implements the PropertyEnumerator interface. Enumerated properties will -// be added to the JSC::PropertyNameArray that is passed in at construction. -class JSCPropertyEnumerator : public PropertyEnumerator { - public: - JSCPropertyEnumerator(JSC::ExecState* exec_state, - JSC::PropertyNameArray* property_names) - : exec_state_(exec_state), property_names_(property_names) {} - void AddProperty(const std::string& property_name) OVERRIDE { - WTF::String wtf_string = ToWTFString(property_name); - JSC::Identifier identifier(exec_state_, wtf_string.impl()); - property_names_->add(identifier); - } - - private: - JSC::ExecState* exec_state_; - JSC::PropertyNameArray* property_names_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_PROPERTY_ENUMERATOR_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_scope.cc b/src/cobalt/script/javascriptcore/jsc_scope.cc deleted file mode 100644 index c503aa6..0000000 --- a/src/cobalt/script/javascriptcore/jsc_scope.cc +++ /dev/null
@@ -1,74 +0,0 @@ -/* - * 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/javascriptcore/jsc_scope.h" - -#include "base/logging.h" -#include "base/string_number_conversions.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalData.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSScope.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSValue.h" - -namespace cobalt { -namespace script { - -namespace javascriptcore { - -JSCScope::JSCScope(JSC::JSScope* scope) : scope_(scope), global_object_(NULL) { - DCHECK(scope_); - global_object_ = JSC::jsCast<JSCGlobalObject*>(scope->globalObject()); - DCHECK(global_object_); - - scope_holder_.reset(new JSCObjectHandleHolder( - JSCObjectHandle(scope_), global_object_->script_object_registry())); - DCHECK(scope_holder_); -} - -JSCScope::~JSCScope() {} - -const OpaqueHandleHolder* JSCScope::GetObject() { return scope_holder_.get(); } - -Scope::Type JSCScope::GetType() { - DCHECK(scope_); - int type = scope_->structure()->typeInfo().type(); - std::string type_string; - switch (type) { - case JSC::GlobalObjectType: - return kGlobal; - case JSC::ActivationObjectType: - return kLocal; - default: { - DLOG(WARNING) << "Unexpected scope type: " << type; - return kLocal; - } - } -} - -scoped_ptr<Scope> JSCScope::GetNext() { - DCHECK(scope_); - if (scope_->next()) { - return scoped_ptr<Scope>(new JSCScope(scope_->next())); - } else { - return scoped_ptr<Scope>(); - } -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_scope.h b/src/cobalt/script/javascriptcore/jsc_scope.h deleted file mode 100644 index 1e11e96..0000000 --- a/src/cobalt/script/javascriptcore/jsc_scope.h +++ /dev/null
@@ -1,54 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_JSC_SCOPE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_SCOPE_H_ - -#include <string> - -#include "base/optional.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/scope.h" - -namespace JSC { -class JSScope; -} - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// JavaScriptCore-specific implementation of a JavaScript call frame. -class JSCScope : public Scope { - public: - explicit JSCScope(JSC::JSScope* scope); - ~JSCScope() OVERRIDE; - - const OpaqueHandleHolder* GetObject() OVERRIDE; - Type GetType() OVERRIDE; - scoped_ptr<Scope> GetNext() OVERRIDE; - - private: - JSC::JSScope* scope_; - JSCGlobalObject* global_object_; - scoped_ptr<JSCObjectHandleHolder> scope_holder_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_SCOPE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_source_code.cc b/src/cobalt/script/javascriptcore/jsc_source_code.cc deleted file mode 100644 index 7ff4be5..0000000 --- a/src/cobalt/script/javascriptcore/jsc_source_code.cc +++ /dev/null
@@ -1,81 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/jsc_source_code.h" - -#include <string> - -#include "base/string_util.h" -#include "cobalt/script/javascriptcore/conversion_helpers.h" -#include "cobalt/script/source_code.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/parser/SourceCode.h" -#include "third_party/WebKit/Source/JavaScriptCore/parser/SourceProvider.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -namespace { - -// Similar to JSC::StringSourceProvider, but takes in a UTF-8 string and -// converts to a UTF-16 WTF string. -class UTF8StringSourceProvider : public JSC::SourceProvider { - public: - static WTF::PassRefPtr<UTF8StringSourceProvider> Create( - const std::string& source_utf8, const std::string& source_url, - int line_number, int column_number) { - return WTF::adoptRef(new UTF8StringSourceProvider( - source_utf8, source_url, line_number, column_number)); - } - const WTF::String& source() const OVERRIDE { return source_; } - - private: - explicit UTF8StringSourceProvider(const std::string& source_utf8, - const std::string& source_url, - int line_number, int column_number) - : SourceProvider( - ToWTFString(source_url), - WTF::TextPosition( - WTF::OrdinalNumber::fromOneBasedInt(line_number), - WTF::OrdinalNumber::fromOneBasedInt(column_number))) { - source_ = ToWTFString(source_utf8); - } - WTF::String source_; -}; - -} // namespace - -JSCSourceCode::JSCSourceCode(const std::string& source_utf8, - const base::SourceLocation& source_location) { - RefPtr<UTF8StringSourceProvider> source_provider = - UTF8StringSourceProvider::Create(source_utf8, source_location.file_path, - source_location.line_number, - source_location.column_number); - source_ = JSC::SourceCode(source_provider, source_location.line_number); -} - -} // namespace javascriptcore - -// static method declared in public interface -scoped_refptr<SourceCode> SourceCode::CreateSourceCode( - const std::string& source_utf8, - const base::SourceLocation& source_location) { - return new javascriptcore::JSCSourceCode(source_utf8, source_location); -} - -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_source_code.h b/src/cobalt/script/javascriptcore/jsc_source_code.h deleted file mode 100644 index 2e7e76d..0000000 --- a/src/cobalt/script/javascriptcore/jsc_source_code.h +++ /dev/null
@@ -1,45 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_JSC_SOURCE_CODE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_SOURCE_CODE_H_ - -#include <string> - -#include "cobalt/script/source_code.h" - -#include "config.h" -#include "third_party/WebKit/Source/JavaScriptCore/parser/SourceCode.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class JSCSourceCode : public SourceCode { - public: - explicit JSCSourceCode(const std::string& source_utf8, - const base::SourceLocation& source_location); - JSC::SourceCode& source() { return source_; } - - private: - JSC::SourceCode source_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_SOURCE_CODE_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_source_provider.cc b/src/cobalt/script/javascriptcore/jsc_source_provider.cc deleted file mode 100644 index 836b044..0000000 --- a/src/cobalt/script/javascriptcore/jsc_source_provider.cc +++ /dev/null
@@ -1,110 +0,0 @@ -/* - * 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/javascriptcore/jsc_source_provider.h" - -#include "base/logging.h" -#include "base/string_number_conversions.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/parser/SourceProvider.h" -#include "third_party/WebKit/Source/WTF/wtf/text/CString.h" -#include "third_party/WebKit/Source/WTF/wtf/text/WTFString.h" - -namespace cobalt { -namespace script { - -namespace javascriptcore { - -namespace { -// Conversion from intptr_t to std::string. -// Used to convert the ID used by JSC::SourceProvider (which is cast from the -// object pointer) to a string. -std::string IntptrToString(intptr_t input) { - COMPILE_ASSERT(sizeof(int64) >= sizeof(intptr_t), - int64_not_big_enough_to_store_intptr_t); - int64 input_as_int64 = static_cast<int64>(input); - return base::Int64ToString(input_as_int64); -} -} // namespace - -JSCSourceProvider::JSCSourceProvider(JSC::SourceProvider* source_provider) - : source_provider_(source_provider) { - DCHECK(source_provider_); -} - -JSCSourceProvider::JSCSourceProvider(JSC::SourceProvider* source_provider, - int error_line, - const std::string& error_message) - : source_provider_(source_provider), - error_line_(error_line), - error_message_(error_message) { - DCHECK(source_provider_); - DCHECK_GE(error_line, 0); -} - -JSCSourceProvider::~JSCSourceProvider() {} - -base::optional<int> JSCSourceProvider::GetEndColumn() { - // TODO: Work out how to get this from a JSC::SourceProvider. - // Should be provided for inline scripts. - return base::nullopt; -} - -base::optional<int> JSCSourceProvider::GetEndLine() { - // TODO: Work out how to get this from a JSC::SourceProvider. - // Should be provided for inline scripts. - return base::nullopt; -} - -base::optional<int> JSCSourceProvider::GetErrorLine() { return error_line_; } - -base::optional<std::string> JSCSourceProvider::GetErrorMessage() { - return error_message_; -} - -std::string JSCSourceProvider::GetScriptId() { - return IntptrToString(source_provider_->asID()); -} - -std::string JSCSourceProvider::GetScriptSource() { - return source_provider_->source().utf8().data(); -} - -base::optional<std::string> JSCSourceProvider::GetSourceMapUrl() { - // TODO: Determine if we need to support this, and if so, how. - return base::nullopt; -} - -base::optional<int> JSCSourceProvider::GetStartColumn() { - return source_provider_->startPosition().m_column.oneBasedInt(); -} - -base::optional<int> JSCSourceProvider::GetStartLine() { - return source_provider_->startPosition().m_line.oneBasedInt(); -} - -std::string JSCSourceProvider::GetUrl() { - return source_provider_->url().utf8().data(); -} - -base::optional<bool> JSCSourceProvider::IsContentScript() { - return base::nullopt; -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/jsc_source_provider.h b/src/cobalt/script/javascriptcore/jsc_source_provider.h deleted file mode 100644 index 92bb359..0000000 --- a/src/cobalt/script/javascriptcore/jsc_source_provider.h +++ /dev/null
@@ -1,62 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_JSC_SOURCE_PROVIDER_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_SOURCE_PROVIDER_H_ - -#include <base/optional.h> -#include <cobalt/script/source_provider.h> - -#include <string> - -namespace JSC { -class SourceProvider; -} - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// JavaScriptCore-specific implementation of a JavaScript source provider. -class JSCSourceProvider : public SourceProvider { - public: - explicit JSCSourceProvider(JSC::SourceProvider* source_provider); - JSCSourceProvider(JSC::SourceProvider* source_provider, int error_line, - const std::string& error_message); - ~JSCSourceProvider() OVERRIDE; - - base::optional<int> GetEndColumn() OVERRIDE; - base::optional<int> GetEndLine() OVERRIDE; - base::optional<int> GetErrorLine() OVERRIDE; - base::optional<std::string> GetErrorMessage() OVERRIDE; - std::string GetScriptId() OVERRIDE; - std::string GetScriptSource() OVERRIDE; - base::optional<std::string> GetSourceMapUrl() OVERRIDE; - base::optional<int> GetStartColumn() OVERRIDE; - base::optional<int> GetStartLine() OVERRIDE; - std::string GetUrl() OVERRIDE; - base::optional<bool> IsContentScript() OVERRIDE; - - private: - JSC::SourceProvider* source_provider_; - base::optional<int> error_line_; - base::optional<std::string> error_message_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_SOURCE_PROVIDER_H_
diff --git a/src/cobalt/script/javascriptcore/jsc_wrapper_handle.h b/src/cobalt/script/javascriptcore/jsc_wrapper_handle.h deleted file mode 100644 index 53d98b0..0000000 --- a/src/cobalt/script/javascriptcore/jsc_wrapper_handle.h +++ /dev/null
@@ -1,51 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_JSC_WRAPPER_HANDLE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_WRAPPER_HANDLE_H_ - -#include "cobalt/base/polymorphic_downcast.h" -#include "cobalt/script/wrappable.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// A wrapper around a JSC::Weak handle to a garbage-collected JSC::JSObject -// object. It's expected that this is a WrapperBase<T> object. -class JSCWrapperHandle : public Wrappable::WeakWrapperHandle { - public: - explicit JSCWrapperHandle(JSC::PassWeak<JSC::JSObject> wrapper) { - handle_ = wrapper; - } - static JSC::JSObject* GetJSObject( - const Wrappable::WeakWrapperHandle* handle) { - if (handle) { - return base::polymorphic_downcast<const JSCWrapperHandle*>(handle) - ->handle_.get(); - } - return NULL; - } - - private: - JSC::Weak<JSC::JSObject> handle_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_WRAPPER_HANDLE_H_
diff --git a/src/cobalt/script/javascriptcore/numeric_conversion_test.cc b/src/cobalt/script/javascriptcore/numeric_conversion_test.cc deleted file mode 100644 index ed07bb4..0000000 --- a/src/cobalt/script/javascriptcore/numeric_conversion_test.cc +++ /dev/null
@@ -1,272 +0,0 @@ -/* - * Copyright 2015 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 <limits> - -#include "cobalt/base/polymorphic_downcast.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/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" -#include "third_party/WebKit/Source/WTF/wtf/text/WTFString.h" - -using testing::_; - -namespace cobalt { -namespace script { -namespace javascriptcore { - -namespace { - -template <int kNumber> -JSC::EncodedJSValue JSC_HOST_CALL returnNumberFunction(JSC::ExecState* exec) { - return JSC::JSValue::encode(JSC::jsNumber(kNumber)); -} - -template <typename T> -class NumericConversionTest : public ::testing::Test { - public: - NumericConversionTest() - : engine_(JavaScriptEngine::CreateEngine()), - global_environment_(engine_->CreateGlobalEnvironment()), - jsc_global_object_(NULL), - exec_state_(NULL) { - global_environment_->CreateGlobalObject(); - jsc_global_object_ = base::polymorphic_downcast<JSCGlobalEnvironment*>( - global_environment_.get()) - ->global_object(); - exec_state_ = jsc_global_object_->globalExec(); - } - - void AddFunction(JSC::JSObject* object, const char* name, - JSC::NativeFunction function) { - int num_arguments = 0; - JSC::Identifier identifier(jsc_global_object_->globalExec(), name); - object->putDirect(jsc_global_object_->globalData(), identifier, - JSC::JSFunction::create(jsc_global_object_->globalExec(), - jsc_global_object_, num_arguments, - identifier.string(), function)); - } - - const scoped_ptr<JavaScriptEngine> engine_; - const scoped_refptr<GlobalEnvironment> global_environment_; - JSCGlobalObject* jsc_global_object_; - JSC::ExecState* exec_state_; - testing::MockExceptionState exception_state_; -}; - -template <typename T> -class IntegerConversionTest : public NumericConversionTest<T> {}; - -template <typename T> -class FloatingPointConversionTest : public NumericConversionTest<T> {}; - -typedef ::testing::Types<int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, - double> NumericTypes; -typedef ::testing::Types<int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t> - IntegerTypes; -typedef ::testing::Types<double> FloatingPointTypes; -TYPED_TEST_CASE(NumericConversionTest, NumericTypes); -TYPED_TEST_CASE(IntegerConversionTest, IntegerTypes); -TYPED_TEST_CASE(FloatingPointConversionTest, FloatingPointTypes); - -template <class T> -T JSValueToNumber(JSC::ExecState* exec_state, JSC::JSValue js_value, - int conversion_flags, ExceptionState* exception_state) { - T value; - FromJSValue(exec_state, js_value, conversion_flags, exception_state, &value); - return value; -} - -} // namespace - -// Conversion between a JavaScript value and an IDL integer type is described -// here: -// https://www.w3.org/TR/WebIDL/#es-byte -// https://www.w3.org/TR/WebIDL/#es-octet -// https://www.w3.org/TR/WebIDL/#es-short -// https://www.w3.org/TR/WebIDL/#es-unsigned-short -// https://www.w3.org/TR/WebIDL/#es-long -// https://www.w3.org/TR/WebIDL/#es-unsigned-long -// https://www.w3.org/TR/WebIDL/#es-double -// The first step in each of these algorithms is the ToNumber operation: -// http://es5.github.io/#x9.3 -// ToNumber describes how various non-numeric types should convert to a -// number. - -// ToNumber: http://es5.github.io/#x9.3 -TYPED_TEST(NumericConversionTest, BooleanConversion) { - EXPECT_EQ(1, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsBoolean(true), kNoConversionFlags, - &this->exception_state_)); - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsBoolean(false), kNoConversionFlags, - &this->exception_state_)); -} - -// ToNumber applied to the String Type: http://es5.github.io/#x9.3.1 -TYPED_TEST(NumericConversionTest, StringConversion) { - JSC::ExecState* exec = this->jsc_global_object_->globalExec(); - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsString(this->exec_state_, ""), - kNoConversionFlags, &this->exception_state_)); - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsString(this->exec_state_, " "), - kNoConversionFlags, &this->exception_state_)); - - // Integer types convert NaN to 0, and float types throw a TypeError. - if (std::numeric_limits<TypeParam>::is_integer) { - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, - JSC::jsString(this->exec_state_, "not_a_number"), - kNoConversionFlags, &this->exception_state_)); - } - - EXPECT_EQ(32, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsString(this->exec_state_, "32"), - kNoConversionFlags, &this->exception_state_)); - EXPECT_EQ(32, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsString(this->exec_state_, "0x20"), - kNoConversionFlags, &this->exception_state_)); - - if (!std::numeric_limits<TypeParam>::is_integer) { - EXPECT_EQ(54.34, - JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsString(this->exec_state_, "54.34"), - kNoConversionFlags, &this->exception_state_)); - } -} - -// Described in the integer type conversion algorithms: -// Set x to sign(x)*floor(abs(x)) -// Also in ToUint16, ToInt32, and ToUInt64: -// 3. Let posInt be sign(number) * floor(abs(number)) -TYPED_TEST(IntegerConversionTest, FloatingPointToIntegerConversion) { - EXPECT_EQ(5, JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNumber(5.1), - kNoConversionFlags, - &this->exception_state_)); - if (std::numeric_limits<TypeParam>::is_signed) { - EXPECT_EQ(-5, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsNumber(-5.1), - kNoConversionFlags, &this->exception_state_)); - } -} - -// http://es5.github.io/#x9.3 -TYPED_TEST(IntegerConversionTest, OtherConversions) { - EXPECT_EQ(0, JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNull(), - kNoConversionFlags, - &this->exception_state_)); - - const double kInfinity = std::numeric_limits<double>::infinity(); - const double kNegativeInfinity = -std::numeric_limits<double>::infinity(); - EXPECT_EQ(0, JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsUndefined(), - kNoConversionFlags, - &this->exception_state_)); - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsNumber(kInfinity), - kNoConversionFlags, &this->exception_state_)); - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsNumber(kNegativeInfinity), - kNoConversionFlags, &this->exception_state_)); - EXPECT_EQ(0, JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNaN(), - kNoConversionFlags, - &this->exception_state_)); -} - -// http://es5.github.io/#x9.3 -TYPED_TEST(FloatingPointConversionTest, OtherConversions) { - EXPECT_EQ(0, JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNull(), - kNoConversionFlags, - &this->exception_state_)); - - // Check that unrestricted types convert back as expected - const double kInfinity = std::numeric_limits<double>::infinity(); - const double kNegativeInfinity = -std::numeric_limits<double>::infinity(); - - // Unrestricted non-finite floating point conversions - EXPECT_EQ(kInfinity, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsNumber(kInfinity), - kNoConversionFlags, &this->exception_state_)); - EXPECT_EQ(kNegativeInfinity, - JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsNumber(kNegativeInfinity), - kNoConversionFlags, &this->exception_state_)); - EXPECT_TRUE(isnan(JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNaN(), - kNoConversionFlags, - &this->exception_state_))); - - // Restricted non-finite floating point conversions. These should throw a - // TypeError. - EXPECT_CALL(this->exception_state_, SetSimpleExceptionVA(kNotFinite, _)) - .Times(3); - JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNumber(kInfinity), - kConversionFlagRestricted, - &this->exception_state_); - JSValueToNumber<TypeParam>( - this->exec_state_, JSC::jsNumber(kNegativeInfinity), - kConversionFlagRestricted, &this->exception_state_); - JSValueToNumber<TypeParam>(this->exec_state_, JSC::jsNaN(), - kConversionFlagRestricted, - &this->exception_state_); -} - -// ToNumber (http://es5.github.io/#x9.3) calls the ToPrimitive operation: -// http://es5.github.io/#x9.1 -// ToPrimitive calls the [[DefaultValue]] method of the object: -// http://es5.github.io/#x8.12.8 -TYPED_TEST(NumericConversionTest, ObjectConversion) { - JSC::JSLockHolder lock(this->jsc_global_object_->globalData()); - JSC::Structure* structure = - JSC::createEmptyObjectStructure(this->jsc_global_object_->globalData(), - this->jsc_global_object_, JSC::jsNull()); - { - JSC::JSObject* object = - JSC::constructEmptyObject(this->exec_state_, structure); - this->AddFunction(object, "valueOf", &(returnNumberFunction<5>)); - EXPECT_EQ( - 5, JSValueToNumber<TypeParam>(this->jsc_global_object_->globalExec(), - JSC::JSValue(object), kNoConversionFlags, - &this->exception_state_)); - } - { - JSC::JSObject* object = - JSC::constructEmptyObject(this->exec_state_, structure); - // The conversion algorithm uses the value of toString() if it is - // a primitive value, which is not necessarily a string. - this->AddFunction(object, "toString", &(returnNumberFunction<5>)); - EXPECT_EQ(5, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::JSValue(object), - kNoConversionFlags, &this->exception_state_)); - } - { - JSC::JSObject* object = - JSC::constructEmptyObject(this->exec_state_, structure); - EXPECT_EQ(0, JSValueToNumber<TypeParam>( - this->exec_state_, JSC::JSValue(object), - kNoConversionFlags, &this->exception_state_)); - } -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/prototype_base.h b/src/cobalt/script/javascriptcore/prototype_base.h deleted file mode 100644 index 592b8ce..0000000 --- a/src/cobalt/script/javascriptcore/prototype_base.h +++ /dev/null
@@ -1,38 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_PROTOTYPE_BASE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_PROTOTYPE_BASE_H_ - -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSGlobalObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// All JavaScriptCore interface object classes will inherit from this. -class PrototypeBase : public JSC::JSNonFinalObject { - // This class doesn't have any implementation, and is just used as a common - // base class. - protected: - PrototypeBase(JSC::JSGlobalObject* global_object, JSC::Structure* structure) - : JSC::JSNonFinalObject(global_object->globalData(), structure) {} -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_PROTOTYPE_BASE_H_
diff --git a/src/cobalt/script/javascriptcore/script_object_registry.cc b/src/cobalt/script/javascriptcore/script_object_registry.cc deleted file mode 100644 index 2d3b09f..0000000 --- a/src/cobalt/script/javascriptcore/script_object_registry.cc +++ /dev/null
@@ -1,79 +0,0 @@ -/* - * Copyright 2015 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/javascriptcore/script_object_registry.h" - -#include <utility> - -#include "base/stl_util.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -void ScriptObjectRegistry::RegisterObjectOwner(const Wrappable* owner, - JSC::JSObject* js_object) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(owner); - DCHECK(js_object); - owned_object_multimap_.insert( - std::make_pair(owner, new JSC::Weak<JSC::JSObject>(js_object))); -} - -void ScriptObjectRegistry::DeregisterObjectOwner(const Wrappable* owner, - JSC::JSObject* js_object) { - DCHECK(thread_checker_.CalledOnValidThread()); - std::pair<OwnedObjectMultiMap::iterator, OwnedObjectMultiMap::iterator> - pair_range; - pair_range = owned_object_multimap_.equal_range(owner); - for (OwnedObjectMultiMap::iterator it = pair_range.first; - it != pair_range.second; ++it) { - if (it->second->get() == js_object) { - // There may be multiple mappings between a specific owner and - // js_object. Only remove the first mapping. - delete it->second; - owned_object_multimap_.erase(it); - return; - } - } -} - -void ScriptObjectRegistry::VisitOwnedObjects(Wrappable* owner, - JSC::SlotVisitor* visitor) { - DCHECK(thread_checker_.CalledOnValidThread()); - std::pair<OwnedObjectMultiMap::iterator, OwnedObjectMultiMap::iterator> - pair_range; - pair_range = owned_object_multimap_.equal_range(owner); - for (OwnedObjectMultiMap::iterator it = pair_range.first; - it != pair_range.second; ++it) { - visitor->appendUnbarrieredWeak(it->second); - } -} - -void ScriptObjectRegistry::ClearEntries() { - STLDeleteValues(&owned_object_multimap_); -} - -ScriptObjectRegistry::~ScriptObjectRegistry() { - // Since the ScriptObjectRegistry is destroyed after JSGlobalData, we can't - // free any remaining JSC::Weak objects in here since they will try to access - // structures that have already been destroyed. - DCHECK_EQ(owned_object_multimap_.size(), 0); -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/script_object_registry.h b/src/cobalt/script/javascriptcore/script_object_registry.h deleted file mode 100644 index e503581..0000000 --- a/src/cobalt/script/javascriptcore/script_object_registry.h +++ /dev/null
@@ -1,63 +0,0 @@ -/* - * Copyright 2015 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_JAVASCRIPTCORE_SCRIPT_OBJECT_REGISTRY_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_SCRIPT_OBJECT_REGISTRY_H_ - -#include "base/hash_tables.h" -#include "base/threading/thread_checker.h" -#include "cobalt/script/wrappable.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// ScriptObjectRegistry maintains the mapping between Wrappable -// objects and the JSObjects that they reference. -class ScriptObjectRegistry { - public: - // Register an ownership relationship between |owner| and |js_object|. - // After registering this relationship, VisitOwnedObjects() can be called - // to visit all objects registered to the owner. DeregisterObjectOwner - // must be called before |owner| is destroyed. - void RegisterObjectOwner(const Wrappable* owner, JSC::JSObject* js_object); - - // Deregister the mapping of all objects owned by |owner|. js_object may - // be getting garbage collected so should not be referenced. - void DeregisterObjectOwner(const Wrappable* owner, JSC::JSObject* js_object); - - // Visit objects that are owned by the specified JSObject. - void VisitOwnedObjects(Wrappable* owner, JSC::SlotVisitor* visitor); - - // Clear all entries and free allocated memory. This should be called before - // the JSGlobalData is destroyed. - void ClearEntries(); - - ~ScriptObjectRegistry(); - - private: - typedef base::hash_multimap<const Wrappable*, JSC::Weak<JSC::JSObject>*> - OwnedObjectMultiMap; - base::ThreadChecker thread_checker_; - OwnedObjectMultiMap owned_object_multimap_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_SCRIPT_OBJECT_REGISTRY_H_
diff --git a/src/cobalt/script/javascriptcore/thread_local_hash_table.cc b/src/cobalt/script/javascriptcore/thread_local_hash_table.cc deleted file mode 100644 index ecd089f..0000000 --- a/src/cobalt/script/javascriptcore/thread_local_hash_table.cc +++ /dev/null
@@ -1,72 +0,0 @@ -/* - * 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/javascriptcore/thread_local_hash_table.h" - -#include <map> - -#include "base/logging.h" -#include "base/memory/singleton.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -namespace { -typedef std::map<const JSC::ClassInfo*, JSC::HashTable> HashTableMap; -} - -// static -ThreadLocalHashTable* ThreadLocalHashTable::GetInstance() { - return Singleton<ThreadLocalHashTable>::get(); -} - -ThreadLocalHashTable::ThreadLocalHashTable() : slot_(SlotDestructor) {} - -ThreadLocalHashTable::~ThreadLocalHashTable() { - // If there is any data stored in our slot on this thread, destroy it now - // before freeing the slot itself, otherwise that data will be leaked. - SlotDestructor(slot_.Get()); - slot_.Free(); -} - -JSC::HashTable* ThreadLocalHashTable::GetHashTable( - const JSC::ClassInfo* class_info, const JSC::HashTable& prototype) { - if (!slot_.Get()) { - slot_.Set(new HashTableMap); - } - DCHECK(slot_.Get()); - HashTableMap* hash_table_map = static_cast<HashTableMap*>(slot_.Get()); - if (hash_table_map->find(class_info) == hash_table_map->end()) { - (*hash_table_map)[class_info] = prototype; - } - return &(*hash_table_map)[class_info]; -} - -// static -void ThreadLocalHashTable::SlotDestructor(void* value) { - HashTableMap* hash_table_map = static_cast<HashTableMap*>(value); - if (hash_table_map) { - for (HashTableMap::iterator it = hash_table_map->begin(); - it != hash_table_map->end(); ++it) { - it->second.deleteTable(); - } - delete hash_table_map; - } -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/thread_local_hash_table.h b/src/cobalt/script/javascriptcore/thread_local_hash_table.h deleted file mode 100644 index 2801d77..0000000 --- a/src/cobalt/script/javascriptcore/thread_local_hash_table.h +++ /dev/null
@@ -1,51 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_THREAD_LOCAL_HASH_TABLE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_THREAD_LOCAL_HASH_TABLE_H_ - -#include "base/memory/singleton.h" -#include "base/threading/thread_local_storage.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/Lookup.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class ThreadLocalHashTable { - public: - static ThreadLocalHashTable* GetInstance(); - - JSC::HashTable* GetHashTable(const JSC::ClassInfo* class_info, - const JSC::HashTable& prototype); - - private: - ThreadLocalHashTable(); - ~ThreadLocalHashTable(); - static void SlotDestructor(void* value); - - base::ThreadLocalStorage::Slot slot_; - - friend struct DefaultSingletonTraits<ThreadLocalHashTable>; - DISALLOW_COPY_AND_ASSIGN(ThreadLocalHashTable); -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_THREAD_LOCAL_HASH_TABLE_H_
diff --git a/src/cobalt/script/javascriptcore/type_traits.h b/src/cobalt/script/javascriptcore/type_traits.h deleted file mode 100644 index f7bba62..0000000 --- a/src/cobalt/script/javascriptcore/type_traits.h +++ /dev/null
@@ -1,61 +0,0 @@ -/* - * 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_JAVASCRIPTCORE_TYPE_TRAITS_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_TYPE_TRAITS_H_ - -#include "cobalt/script/callback_interface_traits.h" -#include "cobalt/script/javascriptcore/jsc_callback_function_holder.h" -#include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h" -#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h" -#include "cobalt/script/opaque_handle.h" -#include "cobalt/script/script_object.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -template <typename T> -struct TypeTraits { - // The type to convert into from a JS Value in the bindings implementation. - typedef T ConversionType; - // Type type returned from a Cobalt implementation of a bound function. - typedef T ReturnType; -}; - -template <> -struct TypeTraits<OpaqueHandle> { - typedef JSCObjectHandleHolder ConversionType; - typedef const ScriptObject<OpaqueHandle>* ReturnType; -}; - -template <typename Sig> -struct TypeTraits<CallbackFunction<Sig> > { - typedef JSCCallbackFunctionHolder<CallbackFunction<Sig> > ConversionType; - typedef const ScriptObject<CallbackFunction<Sig> >* ReturnType; -}; - -template <typename CallbackInterface> -struct TypeTraits<CallbackInterfaceTraits<CallbackInterface> > { - typedef JSCCallbackInterfaceHolder<CallbackInterface> ConversionType; - typedef const ScriptObject<CallbackInterface>* ReturnType; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_TYPE_TRAITS_H_
diff --git a/src/cobalt/script/javascriptcore/union_type_conversion_forward.h b/src/cobalt/script/javascriptcore/union_type_conversion_forward.h deleted file mode 100644 index 04f0d97..0000000 --- a/src/cobalt/script/javascriptcore/union_type_conversion_forward.h +++ /dev/null
@@ -1,66 +0,0 @@ -// This file was GENERATED by command: -// pump.py union_type_conversion_forward.h.pump -// DO NOT EDIT BY HAND!!! - - -/* - * Copyright 2015 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_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_FORWARD_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_FORWARD_H_ - -#include "cobalt/script/javascriptcore/jsc_exception_state.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/union_type.h" - -// Forward declaration for ToJSValue and FromJSValue for IDL union types. - -namespace cobalt { -namespace script { -namespace javascriptcore { - -template <typename T1, typename T2> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType2<T1, T2>& in_union); - -template <typename T1, typename T2> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType2<T1, T2>* out_union); - -template <typename T1, typename T2, typename T3> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType3<T1, T2, T3>& in_union); - -template <typename T1, typename T2, typename T3> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType3<T1, T2, T3>* out_union); - -template <typename T1, typename T2, typename T3, typename T4> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType4<T1, T2, T3, T4>& in_union); - -template <typename T1, typename T2, typename T3, typename T4> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType4<T1, T2, T3, T4>* out_union); - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_FORWARD_H_
diff --git a/src/cobalt/script/javascriptcore/union_type_conversion_forward.h.pump b/src/cobalt/script/javascriptcore/union_type_conversion_forward.h.pump deleted file mode 100644 index d6268cd..0000000 --- a/src/cobalt/script/javascriptcore/union_type_conversion_forward.h.pump +++ /dev/null
@@ -1,58 +0,0 @@ -$$ This is a pump file for generating file templates. Pump is a python -$$ script that is part of the Google Test suite of utilities. Description -$$ can be found here: -$$ -$$ http://code.google.com/p/googletest/wiki/PumpManual -$$ - -$$ Maximum number of different member types in a union. -$var MAX_MEMBERS = 4 - -/* - * Copyright 2015 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 SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_FORWARD_H_ -#define SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_FORWARD_H_ - -#include "cobalt/script/javascriptcore/jsc_exception_state.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/union_type.h" - -// Forward declaration for ToJSValue and FromJSValue for IDL union types. - -namespace cobalt { -namespace script { -namespace javascriptcore { - -$range NUM_MEMBERS 2..MAX_MEMBERS -$for NUM_MEMBERS [[ -$range TYPE 1..NUM_MEMBERS - -template <$for TYPE , [[typename T$(TYPE)]]> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, const script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>& in_union); - -template <$for TYPE , [[typename T$(TYPE)]]> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>* out_union); - -]] $$ for NUM_MEMBERS - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_FORWARD_H_
diff --git a/src/cobalt/script/javascriptcore/union_type_conversion_impl.h b/src/cobalt/script/javascriptcore/union_type_conversion_impl.h deleted file mode 100644 index 9122056..0000000 --- a/src/cobalt/script/javascriptcore/union_type_conversion_impl.h +++ /dev/null
@@ -1,625 +0,0 @@ -// This file was GENERATED by command: -// pump.py union_type_conversion_impl.h.pump -// DO NOT EDIT BY HAND!!! - -/* - * Copyright 2015 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_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_IMPL_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_IMPL_H_ - -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/union_type.h" - -// Conversion to/from JSC::JSValue for IDL union types. - -namespace cobalt { -namespace script { -namespace javascriptcore { - -template <typename T1, typename T2> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType2<T1, T2>& in_union) { - if (in_union.template IsType<T1>()) { - return ToJSValue(global_object, in_union.template AsType<T1>()); - } - if (in_union.template IsType<T2>()) { - return ToJSValue(global_object, in_union.template AsType<T2>()); - } - NOTREACHED(); - return JSC::jsUndefined(); -} - -template <typename T1, typename T2> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType2<T1, T2>* out_union) { - DCHECK_EQ(0, conversion_flags); - // JS -> IDL type conversion procedure described here: - // http://heycam.github.io/webidl/#es-union - - // 1. If the union type includes a nullable type and V is null or undefined, - // then return the IDL value null. - if (jsvalue.isNull() || jsvalue.isUndefined()) { - // If the type was nullable or undefined, we should have caught that as a - // part of the base::optional<T> conversion. - NOTREACHED(); - return; - } - // Typedef for readability. - typedef ::cobalt::script::internal::UnionTypeTraits<T1> UnionTypeTraitsT1; - typedef ::cobalt::script::internal::UnionTypeTraits<T2> UnionTypeTraitsT2; - - // Forward declare all potential types - T1 t1; - T2 t2; - - // 3.1 If types includes an interface type that V implements, then return the - // IDL value that is a reference to the object V. - // 3.2 If types includes object, then return the IDL value that is a reference - // to the object V. - // - // The specification doesn't dictate what should happen if V implements more - // than one of the interfaces. For example, if V implements interface B and - // interface B inherits from interface A, what happens if both A and B are - // union members? Blink doesn't seem to do anything special for this case. - // Just choose the first interface in the flattened members that matches. - if (jsvalue.isObject()) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - const WrapperFactory* wrapper_factory = global_object->wrapper_factory(); - JSC::JSCell* js_cell = jsvalue.asCell(); - - if (UnionTypeTraitsT1::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT1::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType2<T1, T2>(t1); - return; - } - if (UnionTypeTraitsT2::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT2::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType2<T1, T2>(t2); - return; - } - } - - // TODO: Support Date, RegExp, DOMException, Error, ArrayBuffer, DataView, - // TypedArrayName, callback functions, dictionary, array type. - // And sequences if necessary. - - // 14. If V is a Boolean value, then: - // 1. If types includes a boolean, then return the result of converting V - // to boolean. - if (jsvalue.isBoolean()) { - if (UnionTypeTraitsT1::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType2<T1, T2>(t1); - return; - } - - if (UnionTypeTraitsT2::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType2<T1, T2>(t2); - return; - } - } - - // 15. If V is a Number value, then: - // 1. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (jsvalue.isNumber()) { - if (UnionTypeTraitsT1::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType2<T1, T2>(t1); - return; - } - - if (UnionTypeTraitsT2::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType2<T1, T2>(t2); - return; - } - } - - // 16. If types includes a string type, then return the result of converting V - // to that type. - if (jsvalue.isString()) { - if (UnionTypeTraitsT1::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType2<T1, T2>(t1); - return; - } - - if (UnionTypeTraitsT2::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType2<T1, T2>(t2); - return; - } - } - - // 17. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (UnionTypeTraitsT1::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType2<T1, T2>(t1); - return; - } - if (UnionTypeTraitsT2::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType2<T1, T2>(t2); - return; - } - - // 18. If types includes a boolean, then return the result of converting V to - // boolean. - if (UnionTypeTraitsT1::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType2<T1, T2>(t1); - return; - } - if (UnionTypeTraitsT2::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType2<T1, T2>(t2); - return; - } - - // 19. Throw a TypeError. - exception_state->SetSimpleException(kNotUnionType); -} - -template <typename T1, typename T2, typename T3> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType3<T1, T2, T3>& in_union) { - if (in_union.template IsType<T1>()) { - return ToJSValue(global_object, in_union.template AsType<T1>()); - } - if (in_union.template IsType<T2>()) { - return ToJSValue(global_object, in_union.template AsType<T2>()); - } - if (in_union.template IsType<T3>()) { - return ToJSValue(global_object, in_union.template AsType<T3>()); - } - NOTREACHED(); - return JSC::jsUndefined(); -} - -template <typename T1, typename T2, typename T3> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType3<T1, T2, T3>* out_union) { - DCHECK_EQ(0, conversion_flags); - // JS -> IDL type conversion procedure described here: - // http://heycam.github.io/webidl/#es-union - - // 1. If the union type includes a nullable type and V is null or undefined, - // then return the IDL value null. - if (jsvalue.isNull() || jsvalue.isUndefined()) { - // If the type was nullable or undefined, we should have caught that as a - // part of the base::optional<T> conversion. - NOTREACHED(); - return; - } - // Typedef for readability. - typedef ::cobalt::script::internal::UnionTypeTraits<T1> UnionTypeTraitsT1; - typedef ::cobalt::script::internal::UnionTypeTraits<T2> UnionTypeTraitsT2; - typedef ::cobalt::script::internal::UnionTypeTraits<T3> UnionTypeTraitsT3; - - // Forward declare all potential types - T1 t1; - T2 t2; - T3 t3; - - // 3.1 If types includes an interface type that V implements, then return the - // IDL value that is a reference to the object V. - // 3.2 If types includes object, then return the IDL value that is a reference - // to the object V. - // - // The specification doesn't dictate what should happen if V implements more - // than one of the interfaces. For example, if V implements interface B and - // interface B inherits from interface A, what happens if both A and B are - // union members? Blink doesn't seem to do anything special for this case. - // Just choose the first interface in the flattened members that matches. - if (jsvalue.isObject()) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - const WrapperFactory* wrapper_factory = global_object->wrapper_factory(); - JSC::JSCell* js_cell = jsvalue.asCell(); - - if (UnionTypeTraitsT1::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT1::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType3<T1, T2, T3>(t1); - return; - } - if (UnionTypeTraitsT2::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT2::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType3<T1, T2, T3>(t2); - return; - } - if (UnionTypeTraitsT3::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT3::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType3<T1, T2, T3>(t3); - return; - } - } - - // TODO: Support Date, RegExp, DOMException, Error, ArrayBuffer, DataView, - // TypedArrayName, callback functions, dictionary, array type. - // And sequences if necessary. - - // 14. If V is a Boolean value, then: - // 1. If types includes a boolean, then return the result of converting V - // to boolean. - if (jsvalue.isBoolean()) { - if (UnionTypeTraitsT1::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType3<T1, T2, T3>(t1); - return; - } - - if (UnionTypeTraitsT2::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType3<T1, T2, T3>(t2); - return; - } - - if (UnionTypeTraitsT3::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType3<T1, T2, T3>(t3); - return; - } - } - - // 15. If V is a Number value, then: - // 1. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (jsvalue.isNumber()) { - if (UnionTypeTraitsT1::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType3<T1, T2, T3>(t1); - return; - } - - if (UnionTypeTraitsT2::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType3<T1, T2, T3>(t2); - return; - } - - if (UnionTypeTraitsT3::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType3<T1, T2, T3>(t3); - return; - } - } - - // 16. If types includes a string type, then return the result of converting V - // to that type. - if (jsvalue.isString()) { - if (UnionTypeTraitsT1::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType3<T1, T2, T3>(t1); - return; - } - - if (UnionTypeTraitsT2::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType3<T1, T2, T3>(t2); - return; - } - - if (UnionTypeTraitsT3::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType3<T1, T2, T3>(t3); - return; - } - } - - // 17. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (UnionTypeTraitsT1::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType3<T1, T2, T3>(t1); - return; - } - if (UnionTypeTraitsT2::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType3<T1, T2, T3>(t2); - return; - } - if (UnionTypeTraitsT3::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType3<T1, T2, T3>(t3); - return; - } - - // 18. If types includes a boolean, then return the result of converting V to - // boolean. - if (UnionTypeTraitsT1::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType3<T1, T2, T3>(t1); - return; - } - if (UnionTypeTraitsT2::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType3<T1, T2, T3>(t2); - return; - } - if (UnionTypeTraitsT3::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType3<T1, T2, T3>(t3); - return; - } - - // 19. Throw a TypeError. - exception_state->SetSimpleException(kNotUnionType); -} - -template <typename T1, typename T2, typename T3, typename T4> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType4<T1, T2, T3, T4>& in_union) { - if (in_union.template IsType<T1>()) { - return ToJSValue(global_object, in_union.template AsType<T1>()); - } - if (in_union.template IsType<T2>()) { - return ToJSValue(global_object, in_union.template AsType<T2>()); - } - if (in_union.template IsType<T3>()) { - return ToJSValue(global_object, in_union.template AsType<T3>()); - } - if (in_union.template IsType<T4>()) { - return ToJSValue(global_object, in_union.template AsType<T4>()); - } - NOTREACHED(); - return JSC::jsUndefined(); -} - -template <typename T1, typename T2, typename T3, typename T4> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType4<T1, T2, T3, T4>* out_union) { - DCHECK_EQ(0, conversion_flags); - // JS -> IDL type conversion procedure described here: - // http://heycam.github.io/webidl/#es-union - - // 1. If the union type includes a nullable type and V is null or undefined, - // then return the IDL value null. - if (jsvalue.isNull() || jsvalue.isUndefined()) { - // If the type was nullable or undefined, we should have caught that as a - // part of the base::optional<T> conversion. - NOTREACHED(); - return; - } - // Typedef for readability. - typedef ::cobalt::script::internal::UnionTypeTraits<T1> UnionTypeTraitsT1; - typedef ::cobalt::script::internal::UnionTypeTraits<T2> UnionTypeTraitsT2; - typedef ::cobalt::script::internal::UnionTypeTraits<T3> UnionTypeTraitsT3; - typedef ::cobalt::script::internal::UnionTypeTraits<T4> UnionTypeTraitsT4; - - // Forward declare all potential types - T1 t1; - T2 t2; - T3 t3; - T4 t4; - - // 3.1 If types includes an interface type that V implements, then return the - // IDL value that is a reference to the object V. - // 3.2 If types includes object, then return the IDL value that is a reference - // to the object V. - // - // The specification doesn't dictate what should happen if V implements more - // than one of the interfaces. For example, if V implements interface B and - // interface B inherits from interface A, what happens if both A and B are - // union members? Blink doesn't seem to do anything special for this case. - // Just choose the first interface in the flattened members that matches. - if (jsvalue.isObject()) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - const WrapperFactory* wrapper_factory = global_object->wrapper_factory(); - JSC::JSCell* js_cell = jsvalue.asCell(); - - if (UnionTypeTraitsT1::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT1::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType4<T1, T2, T3, T4>(t1); - return; - } - if (UnionTypeTraitsT2::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT2::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType4<T1, T2, T3, T4>(t2); - return; - } - if (UnionTypeTraitsT3::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT3::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType4<T1, T2, T3, T4>(t3); - return; - } - if (UnionTypeTraitsT4::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT4::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t4); - *out_union = script::UnionType4<T1, T2, T3, T4>(t4); - return; - } - } - - // TODO: Support Date, RegExp, DOMException, Error, ArrayBuffer, DataView, - // TypedArrayName, callback functions, dictionary, array type. - // And sequences if necessary. - - // 14. If V is a Boolean value, then: - // 1. If types includes a boolean, then return the result of converting V - // to boolean. - if (jsvalue.isBoolean()) { - if (UnionTypeTraitsT1::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType4<T1, T2, T3, T4>(t1); - return; - } - - if (UnionTypeTraitsT2::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType4<T1, T2, T3, T4>(t2); - return; - } - - if (UnionTypeTraitsT3::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType4<T1, T2, T3, T4>(t3); - return; - } - - if (UnionTypeTraitsT4::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t4); - *out_union = script::UnionType4<T1, T2, T3, T4>(t4); - return; - } - } - - // 15. If V is a Number value, then: - // 1. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (jsvalue.isNumber()) { - if (UnionTypeTraitsT1::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType4<T1, T2, T3, T4>(t1); - return; - } - - if (UnionTypeTraitsT2::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType4<T1, T2, T3, T4>(t2); - return; - } - - if (UnionTypeTraitsT3::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType4<T1, T2, T3, T4>(t3); - return; - } - - if (UnionTypeTraitsT4::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t4); - *out_union = script::UnionType4<T1, T2, T3, T4>(t4); - return; - } - } - - // 16. If types includes a string type, then return the result of converting V - // to that type. - if (jsvalue.isString()) { - if (UnionTypeTraitsT1::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType4<T1, T2, T3, T4>(t1); - return; - } - - if (UnionTypeTraitsT2::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType4<T1, T2, T3, T4>(t2); - return; - } - - if (UnionTypeTraitsT3::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType4<T1, T2, T3, T4>(t3); - return; - } - - if (UnionTypeTraitsT4::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t4); - *out_union = script::UnionType4<T1, T2, T3, T4>(t4); - return; - } - } - - // 17. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (UnionTypeTraitsT1::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType4<T1, T2, T3, T4>(t1); - return; - } - if (UnionTypeTraitsT2::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType4<T1, T2, T3, T4>(t2); - return; - } - if (UnionTypeTraitsT3::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType4<T1, T2, T3, T4>(t3); - return; - } - if (UnionTypeTraitsT4::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t4); - *out_union = script::UnionType4<T1, T2, T3, T4>(t4); - return; - } - - // 18. If types includes a boolean, then return the result of converting V to - // boolean. - if (UnionTypeTraitsT1::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t1); - *out_union = script::UnionType4<T1, T2, T3, T4>(t1); - return; - } - if (UnionTypeTraitsT2::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t2); - *out_union = script::UnionType4<T1, T2, T3, T4>(t2); - return; - } - if (UnionTypeTraitsT3::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t3); - *out_union = script::UnionType4<T1, T2, T3, T4>(t3); - return; - } - if (UnionTypeTraitsT4::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t4); - *out_union = script::UnionType4<T1, T2, T3, T4>(t4); - return; - } - - // 19. Throw a TypeError. - exception_state->SetSimpleException(kNotUnionType); -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_IMPL_H_
diff --git a/src/cobalt/script/javascriptcore/union_type_conversion_impl.h.pump b/src/cobalt/script/javascriptcore/union_type_conversion_impl.h.pump deleted file mode 100644 index 54eae9a..0000000 --- a/src/cobalt/script/javascriptcore/union_type_conversion_impl.h.pump +++ /dev/null
@@ -1,199 +0,0 @@ -$$ This is a pump file for generating file templates. Pump is a python -$$ script that is part of the Google Test suite of utilities. Description -$$ can be found here: -$$ -$$ http://code.google.com/p/googletest/wiki/PumpManual -$$ - -$$ Maximum number of different member types in a union. -$var MAX_MEMBERS = 4 -/* - * Copyright 2015 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_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_IMPL_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_IMPL_H_ - -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/union_type.h" - -// Conversion to/from JSC::JSValue for IDL union types. - -namespace cobalt { -namespace script { -namespace javascriptcore { - -$range NUM_MEMBERS 2..MAX_MEMBERS -$for NUM_MEMBERS [[ - -$range TYPE 1..NUM_MEMBERS - -template <$for TYPE , [[typename T$(TYPE)]]> -JSC::JSValue ToJSValue(JSCGlobalObject* global_object, - const script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>& in_union) { -$for TYPE [[ - - if (in_union.template IsType<T$(TYPE)>()) { - return ToJSValue(global_object, in_union.template AsType<T$(TYPE)>()); - } -]] - - NOTREACHED(); - return JSC::jsUndefined(); -} - -template <$for TYPE , [[typename T$(TYPE)]]> -void FromJSValue(JSC::ExecState* exec_state, JSC::JSValue jsvalue, - int conversion_flags, ExceptionState* exception_state, - script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>* out_union) { - DCHECK_EQ(0, conversion_flags); - // JS -> IDL type conversion procedure described here: - // http://heycam.github.io/webidl/#es-union - - // 1. If the union type includes a nullable type and V is null or undefined, - // then return the IDL value null. - if (jsvalue.isNull() || jsvalue.isUndefined()) { - // If the type was nullable or undefined, we should have caught that as a - // part of the base::optional<T> conversion. - NOTREACHED(); - return; - } - // Typedef for readability. - -$for TYPE [[ - typedef ::cobalt::script::internal::UnionTypeTraits<T$(TYPE)> UnionTypeTraitsT$(TYPE); - -]] - - // Forward declare all potential types - -$for TYPE [[ - T$(TYPE) t$(TYPE); - -]] - - // 3.1 If types includes an interface type that V implements, then return the - // IDL value that is a reference to the object V. - // 3.2 If types includes object, then return the IDL value that is a reference - // to the object V. - // - // The specification doesn't dictate what should happen if V implements more - // than one of the interfaces. For example, if V implements interface B and - // interface B inherits from interface A, what happens if both A and B are - // union members? Blink doesn't seem to do anything special for this case. - // Just choose the first interface in the flattened members that matches. - if (jsvalue.isObject()) { - JSCGlobalObject* global_object = - JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject()); - const WrapperFactory* wrapper_factory = global_object->wrapper_factory(); - JSC::JSCell* js_cell = jsvalue.asCell(); - - -$for TYPE [[ - if (UnionTypeTraitsT$(TYPE)::is_interface_type && - js_cell->inherits( - wrapper_factory->GetClassInfo( - UnionTypeTraitsT$(TYPE)::GetTypeID()))) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t$(TYPE)); - *out_union = script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>(t$(TYPE)); - return; - } - -]] - } - - // TODO: Support Date, RegExp, DOMException, Error, ArrayBuffer, DataView, - // TypedArrayName, callback functions, dictionary, array type. - // And sequences if necessary. - - // 14. If V is a Boolean value, then: - // 1. If types includes a boolean, then return the result of converting V - // to boolean. - if (jsvalue.isBoolean()) { -$for TYPE [[ - - if (UnionTypeTraitsT$(TYPE)::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t$(TYPE)); - *out_union = script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>(t$(TYPE)); - return; - } - -]] - } - - // 15. If V is a Number value, then: - // 1. If types includes a numeric type, then return the result of converting - // V to that numeric type. - if (jsvalue.isNumber()) { -$for TYPE [[ - - if (UnionTypeTraitsT$(TYPE)::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t$(TYPE)); - *out_union = script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>(t$(TYPE)); - return; - } - -]] - } - - // 16. If types includes a string type, then return the result of converting V - // to that type. - if (jsvalue.isString()) { -$for TYPE [[ - - if (UnionTypeTraitsT$(TYPE)::is_string_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t$(TYPE)); - *out_union = script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>(t$(TYPE)); - return; - } - -]] - } - - // 17. If types includes a numeric type, then return the result of converting - // V to that numeric type. -$for TYPE [[ - - if (UnionTypeTraitsT$(TYPE)::is_numeric_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t$(TYPE)); - *out_union = script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>(t$(TYPE)); - return; - } -]] - - - // 18. If types includes a boolean, then return the result of converting V to - // boolean. -$for TYPE [[ - - if (UnionTypeTraitsT$(TYPE)::is_boolean_type) { - FromJSValue(exec_state, jsvalue, conversion_flags, exception_state, &t$(TYPE)); - *out_union = script::UnionType$(NUM_MEMBERS)<$for TYPE , [[T$(TYPE)]]>(t$(TYPE)); - return; - } -]] - - - // 19. Throw a TypeError. - exception_state->SetSimpleException(kNotUnionType); -} - -]] $$ for NUM_MEMBERS - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_UNION_TYPE_CONVERSION_IMPL_H_
diff --git a/src/cobalt/script/javascriptcore/util/binding_helpers.cc b/src/cobalt/script/javascriptcore/util/binding_helpers.cc deleted file mode 100644 index 872aa1f..0000000 --- a/src/cobalt/script/javascriptcore/util/binding_helpers.cc +++ /dev/null
@@ -1,44 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/util/binding_helpers.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace util { - -bool HasPropertyOnPrototype(JSC::ExecState* exec_state, JSC::JSCell* cell, - JSC::PropertyName property_name) { - if (cell->isObject()) { - JSC::JSValue prototype_value = JSC::asObject(cell)->prototype(); - if (prototype_value.isObject()) { - JSC::JSObject* prototype = JSC::asObject(prototype_value); - if (prototype->hasProperty(exec_state, property_name)) { - return true; - } - } - } - return false; -} - -} // namespace util -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/util/binding_helpers.h b/src/cobalt/script/javascriptcore/util/binding_helpers.h deleted file mode 100644 index 3f51716..0000000 --- a/src/cobalt/script/javascriptcore/util/binding_helpers.h +++ /dev/null
@@ -1,38 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_UTIL_BINDING_HELPERS_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_UTIL_BINDING_HELPERS_H_ - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/CallFrame.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSCell.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/PropertyName.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace util { - -bool HasPropertyOnPrototype(JSC::ExecState* exec_state, JSC::JSCell* cell, - JSC::PropertyName property_name); - -} // namespace util -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_UTIL_BINDING_HELPERS_H_
diff --git a/src/cobalt/script/javascriptcore/util/exception_helpers.cc b/src/cobalt/script/javascriptcore/util/exception_helpers.cc deleted file mode 100644 index 4e44e6c..0000000 --- a/src/cobalt/script/javascriptcore/util/exception_helpers.cc +++ /dev/null
@@ -1,98 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/util/exception_helpers.h" - -#include <algorithm> - -#include "base/logging.h" -#include "base/stringprintf.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/Interpreter.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSDestructibleObject.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSScope.h" -#include "third_party/WebKit/Source/WTF/wtf/text/WTFString.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace util { - -std::string GetExceptionString(JSC::ExecState* exec_state) { - return GetExceptionString(exec_state, exec_state->exception()); -} - -std::string GetExceptionString(JSC::ExecState* exec_state, - JSC::JSValue exception) { - JSC::JSGlobalData* global_data = &exec_state->globalData(); - - WTF::String wtf_exception_string = exception.toWTFString(exec_state); - std::string exception_string = - exception.toWTFString(exec_state).utf8().data(); - exception_string += "\n"; - - JSC::JSObject* exception_object = exception.toObject(exec_state); - JSC::JSValue stack_value = exception_object->getDirect( - *global_data, global_data->propertyNames->stack); - if (!stack_value.isEmpty() && stack_value.isString()) { - exception_string += stack_value.toWTFString(exec_state).utf8().data(); - } else { - int line_number = - exception_object->get(exec_state, JSC::Identifier(exec_state, "line")) - .toInt32(exec_state); - std::string source_url = - exception_object->get(exec_state, - JSC::Identifier(exec_state, "sourceURL")) - .toWTFString(exec_state) - .utf8() - .data(); - exception_string += - base::StringPrintf("%s:%d", source_url.c_str(), line_number); - } - return exception_string; -} - -std::vector<StackFrame> GetStackTrace(JSC::ExecState* exec, int max_frames) { - std::vector<StackFrame> stack_frames; - JSC::JSLockHolder lock(exec); - - WTF::Vector<JSC::StackFrame> stack_trace; - exec->interpreter()->getStackTrace(&exec->globalData(), stack_trace); - if (max_frames == 0) { - max_frames = static_cast<int>(stack_trace.size()); - } else { - max_frames = std::min(max_frames, static_cast<int>(stack_trace.size())); - } - for (int i = 0; i < max_frames; ++i) { - WTF::String function_name = stack_trace[i].friendlyFunctionName(exec); - WTF::String source_url = stack_trace[i].friendlySourceURL(); - uint32 line_number = stack_trace[i].friendlyLineNumber(); - - StackFrame sf; - sf.function_name = function_name.utf8().data(); - if (!source_url.isEmpty()) { - sf.source_url = source_url.utf8().data(); - } - sf.line_number = line_number; - sf.column_number = 0; - stack_frames.push_back(sf); - } - return stack_frames; -} - -} // namespace util -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/util/exception_helpers.h b/src/cobalt/script/javascriptcore/util/exception_helpers.h deleted file mode 100644 index 07918fd..0000000 --- a/src/cobalt/script/javascriptcore/util/exception_helpers.h +++ /dev/null
@@ -1,49 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_UTIL_EXCEPTION_HELPERS_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_UTIL_EXCEPTION_HELPERS_H_ - -#include <string> -#include <vector> - -#include "cobalt/script/stack_frame.h" - -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/interpreter/CallFrame.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSValue.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace util { - -std::string GetExceptionString(JSC::ExecState* exec_state); - -std::string GetExceptionString(JSC::ExecState* exec_state, - JSC::JSValue exception); - -// Retrieve stack frame information. Set max_frames to 0 to get all -// available, or non-0 to limit the number of frames returned. -std::vector<StackFrame> GetStackTrace(JSC::ExecState* exec_state, - int max_frames); - -} // namespace util -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_UTIL_EXCEPTION_HELPERS_H_
diff --git a/src/cobalt/script/javascriptcore/wrapper_base.h b/src/cobalt/script/javascriptcore/wrapper_base.h deleted file mode 100644 index cdcf27b..0000000 --- a/src/cobalt/script/javascriptcore/wrapper_base.h +++ /dev/null
@@ -1,112 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_WRAPPER_BASE_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_WRAPPER_BASE_H_ - -#include "base/callback.h" -#include "base/memory/ref_counted.h" -#include "cobalt/script/javascriptcore/jsc_global_object.h" -#include "cobalt/script/script_exception.h" -#include "cobalt/script/wrappable.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ErrorInstance.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSDestructibleObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -// All JavaScriptCore wrapper classes will inherit from this. This provides a -// common base class for all wrapper objects. It holds a reference-counted -// handle to a Wrappable object, which is the base class of all objects that -// can be referenced from JavaScript. -// The WrappableBase template class must be derived from script::Wrappable. -template <typename JSCBaseClass, typename WrappableBase> -class WrapperBase : public JSCBaseClass { - public: - const scoped_refptr<WrappableBase>& wrappable() { return wrappable_; } - - scoped_refptr<WrappableBase> GetOpaqueRoot() { - if (!get_opaque_root_function_.is_null()) { - return get_opaque_root_function_.Run(wrappable_); - } - return NULL; - } - - static scoped_refptr<WrappableBase>& GetWrappable(JSC::JSObject* js_object) { - ASSERT_GC_OBJECT_INHERITS(js_object, WrapperBase::s_classinfo()); - WrapperBase* wrapper_base = JSC::jsCast<WrapperBase*>(js_object); - return wrapper_base->wrappable_; - } - - protected: - typedef base::Callback<scoped_refptr<WrappableBase>( - const scoped_refptr<WrappableBase>&)> GetOpaqueRootFunction; - - WrapperBase(JSC::JSGlobalData* global_data, JSC::Structure* structure, - ScriptObjectRegistry* script_object_registry, - const scoped_refptr<WrappableBase>& impl) - : JSCBaseClass(*global_data, structure), - wrappable_(impl), - script_object_registry_(script_object_registry) {} - - void set_get_opaque_root_function( - const GetOpaqueRootFunction& get_opaque_root_function) { - DCHECK(get_opaque_root_function_.is_null()); - get_opaque_root_function_ = get_opaque_root_function; - } - - // static override. This function will be called during garbage collection - // to mark any garbage-collected objects that are referencable from this - // object. - static void visitChildren(JSC::JSCell* cell, - JSC::SlotVisitor& visitor) { // NOLINT(runtime/references) - JSCBaseClass::visitChildren(cell, visitor); - WrapperBase* this_object = JSC::jsCast<WrapperBase*>(cell); - ASSERT_GC_OBJECT_INHERITS(this_object, WrapperBase::s_classinfo()); - // In general most wrappers won't have any such owned objects, but - // this shouldn't be too expensive. - this_object->script_object_registry_->VisitOwnedObjects( - this_object->wrappable_.get(), &visitor); - } - - // static override. This will be called when this object is garbage collected. - static void destroy(JSC::JSCell* cell) { - // Note that the WrapperBase destructor is non-virtual. - // JSC's garbage-collected heap seems to not support classes with virtual - // functions, as suggested by the lack of a virtual destructor in JSCell, - // the base class for all GC objects, and the lack of any virtual functions - // in WebKit's bindings implementation. - // Garbage-collected classes with a non-trivial destructor and/or - // member variables that need to be destructed must override destroy() to - // ensure that the class is destructed properly. - static_cast<WrapperBase*>(cell)->~WrapperBase(); - } - - private: - scoped_refptr<WrappableBase> wrappable_; - ScriptObjectRegistry* script_object_registry_; - GetOpaqueRootFunction get_opaque_root_function_; -}; - -// Base for regular interfaces. -typedef WrapperBase<JSC::JSDestructibleObject, Wrappable> InterfaceBase; -// Base for exception interfaces. -typedef WrapperBase<JSC::ErrorInstance, ScriptException> ExceptionBase; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_WRAPPER_BASE_H_
diff --git a/src/cobalt/script/javascriptcore/wrapper_factory.cc b/src/cobalt/script/javascriptcore/wrapper_factory.cc deleted file mode 100644 index 57fa196..0000000 --- a/src/cobalt/script/javascriptcore/wrapper_factory.cc +++ /dev/null
@@ -1,176 +0,0 @@ -/* - * Copyright 2014 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/javascriptcore/wrapper_factory.h" - -#include <utility> - -#include "base/lazy_instance.h" -#include "cobalt/script/javascriptcore/jsc_wrapper_handle.h" -#include "cobalt/script/javascriptcore/wrapper_base.h" -#include "third_party/WebKit/Source/JavaScriptCore/heap/WeakHandleOwner.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { -namespace { - -class CachedHandleOwner : public JSC::WeakHandleOwner { - public: - // Return true if handle can be reached from some root unknown to JSC. - // This can be used to keep a cached wrapper from being garbage collected - // even though there are no strong references to it. - bool isReachableFromOpaqueRoots( - JSC::Handle<JSC::Unknown> handle, - void* context, - JSC::SlotVisitor& visitor) OVERRIDE { // NOLINT(runtime/references) - JSC::JSObject* js_object = JSC::asObject(handle.get().asCell()); - if (js_object->isGlobalObject()) { - NOTREACHED() << "CachedHandleOwner shouldn't refer to a global object"; - return false; - } - - if (js_object->isErrorInstance()) { - return IsReachableFromOpaqueRoots(JSC::jsCast<ExceptionBase*>(js_object), - &visitor); - } else { - return IsReachableFromOpaqueRoots(JSC::jsCast<InterfaceBase*>(js_object), - &visitor); - } - } - - private: - template <class T> - bool IsReachableFromOpaqueRoots(T* wrapper_base, - JSC::SlotVisitor* slot_visitor) { - scoped_refptr<Wrappable> opaque_root = wrapper_base->GetOpaqueRoot(); - - // Check if we might want to keep this cached wrapper alive despite it not - // being referenced anywhere - if (!ShouldKeepWrapperAlive(wrapper_base, opaque_root)) { - return false; - } - - // If this wrapper has an opaque root, check if that root has been marked. - // If the root is not alive, we do not want to keep this wrapper alive. - if (opaque_root && slot_visitor->containsOpaqueRoot(opaque_root.get())) { - return true; - } - - // If this wrapper's wrappable has been marked as an opaque root, keep it - // alive. - if (slot_visitor->containsOpaqueRoot(wrapper_base->wrappable().get())) { - return true; - } - - return false; - } - - template <class T> - bool ShouldKeepWrapperAlive(T* wrapper_base, - const scoped_refptr<Wrappable>& opaque_root) { - if (opaque_root && opaque_root == wrapper_base->wrappable()) { - // This is the root, so keep this wrapper alive. This will in turn keep - // the entire tree alive. - return true; - } - - // If a custom property has been set on the wrapper object, we should keep - // it alive so that the property persists next time the object is - // referenced from JS. - if (wrapper_base->hasCustomProperties()) { - return true; - } - - // Check if the wrapper should be kept alive based on the impl's state. - return wrapper_base->wrappable()->ShouldKeepWrapperAlive(); - } -}; - -base::LazyInstance<CachedHandleOwner> cached_handle_owner = - LAZY_INSTANCE_INITIALIZER; -} // namespace - -void WrapperFactory::RegisterWrappableType( - base::TypeId wrappable_type, const JSC::ClassInfo* class_info, - const CreateWrapperFunction& create_function) { - std::pair<WrappableTypeInfoMap::iterator, bool> pib = - wrappable_type_infos_.insert(std::make_pair( - wrappable_type, WrappableTypeInfo(class_info, create_function))); - DCHECK(pib.second) - << "RegisterWrappableType registered for type more than once."; - wrapper_class_infos_.insert(class_info); -} - -JSC::JSObject* WrapperFactory::GetWrapper( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) const { - if (!wrappable) { - return NULL; - } - - JSC::JSObject* wrapper = - JSCWrapperHandle::GetJSObject(GetCachedWrapper(wrappable.get())); - if (!wrapper) { - if (global_object->global_interface() == wrappable) { - // Wrapper for the global object is a special case. - wrapper = global_object; - } else { - scoped_ptr<Wrappable::WeakWrapperHandle> object_handle = - WrapperFactory::CreateWrapper(global_object, wrappable); - SetCachedWrapper(wrappable.get(), object_handle.Pass()); - wrapper = JSCWrapperHandle::GetJSObject( - GetCachedWrapper(wrappable.get())); - } - } - DCHECK(wrapper); - return wrapper; -} - -bool WrapperFactory::IsWrapper(JSC::JSObject* js_object) const { - WrapperClassInfoSet::const_iterator it = - wrapper_class_infos_.find(js_object->classInfo()); - return it != wrapper_class_infos_.end(); -} - -const JSC::ClassInfo* WrapperFactory::GetClassInfo( - base::TypeId wrappable_type) const { - WrappableTypeInfoMap::const_iterator it = - wrappable_type_infos_.find(wrappable_type); - if (it == wrappable_type_infos_.end()) { - NOTREACHED(); - return NULL; - } - return it->second.class_info; -} - -scoped_ptr<Wrappable::WeakWrapperHandle> WrapperFactory::CreateWrapper( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) const { - WrappableTypeInfoMap::const_iterator it = - wrappable_type_infos_.find(wrappable->GetWrappableType()); - if (it == wrappable_type_infos_.end()) { - NOTREACHED(); - return scoped_ptr<Wrappable::WeakWrapperHandle>(); - } - return make_scoped_ptr<Wrappable::WeakWrapperHandle>( - new JSCWrapperHandle(JSC::PassWeak<JSC::JSObject>( - it->second.create_function.Run(global_object, wrappable), - cached_handle_owner.Pointer()))); -} - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt
diff --git a/src/cobalt/script/javascriptcore/wrapper_factory.h b/src/cobalt/script/javascriptcore/wrapper_factory.h deleted file mode 100644 index dbe2c1f..0000000 --- a/src/cobalt/script/javascriptcore/wrapper_factory.h +++ /dev/null
@@ -1,75 +0,0 @@ -/* - * Copyright 2014 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_JAVASCRIPTCORE_WRAPPER_FACTORY_H_ -#define COBALT_SCRIPT_JAVASCRIPTCORE_WRAPPER_FACTORY_H_ - -#include "base/bind.h" -#include "base/hash_tables.h" -#include "base/memory/ref_counted.h" -#include "cobalt/base/type_id.h" -#include "cobalt/script/wrappable.h" -#include "third_party/WebKit/Source/JavaScriptCore/config.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/ClassInfo.h" -#include "third_party/WebKit/Source/JavaScriptCore/runtime/JSObject.h" - -namespace cobalt { -namespace script { -namespace javascriptcore { - -class JSCGlobalObject; - -class WrapperFactory : public Wrappable::CachedWrapperAccessor { - public: - typedef base::Callback<JSC::JSObject*( - JSCGlobalObject*, const scoped_refptr<Wrappable>&)> CreateWrapperFunction; - void RegisterWrappableType(base::TypeId wrappable_type, - const JSC::ClassInfo* class_info, - const CreateWrapperFunction& create_function); - - // Gets a Wrapper object for this Wrappable. It may create a new Wrapper. - JSC::JSObject* GetWrapper(JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) const; - - // Returns true if this JSObject is a Wrapper object. - bool IsWrapper(JSC::JSObject* js_object) const; - - // Gets the JSC::ClassInfo that corresponds to this Wrappable type. - const JSC::ClassInfo* GetClassInfo(base::TypeId wrappable_type) const; - - private: - scoped_ptr<Wrappable::WeakWrapperHandle> CreateWrapper( - JSCGlobalObject* global_object, - const scoped_refptr<Wrappable>& wrappable) const; - - struct WrappableTypeInfo { - WrappableTypeInfo(const JSC::ClassInfo* info, - const CreateWrapperFunction& function) - : class_info(info), create_function(function) {} - const JSC::ClassInfo* class_info; - CreateWrapperFunction create_function; - }; - typedef base::hash_map<base::TypeId, WrappableTypeInfo> WrappableTypeInfoMap; - typedef base::hash_set<const JSC::ClassInfo*> WrapperClassInfoSet; - - WrappableTypeInfoMap wrappable_type_infos_; - WrapperClassInfoSet wrapper_class_infos_; -}; - -} // namespace javascriptcore -} // namespace script -} // namespace cobalt - -#endif // COBALT_SCRIPT_JAVASCRIPTCORE_WRAPPER_FACTORY_H_
diff --git a/src/cobalt/script/mozjs/mozjs.gyp b/src/cobalt/script/mozjs/mozjs.gyp index 00b5356..7262cdc 100644 --- a/src/cobalt/script/mozjs/mozjs.gyp +++ b/src/cobalt/script/mozjs/mozjs.gyp
@@ -42,6 +42,7 @@ 'dependencies': [ '<(DEPTH)/cobalt/script/script.gyp:script', '<(DEPTH)/third_party/mozjs/mozjs.gyp:mozjs_lib', + 'embed_mozjs_resources_as_header_files', ], 'defines': [ 'MOZJS_GARBAGE_COLLECTION_THRESHOLD_IN_BYTES=<(mozjs_garbage_collection_threshold_in_bytes)', @@ -104,5 +105,41 @@ }, 'includes': [ '../../../starboard/build/deploy.gypi' ], }, + + { + # This target takes specified files and embeds them as header files for + # inclusion into the binary. The script currently requires all resources + # to be embedded to live in the same directory. + 'target_name': 'embed_mozjs_resources_as_header_files', + 'type': 'none', + # Because we generate a header, we must set the hard_dependency flag. + 'hard_dependency': 1, + 'variables': { + 'script_path': '<(DEPTH)/cobalt/build/generate_data_header.py', + 'output_path': '<(SHARED_INTERMEDIATE_DIR)/cobalt/script/mozjs/embedded_resources.h', + }, + 'sources': [ + '<(DEPTH)/third_party/promise-polyfill/promise.min.js', + ], + 'actions': [ + { + 'action_name': 'embed_mozjs_resources_as_header_files', + 'inputs': [ + '<(script_path)', + '<@(_sources)', + ], + 'outputs': [ + '<(output_path)', + ], + 'action': ['python', '<(script_path)', 'MozjsEmbeddedResources', '<(output_path)', '<@(_sources)' ], + 'message': 'Embedding MozJS resources in into header file, "<(output_path)".', + }, + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(SHARED_INTERMEDIATE_DIR)', + ], + }, + }, ], }
diff --git a/src/cobalt/script/mozjs/mozjs_global_environment.cc b/src/cobalt/script/mozjs/mozjs_global_environment.cc index ee1237f..337db82 100644 --- a/src/cobalt/script/mozjs/mozjs_global_environment.cc +++ b/src/cobalt/script/mozjs/mozjs_global_environment.cc
@@ -22,6 +22,7 @@ #include "base/stringprintf.h" #include "cobalt/base/polymorphic_downcast.h" #include "cobalt/script/mozjs/conversion_helpers.h" +#include "cobalt/script/mozjs/embedded_resources.h" #include "cobalt/script/mozjs/mozjs_exception_state.h" #include "cobalt/script/mozjs/mozjs_source_code.h" #include "cobalt/script/mozjs/mozjs_wrapper_handle.h" @@ -193,6 +194,8 @@ context_, ProxyHandler::NewProxy(context_, global_object, NULL, NULL, proxy_handler.Pointer())); global_object_proxy_ = proxy; + + EvaluateAutomatics(); } bool MozjsGlobalEnvironment::EvaluateScript( @@ -350,6 +353,20 @@ DCHECK(success); } +void MozjsGlobalEnvironment::EvaluateAutomatics() { + TRACK_MEMORY_SCOPE("Javascript"); + std::string source( + reinterpret_cast<const char*>(MozjsEmbeddedResources::promise_min_js), + sizeof(MozjsEmbeddedResources::promise_min_js)); + scoped_refptr<SourceCode> source_code = + new MozjsSourceCode(source, base::SourceLocation("promise.min.js", 1, 1)); + std::string result; + bool success = EvaluateScript(source_code, &result); + if (!success) { + DLOG(FATAL) << result; + } +} + InterfaceData* MozjsGlobalEnvironment::GetInterfaceData(intptr_t key) { CachedInterfaceData::iterator it = cached_interface_data_.find(key); if (it != cached_interface_data_.end()) {
diff --git a/src/cobalt/script/mozjs/mozjs_global_environment.h b/src/cobalt/script/mozjs/mozjs_global_environment.h index 8f719e3..ff6e83d 100644 --- a/src/cobalt/script/mozjs/mozjs_global_environment.h +++ b/src/cobalt/script/mozjs/mozjs_global_environment.h
@@ -77,6 +77,9 @@ void Bind(const std::string& identifier, const scoped_refptr<Wrappable>& impl) OVERRIDE; + // Evaluates any automatically included Javascript for the environment. + void EvaluateAutomatics(); + JSContext* context() const { return context_; } JSObject* global_object_proxy() const { return global_object_proxy_; }
diff --git a/src/cobalt/script/sequence.h b/src/cobalt/script/sequence.h index 683f6e0..71fd46b 100644 --- a/src/cobalt/script/sequence.h +++ b/src/cobalt/script/sequence.h
@@ -17,6 +17,7 @@ #ifndef COBALT_SCRIPT_SEQUENCE_H_ #define COBALT_SCRIPT_SEQUENCE_H_ +#include <algorithm> #include <iosfwd> #include <vector> @@ -58,7 +59,9 @@ typedef typename SequenceType::const_reference const_reference; void push_back(const_reference value) { sequence_.push_back(value); } size_type size() const { return sequence_.size(); } + bool empty() const { return sequence_.empty(); } const_reference at(size_type index) const { return sequence_.at(index); } + void swap(Sequence<T>& other) { sequence_.swap(other.sequence_); } private: SequenceType sequence_;
diff --git a/src/cobalt/test/document_loader.h b/src/cobalt/test/document_loader.h index bffc7a8..f905a29 100644 --- a/src/cobalt/test/document_loader.h +++ b/src/cobalt/test/document_loader.h
@@ -65,8 +65,8 @@ NULL /* web_media_player_factory */, &script_runner_, NULL /* media_source_registry */, &resource_provider_, image_cache_.get(), NULL /* reduced_image_cache_capacity_manager */, - NULL /* remote_font_cache */, dom_stat_tracker_.get(), - "" /* language */) {} + NULL /* remote_font_cache */, NULL /* mesh_cache */, + dom_stat_tracker_.get(), "" /* language */) {} void Load(const GURL& url) { // Load the document in a nested message loop. dom::Document::Options options(url);
diff --git a/src/cobalt/test/empty_document.h b/src/cobalt/test/empty_document.h index 9fae1b9..c65159f 100644 --- a/src/cobalt/test/empty_document.h +++ b/src/cobalt/test/empty_document.h
@@ -33,7 +33,7 @@ : css_parser_(css_parser::Parser::Create()), dom_stat_tracker_(new dom::DomStatTracker("EmptyDocument")), html_element_context_(NULL, css_parser_.get(), NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), ""), document_(new dom::Document(&html_element_context_)) {}
diff --git a/src/cobalt/webdriver/dispatcher.cc b/src/cobalt/webdriver/dispatcher.cc index a035bc8..0eb1bce 100644 --- a/src/cobalt/webdriver/dispatcher.cc +++ b/src/cobalt/webdriver/dispatcher.cc
@@ -164,9 +164,8 @@ // Use reverse iterators for the match so we can early-out of a mismatch // more quickly. Most requests start with '/session/:sessionId/', for // example. - typedef std::pair<std::vector<std::string>::const_reverse_iterator, - std::vector<std::string>::const_reverse_iterator> - MismatchResultPair; + typedef std::vector<std::string>::const_reverse_iterator MismatchResult; + typedef std::pair<MismatchResult, MismatchResult> MismatchResultPair; typedef std::pair<CommandMappingLookup::iterator, CommandMappingLookup::iterator> EqualRangeResultPair; @@ -189,7 +188,7 @@ if (result_pair.first == components.rend()) { DCHECK( result_pair.second == - static_cast<const CommandMapping>(it->second).path_components.rend()); + static_cast<MismatchResult>(it->second.path_components.rend())); return &it->second; } }
diff --git a/src/cobalt/webdriver/get_element_text_test.cc b/src/cobalt/webdriver/get_element_text_test.cc index b9a87e9..a42b3a2 100644 --- a/src/cobalt/webdriver/get_element_text_test.cc +++ b/src/cobalt/webdriver/get_element_text_test.cc
@@ -43,7 +43,7 @@ : css_parser_(css_parser::Parser::Create()), dom_stat_tracker_(new dom::DomStatTracker("GetElementTextTest")), html_element_context_(NULL, css_parser_.get(), NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, dom_stat_tracker_.get(), "") {} void SetUp() OVERRIDE {
diff --git a/src/cobalt/webdriver/testing/stub_window.h b/src/cobalt/webdriver/testing/stub_window.h index aa6c912..fdd4cad 100644 --- a/src/cobalt/webdriver/testing/stub_window.h +++ b/src/cobalt/webdriver/testing/stub_window.h
@@ -52,7 +52,7 @@ global_environment_ = engine_->CreateGlobalEnvironment(); window_ = new dom::Window( 1920, 1080, css_parser_.get(), dom_parser_.get(), - fetcher_factory_.get(), NULL, NULL, NULL, NULL, + fetcher_factory_.get(), NULL, NULL, NULL, NULL, NULL, &local_storage_database_, stub_media_module_.get(), stub_media_module_.get(), NULL, NULL, NULL, dom_stat_tracker_.get(), url_, "", "en-US", base::Callback<void(const GURL&)>(),
diff --git a/src/cobalt/webdriver_benchmarks/tests/README.md b/src/cobalt/webdriver_benchmarks/tests/README.md index 1274513..032c41c 100644 --- a/src/cobalt/webdriver_benchmarks/tests/README.md +++ b/src/cobalt/webdriver_benchmarks/tests/README.md
@@ -6,8 +6,8 @@ Each file should contain a set of tests in Python "unittest" format. -All tests in all of the files in this directory will be run on the build system. -Results can be recorded in the build results database. +All tests in all of the files included within "all.py" will be run on the +build system. Results can be recorded in the build results database. To run an individual test, simply execute a script directly (or run all of them via "all.py"). Platform configuration will be inferred from @@ -17,12 +17,16 @@ To make a new test: 1. If appropriate, create a new file borrowing the boilerplate from - an existing simple file, such as "shelf.py" + an existing simple file, such as "browse_horizontal.py". - 2. If this file contains internal names or details, consider adding it + 2. Add the file name to the tests added within "all.py", causing it run + when "all.py" is run. + + 3. If this file contains internal names or details, consider adding it to the "EXCLUDE.FILES" list. - 3. Use the `record_test_result*` methods in `tv_testcase_util` where appropriate. + 4. Use the `record_test_result*` methods in `tv_testcase_util` where + appropriate. - 4. Results must be added to the build results database schema. See + 5. Results must be added to the build results database schema. See the internal "README-Updating-Result-Schema.md" file
diff --git a/src/cobalt/webdriver_benchmarks/tests/all.py b/src/cobalt/webdriver_benchmarks/tests/all.py index 78924c0..3cd8266 100755 --- a/src/cobalt/webdriver_benchmarks/tests/all.py +++ b/src/cobalt/webdriver_benchmarks/tests/all.py
@@ -17,22 +17,29 @@ # pylint: disable=C6204,C6203 import tv_testcase +def _add_test(test_suite, dir_path, test_name): + if os.path.isfile(os.path.join(dir_path, test_name + ".py")): + print("Adding test: {}".format(test_name)) + test_suite.addTest(unittest.TestLoader().loadTestsFromModule( + importlib.import_module("tests." + test_name))) # pylint: disable=unused-argument def load_tests(loader, tests, pattern): """This is a Python unittest "load_tests protocol method.""" - s = unittest.TestSuite() + test_suite = unittest.TestSuite() + dir_path = os.path.dirname(__file__) - for f in os.listdir(os.path.dirname(__file__)): - if not f.endswith(".py"): - continue - if f.startswith("_"): - continue - if f == "all.py": - continue - s.addTest(unittest.TestLoader().loadTestsFromModule( - importlib.import_module("tests." + f[:-3]))) - return s + # "time_to_shelf" must be the first test added. The timings that it + # records require it to run first. + _add_test(test_suite, dir_path, "time_to_shelf") + _add_test(test_suite, dir_path, "browse_horizontal") + _add_test(test_suite, dir_path, "browse_vertical") + _add_test(test_suite, dir_path, "browse_to_guide") + _add_test(test_suite, dir_path, "browse_to_search") + _add_test(test_suite, dir_path, "browse_to_watch") + _add_test(test_suite, dir_path, "csi") + + return test_suite if __name__ == "__main__": tv_testcase.main()
diff --git a/src/cobalt/webdriver_benchmarks/tests/browse_horizontal.py b/src/cobalt/webdriver_benchmarks/tests/browse_horizontal.py index 5751cd2..d55cb5a 100755 --- a/src/cobalt/webdriver_benchmarks/tests/browse_horizontal.py +++ b/src/cobalt/webdriver_benchmarks/tests/browse_horizontal.py
@@ -36,8 +36,6 @@ for _ in xrange(NUM_LOAD_TV_CALLS): self.load_tv() - self.wait_for_processing_complete_after_focused_shelf() - self.send_keys(tv.FOCUSED_TILE, keys.Keys.ARROW_RIGHT) self.wait_for_processing_complete_after_focused_shelf()
diff --git a/src/cobalt/webdriver_benchmarks/tests/browse_to_guide.py b/src/cobalt/webdriver_benchmarks/tests/browse_to_guide.py index 750addd..20e13e5 100755 --- a/src/cobalt/webdriver_benchmarks/tests/browse_to_guide.py +++ b/src/cobalt/webdriver_benchmarks/tests/browse_to_guide.py
@@ -45,7 +45,6 @@ for _ in xrange(NUM_LOAD_TV_CALLS): self.load_tv() - self.assert_displayed(tv.FOCUSED_SHELF) for _ in xrange(NUM_ITERATIONS_PER_LOAD_TV_CALL): browse_to_guide_recorder.on_start_event()
diff --git a/src/cobalt/webdriver_benchmarks/tests/browse_to_search.py b/src/cobalt/webdriver_benchmarks/tests/browse_to_search.py index 8b0e0a8..3c4728e 100755 --- a/src/cobalt/webdriver_benchmarks/tests/browse_to_search.py +++ b/src/cobalt/webdriver_benchmarks/tests/browse_to_search.py
@@ -47,7 +47,6 @@ for _ in xrange(NUM_LOAD_TV_CALLS): self.load_tv() - self.assert_displayed(tv.FOCUSED_SHELF) for _ in xrange(NUM_ITERATIONS_PER_LOAD_TV_CALL): browse_to_search_recorder.on_start_event()
diff --git a/src/cobalt/webdriver_benchmarks/tests/browse_to_watch.py b/src/cobalt/webdriver_benchmarks/tests/browse_to_watch.py index 3733dd8..956d44b 100755 --- a/src/cobalt/webdriver_benchmarks/tests/browse_to_watch.py +++ b/src/cobalt/webdriver_benchmarks/tests/browse_to_watch.py
@@ -48,7 +48,6 @@ for _ in xrange(NUM_LOAD_TV_CALLS): self.load_tv() - self.wait_for_processing_complete_after_focused_shelf() for _ in xrange(NUM_ITERATIONS_PER_LOAD_TV_CALL): self.send_keys(tv.FOCUSED_SHELF, keys.Keys.ARROW_DOWN) @@ -59,6 +58,10 @@ self.wait_for_media_element_playing() browse_to_watch_recorder.on_end_event() + # Wait for the title card hidden before sending the escape. Otherwise, + # two escapes are required to exit the video. + self.wait_for_title_card_hidden() + watch_to_browse_recorder.on_start_event() self.send_keys(tv.FOCUSED_WATCH, keys.Keys.ESCAPE) self.wait_for_processing_complete_after_focused_shelf()
diff --git a/src/cobalt/webdriver_benchmarks/tests/browse_vertical.py b/src/cobalt/webdriver_benchmarks/tests/browse_vertical.py index ac44823..76a3ff8 100755 --- a/src/cobalt/webdriver_benchmarks/tests/browse_vertical.py +++ b/src/cobalt/webdriver_benchmarks/tests/browse_vertical.py
@@ -36,8 +36,6 @@ for _ in xrange(NUM_LOAD_TV_CALLS): self.load_tv() - self.wait_for_processing_complete_after_focused_shelf() - self.send_keys(tv.FOCUSED_SHELF, keys.Keys.ARROW_DOWN) self.wait_for_processing_complete_after_focused_shelf()
diff --git a/src/cobalt/webdriver_benchmarks/tests/time_to_shelf.py b/src/cobalt/webdriver_benchmarks/tests/time_to_shelf.py index 9551d9d..4a1c6fa 100755 --- a/src/cobalt/webdriver_benchmarks/tests/time_to_shelf.py +++ b/src/cobalt/webdriver_benchmarks/tests/time_to_shelf.py
@@ -19,7 +19,6 @@ from __future__ import division from __future__ import print_function -import datetime import os import sys @@ -27,39 +26,43 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) # pylint: disable=C6204,C6203 +import timer import tv_testcase import tv_testcase_util class TimeToShelf(tv_testcase.TvTestCase): + def setUp(self): + # Override TvTestCase's setUp() so that blank startup can first be measured. + pass + def test_simple(self): """This test tries to measure the startup time for the YouTube TV page. Specifically, this test uses the Cobalt CVal Cobalt.Lifetime, which gets updated ~60Hz on a best effort basis and is in microseconds, to determine - "timeToShelfBlankStartupTimeUs" and uses Python's datetime module to - determine "timeToShelfTestTimeShelfDisplayMedianUs". - - Note: t0 is defined after Cobalt starts up, but has not navigated to a page. - If that true startup time metric is desired, perhaps a separate should be - used. + "timeToShelfBlankStartupTimeUs" and uses Timer to determine + "timeToShelfTestTimeShelfDisplayMedianUs". """ - metrics_array = [] + blank_startup_time_microseconds = self.get_cval('Cobalt.Lifetime') + + # Call TvTestCase's setUp() now that the blank startup time has been + # measured. + super(TimeToShelf, self).setUp() + + metrics_array = [] for _ in range(10): - t0 = datetime.datetime.now() - self.load_tv() - self.wait_for_processing_complete_after_focused_shelf() - t1 = datetime.datetime.now() - delta = t1 - t0 - startup_time_microseconds = delta.seconds * 1000000 + delta.microseconds + with timer.Timer('TimeShelfDisplay') as t: + self.load_tv() + startup_time_microseconds = int(t.seconds_elapsed * 1000000) metrics_array.append(startup_time_microseconds) - tv_testcase_util.record_test_result_median( - 'timeToShelfTestTimeShelfDisplayMedianUs', metrics_array) tv_testcase_util.record_test_result('timeToShelfBlankStartupTimeUs', blank_startup_time_microseconds) + tv_testcase_util.record_test_result_median( + 'timeToShelfTestTimeShelfDisplayMedianUs', metrics_array) if __name__ == '__main__':
diff --git a/src/cobalt/webdriver_benchmarks/tv.py b/src/cobalt/webdriver_benchmarks/tv.py index 6bd0a70..5382a8d 100644 --- a/src/cobalt/webdriver_benchmarks/tv.py +++ b/src/cobalt/webdriver_benchmarks/tv.py
@@ -11,6 +11,7 @@ FOCUSED_TILE = '.focused.tile' FOCUSED_WATCH = '.focused.watch' SEARCH_LEGEND = '.search.no-model.legend-item' +TITLE_CARD_HIDDEN = '.title-card.hidden' SEARCH = '#search' WATCH = '#watch'
diff --git a/src/cobalt/webdriver_benchmarks/tv_testcase.py b/src/cobalt/webdriver_benchmarks/tv_testcase.py index 796c860..b3781b4 100644 --- a/src/cobalt/webdriver_benchmarks/tv_testcase.py +++ b/src/cobalt/webdriver_benchmarks/tv_testcase.py
@@ -11,21 +11,10 @@ import time import unittest -# pylint: disable=C6204 -try: - # This code works for Python 2. - import urlparse - from urllib import urlencode -except ImportError: - # This code works for Python 3. - import urllib.parse as urlparse - from urllib.parse import urlencode - # This directory is a package sys.path.insert(0, os.path.abspath(".")) # pylint: disable=C6204,C6203 import c_val_names -import container_util import tv import tv_testcase_runner import tv_testcase_util @@ -38,18 +27,18 @@ ElementNotVisibleException = tv_testcase_util.import_selenium_module( submodule="common.exceptions").ElementNotVisibleException -BASE_URL = "https://www.youtube.com/" -TV_APP_PATH = "/tv" -BASE_PARAMS = {"env_forcedOffAllExperiments": True} +WINDOWDRIVER_CREATED_TIMEOUT_SECONDS = 30 PAGE_LOAD_WAIT_SECONDS = 30 PROCESSING_TIMEOUT_SECONDS = 15 MEDIA_TIMEOUT_SECONDS = 30 -# Today, Cobalt's WebDriver has a race that -# can leave the former page's DOM visible after a navigate. -# As a workaround, sleep for a bit -# b/33275371 +TITLE_CARD_HIDDEN_TIMEOUT_SECONDS = 30 +# Currently, after loading a new URL with cookies enabled, Kabuki randomizes +# the shelf entries when the page finishes loading. Sleep for a bit to allow +# this to occur before starting any additional logic. COBALT_POST_NAVIGATE_SLEEP_SECONDS = 5 +_is_initialized = False + class TvTestCase(unittest.TestCase): """Base class for WebDriver tests. @@ -58,12 +47,18 @@ with an internal class with the same name. """ + class WindowDriverCreatedTimeoutException(BaseException): + """Exception thrown when WindowDriver was not created in time.""" + class ProcessingTimeoutException(BaseException): """Exception thrown when processing did not complete in time.""" class MediaTimeoutException(BaseException): """Exception thrown when media did not complete in time.""" + class TitleCardHiddenTimeoutException(BaseException): + """Exception thrown when title card did not disappear in time.""" + @classmethod def setUpClass(cls): print("Running " + cls.__name__) @@ -72,9 +67,23 @@ def tearDownClass(cls): print("Done " + cls.__name__) + def setUp(self): + global _is_initialized + if not _is_initialized: + # Initialize the tests. This involves loading a URL which applies the + # forcedOffAllExperiments cookies, ensuring that no subsequent loads + # include experiments. Additionally, loading this URL triggers a reload. + query_params = {"env_forcedOffAllExperiments": True} + triggers_reload = True + self.load_tv(None, query_params, triggers_reload) + _is_initialized = True + def get_webdriver(self): return tv_testcase_runner.GetWebDriver() + def get_windowdriver_created(self): + return tv_testcase_runner.GetWindowDriverCreated() + def get_cval(self, cval_name): """Returns the Python object represented by a JSON cval string. @@ -90,32 +99,14 @@ else: return json.loads(json_result) - def goto(self, path, query_params=None): - """Goes to a path off of BASE_URL. - - Args: - path: URL path without the hostname. - query_params: Dictionary of parameter names and values. - Raises: - Underlying WebDriver exceptions - """ - parsed_url = list(urlparse.urlparse(BASE_URL)) - parsed_url[2] = path - query_dict = BASE_PARAMS.copy() - if query_params: - query_dict.update(urlparse.parse_qsl(parsed_url[4])) - container_util.merge_dict(query_dict, query_params) - parsed_url[4] = urlencode(query_dict, doseq=True) - final_url = urlparse.urlunparse(parsed_url) - self.get_webdriver().get(final_url) - time.sleep(COBALT_POST_NAVIGATE_SLEEP_SECONDS) - - def load_tv(self, label=None, additional_query_params=None): + def load_tv(self, label=None, additional_query_params=None, + triggers_reload=False): """Loads the main TV page and waits for it to display. Args: label: A value for the label query parameter. additional_query_params: A dict containing additional query parameters. + triggers_reload: Whether or not the navigation will trigger a reload. Raises: Underlying WebDriver exceptions """ @@ -124,13 +115,19 @@ query_params = {"label": label} if additional_query_params is not None: query_params.update(additional_query_params) - self.goto(TV_APP_PATH, query_params) + self.get_windowdriver_created().clear() + self.get_webdriver().get(tv_testcase_util.get_tv_url(query_params)) + self.wait_for_windowdriver_created() + if triggers_reload: + self.get_windowdriver_created().clear() + self.wait_for_windowdriver_created() + time.sleep(COBALT_POST_NAVIGATE_SLEEP_SECONDS) # Note that the internal tests use "expect_transition" which is # a mechanism that sets a maximum timeout for a "@with_retries" # decorator-driven success retry loop for subsequent webdriver requests. # # We'll skip that sophistication here. - self.poll_until_found(tv.FOCUSED_SHELF) + self.wait_for_processing_complete_after_focused_shelf() def poll_until_found(self, css_selector): """Polls until an element is found. @@ -217,6 +214,12 @@ raise time.sleep(1) + def wait_for_windowdriver_created(self): + """Waits for Cobalt to create a WindowDriver.""" + windowdriver_created = self.get_windowdriver_created() + if not windowdriver_created.wait(WINDOWDRIVER_CREATED_TIMEOUT_SECONDS): + raise TvTestCase.WindowDriverCreatedTimeoutException() + def wait_for_processing_complete_after_focused_shelf(self): """Waits for Cobalt to focus on a shelf and complete pending layouts.""" self.poll_until_found(tv.FOCUSED_SHELF) @@ -272,9 +275,21 @@ c_val_names.event_duration_dom_video_start_delay()) == 0: if time.time() - start_time > MEDIA_TIMEOUT_SECONDS: raise TvTestCase.MediaTimeoutException() - time.sleep(0.1) + def wait_for_title_card_hidden(self): + """Waits for the title to disappear while a video is playing. + + Raises: + TitleCardHiddenTimeoutException: The title card did not become hidden in + the required time. + """ + start_time = time.time() + while not self.find_elements(tv.TITLE_CARD_HIDDEN): + if time.time() - start_time > TITLE_CARD_HIDDEN_TIMEOUT_SECONDS: + raise TvTestCase.TitleCardHiddenTimeoutException() + time.sleep(1) + def main(): logging.basicConfig(level=logging.DEBUG)
diff --git a/src/cobalt/webdriver_benchmarks/tv_testcase_event_recorder.py b/src/cobalt/webdriver_benchmarks/tv_testcase_event_recorder.py index 50acc3c..d8aec07 100644 --- a/src/cobalt/webdriver_benchmarks/tv_testcase_event_recorder.py +++ b/src/cobalt/webdriver_benchmarks/tv_testcase_event_recorder.py
@@ -59,9 +59,7 @@ self.event_type = options.event_type self.skip_font_file_load_events = options.skip_font_file_load_events - if self.skip_font_file_load_events: - self.font_files_loaded_count = self.test.get_cval( - c_val_names.count_font_files_loaded()) + self.font_files_loaded_count = None self.render_tree_failure_count = 0 self.font_file_load_skip_count = 0 @@ -78,8 +76,10 @@ self._add_value_dictionary_recorder("CntDomHtmlElements") self._add_value_dictionary_recorder("CntDomHtmlElementsCreated") self._add_value_dictionary_recorder("CntDomHtmlElementsDestroyed") - self._add_value_dictionary_recorder("CntDomUpdateMatchingRuleCalls") - self._add_value_dictionary_recorder("CntDomUpdateComputedStyleCalls") + self._add_value_dictionary_recorder("CntDomUpdateMatchingRules") + self._add_value_dictionary_recorder("CntDomUpdateComputedStyle") + self._add_value_dictionary_recorder("CntDomGenerateHtmlComputedStyle") + self._add_value_dictionary_recorder("CntDomGeneratePseudoComputedStyle") self._add_value_dictionary_recorder("CntLayoutBoxes") self._add_value_dictionary_recorder("CntLayoutBoxesCreated") self._add_value_dictionary_recorder("CntLayoutBoxesDestroyed") @@ -109,12 +109,17 @@ def on_start_event(self): """Handles logic related to the start of the event instance.""" - pass + + # If the recorder is set to skip events with font file loads and the font + # file loaded count hasn't been initialized yet, then do that now. + if self.skip_font_file_load_events and self.font_files_loaded_count is None: + self.font_files_loaded_count = self.test.get_cval( + c_val_names.count_font_files_loaded()) def on_end_event(self): """Handles logic related to the end of the event instance.""" - # If the event is set to skip events with font file loads and a font file + # If the recorder is set to skip events with font file loads and a font file # loaded during the event, then its data is not collected. Log that it was # skipped and return. if self.skip_font_file_load_events: @@ -133,7 +138,7 @@ # If the event failed to produce a render tree, then its data is not # collected. Log the failure and return. - if not value_dictionary.get("ProducedRenderTree"): + if not value_dictionary or not value_dictionary.get("ProducedRenderTree"): self.render_tree_failure_count += 1 print("{} event failed to produce render tree! {} events failed.".format( self.event_name, self.render_tree_failure_count))
diff --git a/src/cobalt/webdriver_benchmarks/tv_testcase_runner.py b/src/cobalt/webdriver_benchmarks/tv_testcase_runner.py index ab69ff6..d543c4a 100755 --- a/src/cobalt/webdriver_benchmarks/tv_testcase_runner.py +++ b/src/cobalt/webdriver_benchmarks/tv_testcase_runner.py
@@ -47,6 +47,8 @@ # Pattern to match Cobalt log line for when the WebDriver port has been # opened. RE_WEBDRIVER_LISTEN = re.compile(r"Starting WebDriver server on port (\d+)") +# Pattern to match Cobalt log line for when a WindowDriver has been created. +RE_WINDOWDRIVER_CREATED = re.compile(r"Created WindowDriver: ID=\S+") STARTUP_TIMEOUT_SECONDS = 2 * 60 @@ -61,6 +63,7 @@ } _webdriver = None +_windowdriver_created = threading.Event() def GetWebDriver(): @@ -68,6 +71,11 @@ return _webdriver +def GetWindowDriverCreated(): + """Returns the WindowDriver created instance.""" + return _windowdriver_created + + class TimeoutException(Exception): pass @@ -96,7 +104,13 @@ self.launcher = app_launcher.CreateLauncher( platform, executable, devkit_name=devkit_name, close_output_file=False) - self.launcher.SetArgs(["--enable_webdriver"]) + args = [] + args.append("--enable_webdriver") + args.append("--null_savegame") + args.append("--debug_console=off") + args.append("--url=about:blank") + + self.launcher.SetArgs(args) self.launcher.SetOutputCallback(self._HandleLine) self.log_file_path = log_file_path self.log_file = None @@ -123,6 +137,11 @@ def _HandleLine(self, line): """Internal log line callback.""" + # Check for a WindowDriver being created. + if RE_WINDOWDRIVER_CREATED.search(line): + _windowdriver_created.set() + return + # Wait for WebDriver port here then connect if self.test_script_started.is_set(): return
diff --git a/src/cobalt/webdriver_benchmarks/tv_testcase_util.py b/src/cobalt/webdriver_benchmarks/tv_testcase_util.py index 51840c3..4542e90 100644 --- a/src/cobalt/webdriver_benchmarks/tv_testcase_util.py +++ b/src/cobalt/webdriver_benchmarks/tv_testcase_util.py
@@ -8,6 +8,10 @@ import json import sys +# pylint: disable=C6204 +import urlparse +from urllib import urlencode + import container_util # These are watched for in webdriver_benchmark_test.py @@ -18,6 +22,11 @@ EVENT_TYPE_KEY_DOWN = "KeyDown" EVENT_TYPE_KEY_UP = "KeyUp" +# URL-related constants +BASE_URL = "https://www.youtube.com/" +TV_APP_PATH = "/tv" +BASE_PARAMS = {} + def import_selenium_module(submodule=None): """Dynamically imports a selenium.webdriver submodule. @@ -52,6 +61,23 @@ return module +def get_url(path, query_params=None): + """Returns the URL indicated by the path and query parameters.""" + parsed_url = list(urlparse.urlparse(BASE_URL)) + parsed_url[2] = path + query_dict = BASE_PARAMS.copy() + if query_params: + query_dict.update(urlparse.parse_qsl(parsed_url[4])) + container_util.merge_dict(query_dict, query_params) + parsed_url[4] = urlencode(query_dict, doseq=True) + return urlparse.urlunparse(parsed_url) + + +def get_tv_url(query_params=None): + """Returns the tv URL indicated by the query parameters.""" + return get_url(TV_APP_PATH, query_params) + + def record_test_result(name, result): """Records an individual scalar result of a benchmark test.
diff --git a/src/media/filters/chunk_demuxer.cc b/src/media/filters/chunk_demuxer.cc index 76cc2c8..64760b8 100644 --- a/src/media/filters/chunk_demuxer.cc +++ b/src/media/filters/chunk_demuxer.cc
@@ -73,7 +73,7 @@ #if defined(OS_STARBOARD) #if SB_HAS(MEDIA_WEBM_VP9_SUPPORT) -static const CodecInfo kVP9CodecInfo = { "vp9", DemuxerStream::VIDEO }; +static const CodecInfo kVP9CodecInfo = {"vp9*", DemuxerStream::VIDEO}; static const CodecInfo* kVideoWebMCodecs[] = { &kVP9CodecInfo,
diff --git a/src/nb/string_interner.cc b/src/nb/string_interner.cc index 482ea95..b4da03a 100644 --- a/src/nb/string_interner.cc +++ b/src/nb/string_interner.cc
@@ -14,7 +14,10 @@ * limitations under the License. */ +#include "nb/hash.h" #include "nb/string_interner.h" +#include "starboard/client_porting/poem/string_poem.h" +#include "starboard/string.h" namespace nb { @@ -69,4 +72,64 @@ return out; } -} // namespace nb +ConcurrentStringInterner::ConcurrentStringInterner(size_t table_size) { + Construct(table_size); +} + +void ConcurrentStringInterner::Construct(size_t table_size) { + if (table_size == 0) { + table_size = 1; + } + string_interner_table_.reserve(table_size); + for (size_t i = 0; i < table_size; ++i) { + string_interner_table_.push_back(new StringInterner); + } +} + +ConcurrentStringInterner::~ConcurrentStringInterner() { + for (size_t i = 0; i < string_interner_table_.size(); ++i) { + delete string_interner_table_[i]; + } +} + +const std::string& ConcurrentStringInterner::Intern(const std::string& str) { + return GetBucket(str.c_str(), str.size()).Intern(str); +} + +const std::string& ConcurrentStringInterner::Intern(const char* c_string) { + return GetBucket(c_string, SbStringGetLength(c_string)).Intern(c_string); +} + +const std::string* ConcurrentStringInterner::Get(const std::string& str) const { + return GetBucket(str.c_str(), str.size()).Get(str); +} + +const std::string* ConcurrentStringInterner::Get(const char* c_string) const { + return GetBucket(c_string, SbStringGetLength(c_string)).Get(c_string); +} + +size_t ConcurrentStringInterner::Size() const { + size_t sum = 0; + for (size_t i = 0; i < string_interner_table_.size(); ++i) { + sum += string_interner_table_[i]->Size(); + } + return sum; +} + +nb::StringInterner& +ConcurrentStringInterner::GetBucket(const char* string, size_t n) { + uint32_t hash_value = nb::RuntimeHash32(string, n); + size_t index = + static_cast<size_t>(hash_value % string_interner_table_.size()); + return *string_interner_table_[index]; +} + +const nb::StringInterner& +ConcurrentStringInterner::GetBucket(const char* string, size_t n) const { + uint32_t hash_value = nb::RuntimeHash32(string, n); + size_t index = + static_cast<size_t>(hash_value % string_interner_table_.size()); + return *string_interner_table_[index]; +} + + } // namespace nb
diff --git a/src/nb/string_interner.h b/src/nb/string_interner.h index 2ae07ba..87840bf 100644 --- a/src/nb/string_interner.h +++ b/src/nb/string_interner.h
@@ -19,6 +19,7 @@ #include <set> #include <string> +#include <vector> #include "starboard/configuration.h" #include "starboard/mutex.h" @@ -67,6 +68,31 @@ SB_DISALLOW_COPY_AND_ASSIGN(StringInterner); }; +class ConcurrentStringInterner { + public: + explicit ConcurrentStringInterner(size_t table_size = 32); + ~ConcurrentStringInterner(); // All outstanding const std::string* are invalidated. + + // Returns an equivalent string to the input. If the input is missing from + // the data store then a copy-by-value is made. + const std::string& Intern(const std::string& str); + const std::string& Intern(const char* c_string); + + // Returns the string object if it exists, otherwise NULL. + const std::string* Get(const std::string& str) const; + const std::string* Get(const char* c_string) const; + + size_t Size() const; + + private: + void Construct(size_t table_size); + StringInterner& GetBucket(const char* string, size_t n); + const StringInterner& GetBucket(const char* string, size_t n) const; + std::vector<StringInterner*> string_interner_table_; + + SB_DISALLOW_COPY_AND_ASSIGN(ConcurrentStringInterner); +}; + } // namespace nb #endif // NB_STRING_INTERNER_H_
diff --git a/src/nb/string_interner_test.cc b/src/nb/string_interner_test.cc index dc4df8c..cb296a8 100644 --- a/src/nb/string_interner_test.cc +++ b/src/nb/string_interner_test.cc
@@ -14,6 +14,7 @@ * limitations under the License. */ +#include <cstring> #include <string> #include "nb/string_interner.h" @@ -22,8 +23,31 @@ namespace nb { namespace { -TEST(StringInterner, Intern) { - StringInterner string_interner; +typedef ::testing::Types<StringInterner, ConcurrentStringInterner> + StringInternerTypes; + +// Defines test type that will be instantiated using each type in +// AllAtomicTypes type list. +template <typename T> +class StringInternerTest : public ::testing::Test {}; +TYPED_TEST_CASE(StringInternerTest, StringInternerTypes); // Registration. + +std::string GenerateRandomString(size_t size) { + static const char valid_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; + static const size_t n = strlen(valid_chars); + + std::stringstream ss; + for (size_t i = 0; i < size; ++i) { + size_t random_char_index = std::rand() % n; + ss << valid_chars[random_char_index]; + } + return ss.str(); +} + +TYPED_TEST(StringInternerTest, Intern) { + typedef TypeParam StringInternerT; + StringInternerT string_interner; EXPECT_FALSE(string_interner.Get("A")); EXPECT_EQ(&string_interner.Intern("A"), &string_interner.Intern("A")); EXPECT_TRUE(string_interner.Get("A")); @@ -32,8 +56,9 @@ EXPECT_EQ(2, string_interner.Size()); } -TEST(StringInterner, InternStdString) { - StringInterner string_interner; +TYPED_TEST(StringInternerTest, InternStdString) { + typedef TypeParam StringInternerT; + StringInternerT string_interner; std::string a = "A"; std::string a_copy = "A"; std::string b = "B"; @@ -46,5 +71,47 @@ EXPECT_EQ(2, string_interner.Size()); } +TYPED_TEST(StringInternerTest, InternBothStrings) { + typedef TypeParam StringInternerT; + StringInternerT string_interner; + + std::string a_stdstring = "A"; + const char* c_string = "A"; + + const std::string* a_pointer = &string_interner.Intern("A"); + EXPECT_EQ(a_pointer, &string_interner.Intern(c_string)); + EXPECT_EQ(a_pointer, &string_interner.Intern(a_stdstring)); +} + +// Tests the expectation that a set of unique strings can all be inserted +// into the (Concurrent)StringInterner. +TYPED_TEST(StringInternerTest, LoadLotsOfUniqueStrings) { + typedef TypeParam StringInternerT; + StringInternerT string_interner; + + static const size_t kNumStringsToLoad = 1000; + + std::set<std::string> all_unique_strings; + + // Keep generating random strings until we have a full set of unique strings. + while (all_unique_strings.size() < kNumStringsToLoad) { + all_unique_strings.insert(GenerateRandomString(25)); + } + + for (std::set<std::string>::const_iterator it = all_unique_strings.begin(); + it != all_unique_strings.end(); ++it) { + const std::string& str = *it; + ASSERT_FALSE(string_interner.Get(str)); + ASSERT_FALSE(string_interner.Get(str.c_str())); // c-string version. + + string_interner.Intern(str); + + ASSERT_TRUE(string_interner.Get(str)); + ASSERT_TRUE(string_interner.Get(str.c_str())); // c-string version. + } + + ASSERT_EQ(string_interner.Size(), all_unique_strings.size()); +} + } // namespace } // namespace nb
diff --git a/src/net/http/http_util.cc b/src/net/http/http_util.cc index 033b00d..c406586 100644 --- a/src/net/http/http_util.cc +++ b/src/net/http/http_util.cc
@@ -426,6 +426,13 @@ return c == '"' || c == '\''; } +bool HttpUtil::IsTokenChar(char c) { + return !(c >= 0x7F || c <= 0x20 || c == '(' || c == ')' || c == '<' || + c == '>' || c == '@' || c == ',' || c == ';' || c == ':' || + c == '\\' || c == '"' || c == '/' || c == '[' || c == ']' || + c == '?' || c == '=' || c == '{' || c == '}'); +} + // See RFC 2616 Sec 2.2 for the definition of |token|. bool HttpUtil::IsToken(string::const_iterator begin, string::const_iterator end) {
diff --git a/src/net/http/http_util.h b/src/net/http/http_util.h index 7560b92..1846664 100644 --- a/src/net/http/http_util.h +++ b/src/net/http/http_util.h
@@ -104,6 +104,8 @@ // Whether the character is the start of a quotation mark. static bool IsQuote(char c); + // Whether the character is a valid |tchar| as defined in RFC 7230 Sec 3.2.6. + static bool IsTokenChar(char c); // Whether the string is a valid |token| as defined in RFC 2616 Sec 2.2. static bool IsToken(std::string::const_iterator begin, std::string::const_iterator end);
diff --git a/src/net/net.gyp b/src/net/net.gyp index 36d3e12..4a0a740 100644 --- a/src/net/net.gyp +++ b/src/net/net.gyp
@@ -10,7 +10,7 @@ # this flag is set, we hackily avoid using mmap() in the disk cache. 'posix_avoid_mmap%': 0, - 'enable_websockets%' : 0, + 'enable_websockets%' : 1, 'use_native_http_stack%': 0, }, 'targets': [ @@ -676,10 +676,18 @@ 'url_request/url_request_throttler_manager.h', 'url_request/view_cache_helper.cc', 'url_request/view_cache_helper.h', + 'websockets/websocket_extension.cc', + 'websockets/websocket_extension.h', + 'websockets/websocket_extension_parser.cc', + 'websockets/websocket_extension_parser.h', 'websockets/websocket_frame.cc', 'websockets/websocket_frame.h', 'websockets/websocket_frame_parser.cc', 'websockets/websocket_frame_parser.h', + 'websockets/websocket_handshake_challenge.cc', + 'websockets/websocket_handshake_challenge.h', + 'websockets/websocket_handshake_constants.cc', + 'websockets/websocket_handshake_constants.h', 'websockets/websocket_handshake_handler.cc', 'websockets/websocket_handshake_handler.h', 'websockets/websocket_job.cc', @@ -1037,6 +1045,7 @@ 'url_request/view_cache_helper_unittest.cc', 'websockets/websocket_frame_parser_unittest.cc', 'websockets/websocket_frame_unittest.cc', + 'websockets/websocket_handshake_challenge_test.cc', 'websockets/websocket_handshake_handler_unittest.cc', 'websockets/websocket_handshake_handler_spdy2_unittest.cc', 'websockets/websocket_handshake_handler_spdy3_unittest.cc',
diff --git a/src/net/socket_stream/socket_stream.cc b/src/net/socket_stream/socket_stream.cc index 73d5a2b..95f56a7 100644 --- a/src/net/socket_stream/socket_stream.cc +++ b/src/net/socket_stream/socket_stream.cc
@@ -40,6 +40,7 @@ #include "net/socket/tcp_client_socket.h" #include "net/socket_stream/socket_stream_metrics.h" #include "net/url_request/url_request.h" +#include "starboard/memory.h" static const int kMaxPendingSendAllowed = 32768; // 32 kilobytes. static const int kReadBufferSize = 4096; @@ -79,7 +80,8 @@ SocketStream::ResponseHeaders::ResponseHeaders() : IOBuffer() {} void SocketStream::ResponseHeaders::Realloc(size_t new_size) { - headers_.reset(static_cast<char*>(realloc(headers_.release(), new_size))); + headers_.reset( + static_cast<char*>(SbMemoryReallocate(headers_.release(), new_size))); } SocketStream::ResponseHeaders::~ResponseHeaders() { data_ = NULL; }
diff --git a/src/net/socket_stream/socket_stream.h b/src/net/socket_stream/socket_stream.h index a86aee8..3fa1f13 100644 --- a/src/net/socket_stream/socket_stream.h +++ b/src/net/socket_stream/socket_stream.h
@@ -93,7 +93,10 @@ // Called when an error occured. // This is only for error reporting to the delegate. // |error| is net::Error. - virtual void OnError(const SocketStream* socket, int error) {} + virtual void OnError(const SocketStream* socket, int error) { + UNREFERENCED_PARAMETER(socket); + UNREFERENCED_PARAMETER(error); + } // Called when reading cookies to allow the delegate to block access to the // cookie.
diff --git a/src/net/spdy/spdy_session.h b/src/net/spdy/spdy_session.h index abb5e92..6c18212 100644 --- a/src/net/spdy/spdy_session.h +++ b/src/net/spdy/spdy_session.h
@@ -292,6 +292,10 @@ } void set_spdy_session_pool(SpdySessionPool* pool) { + // Not sure why pool is not referenced, so I added UNREFERENCED_PARAMETER + // here. It is likely a bug, but not worth investigating as Cobalt does + // not support SPDY, and it is unlikely if it ever will. + UNREFERENCED_PARAMETER(pool); spdy_session_pool_ = NULL; }
diff --git a/src/net/websockets/websocket_extension.cc b/src/net/websockets/websocket_extension.cc new file mode 100644 index 0000000..6e558ad --- /dev/null +++ b/src/net/websockets/websocket_extension.cc
@@ -0,0 +1,82 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/websockets/websocket_extension.h" + +#include <map> +#include <string> + +#include "base/logging.h" +#include "net/http/http_util.h" + +namespace net { + +WebSocketExtension::Parameter::Parameter(const std::string& name) + : name_(name) {} + +WebSocketExtension::Parameter::Parameter(const std::string& name, + const std::string& value) + : name_(name), value_(value) { + DCHECK(!value.empty()); + // |extension-param| must be a token. + DCHECK(HttpUtil::IsToken(value)); +} + +bool WebSocketExtension::Parameter::Equals(const Parameter& other) const { + return name_ == other.name_ && value_ == other.value_; +} + +WebSocketExtension::WebSocketExtension() {} + +WebSocketExtension::WebSocketExtension(const std::string& name) : name_(name) {} + +WebSocketExtension::WebSocketExtension(const WebSocketExtension& other) { + name_ = other.name_; + parameters_ = other.parameters_; +} + +WebSocketExtension::~WebSocketExtension() {} + +bool WebSocketExtension::Equals(const WebSocketExtension& other) const { + if (name_ != other.name_) + return false; + if (parameters_.size() != other.parameters_.size()) + return false; + + std::multimap<std::string, std::string> this_parameters, other_parameters; + for (std::vector<Parameter>::const_iterator iterator = parameters_.begin(); + iterator != parameters_.end(); ++iterator) { + const Parameter& p(*iterator); + this_parameters.insert(std::make_pair(p.name(), p.value())); + } + for (std::vector<Parameter>::const_iterator iterator = + other.parameters_.begin(); + iterator != other.parameters_.end(); ++iterator) { + const Parameter& p(*iterator); + other_parameters.insert(std::make_pair(p.name(), p.value())); + } + return this_parameters == other_parameters; +} + +std::string WebSocketExtension::ToString() const { + if (name_.empty()) + return std::string(); + + std::string result = name_; + + for (std::vector<Parameter>::const_iterator iterator = parameters_.begin(); + iterator != parameters_.end(); ++iterator) { + const Parameter& param(*iterator); + result += "; " + param.name(); + if (!param.HasValue()) + continue; + + // |extension-param| must be a token and we don't need to quote it. + DCHECK(HttpUtil::IsToken(param.value())); + result += "=" + param.value(); + } + return result; +} + +} // namespace net
diff --git a/src/net/websockets/websocket_extension.h b/src/net/websockets/websocket_extension.h new file mode 100644 index 0000000..4c42a76 --- /dev/null +++ b/src/net/websockets/websocket_extension.h
@@ -0,0 +1,59 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_ +#define NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_ + +#include <string> +#include <vector> + +#include "net/base/net_export.h" + +namespace net { + +// A WebSocketExtension instance represents a WebSocket extension specified +// in RFC6455. +class NET_EXPORT_PRIVATE WebSocketExtension { + public: + // Note that RFC6455 does not allow a parameter with an empty value. + class NET_EXPORT_PRIVATE Parameter { + public: + // Construct a parameter which does not have a value. + explicit Parameter(const std::string& name); + // Construct a parameter with a non-empty value. + Parameter(const std::string& name, const std::string& value); + + bool HasValue() const { return !value_.empty(); } + const std::string& name() const { return name_; } + const std::string& value() const { return value_; } + bool Equals(const Parameter& other) const; + + // The default copy constructor and the assignment operator are defined: + // we need them. + private: + std::string name_; + std::string value_; + }; + + WebSocketExtension(); + explicit WebSocketExtension(const std::string& name); + WebSocketExtension(const WebSocketExtension& other); + ~WebSocketExtension(); + + void Add(const Parameter& parameter) { parameters_.push_back(parameter); } + const std::string& name() const { return name_; } + const std::vector<Parameter>& parameters() const { return parameters_; } + bool Equals(const WebSocketExtension& other) const; + std::string ToString() const; + + // The default copy constructor and the assignment operator are defined: + // we need them. + private: + std::string name_; + std::vector<Parameter> parameters_; +}; + +} // namespace net + +#endif // NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
diff --git a/src/net/websockets/websocket_extension_parser.cc b/src/net/websockets/websocket_extension_parser.cc new file mode 100644 index 0000000..6e52fbf --- /dev/null +++ b/src/net/websockets/websocket_extension_parser.cc
@@ -0,0 +1,149 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/websockets/websocket_extension_parser.h" + +#include "base/logging.h" +#include "net/http/http_util.h" + +namespace net { + +WebSocketExtensionParser::WebSocketExtensionParser() {} + +WebSocketExtensionParser::~WebSocketExtensionParser() {} + +bool WebSocketExtensionParser::Parse(const char* data, size_t size) { + current_ = data; + end_ = data + size; + extensions_.clear(); + + bool failed = false; + + do { + WebSocketExtension extension; + if (!ConsumeExtension(&extension)) { + failed = true; + break; + } + extensions_.push_back(extension); + + ConsumeSpaces(); + } while (ConsumeIfMatch(',')); + + if (!failed && current_ == end_) + return true; + + extensions_.clear(); + return false; +} + +bool WebSocketExtensionParser::Consume(char c) { + ConsumeSpaces(); + if (current_ == end_ || c != *current_) + return false; + ++current_; + return true; +} + +bool WebSocketExtensionParser::ConsumeExtension(WebSocketExtension* extension) { + base::StringPiece name; + if (!ConsumeToken(&name)) + return false; + *extension = WebSocketExtension(name.as_string()); + + while (ConsumeIfMatch(';')) { + WebSocketExtension::Parameter parameter((std::string())); + if (!ConsumeExtensionParameter(¶meter)) + return false; + extension->Add(parameter); + } + + return true; +} + +bool WebSocketExtensionParser::ConsumeExtensionParameter( + WebSocketExtension::Parameter* parameter) { + base::StringPiece name, value; + std::string value_string; + + if (!ConsumeToken(&name)) + return false; + + if (!ConsumeIfMatch('=')) { + *parameter = WebSocketExtension::Parameter(name.as_string()); + return true; + } + + if (Lookahead('\"')) { + if (!ConsumeQuotedToken(&value_string)) + return false; + } else { + if (!ConsumeToken(&value)) + return false; + value_string = value.as_string(); + } + *parameter = WebSocketExtension::Parameter(name.as_string(), value_string); + return true; +} + +bool WebSocketExtensionParser::ConsumeToken(base::StringPiece* token) { + ConsumeSpaces(); + const char* head = current_; + while (current_ < end_ && HttpUtil::IsTokenChar(*current_)) + ++current_; + if (current_ == head) + return false; + *token = base::StringPiece(head, current_ - head); + return true; +} + +bool WebSocketExtensionParser::ConsumeQuotedToken(std::string* token) { + if (!Consume('"')) + return false; + + *token = ""; + while (current_ < end_ && *current_ != '"') { + if (*current_ == '\\') { + ++current_; + if (current_ == end_) + return false; + } + if (!HttpUtil::IsTokenChar(*current_)) + return false; + *token += *current_; + ++current_; + } + if (current_ == end_) + return false; + DCHECK_EQ(*current_, '"'); + + ++current_; + + return !token->empty(); +} + +void WebSocketExtensionParser::ConsumeSpaces() { + while (current_ < end_ && (*current_ == ' ' || *current_ == '\t')) + ++current_; + return; +} + +bool WebSocketExtensionParser::Lookahead(char c) { + const char* head = current_; + bool result = Consume(c); + current_ = head; + return result; +} + +bool WebSocketExtensionParser::ConsumeIfMatch(char c) { + const char* head = current_; + if (!Consume(c)) { + current_ = head; + return false; + } + + return true; +} + +} // namespace net
diff --git a/src/net/websockets/websocket_extension_parser.h b/src/net/websockets/websocket_extension_parser.h new file mode 100644 index 0000000..66fe804 --- /dev/null +++ b/src/net/websockets/websocket_extension_parser.h
@@ -0,0 +1,63 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_WEBSOCKETS_WEBSOCKET_EXTENSION_PARSER_H_ +#define NET_WEBSOCKETS_WEBSOCKET_EXTENSION_PARSER_H_ + +#include <stddef.h> + +#include <string> +#include <vector> + +#include "base/compiler_specific.h" +#include "base/string_piece.h" +#include "net/base/net_export.h" +#include "net/websockets/websocket_extension.h" + +namespace net { + +class NET_EXPORT_PRIVATE WebSocketExtensionParser { + public: + WebSocketExtensionParser(); + ~WebSocketExtensionParser(); + + // Parses the given string as a Sec-WebSocket-Extensions header value. + // + // There must be no newline characters in the input. LWS-concatenation must + // have already been done before calling this method. + // + // Returns true if the method was successful (no syntax error was found). + bool Parse(const char* data, size_t size); + bool Parse(const std::string& data) { + return Parse(data.data(), data.size()); + } + + // Returns the result of the last Parse() method call. + const std::vector<WebSocketExtension>& extensions() const { + return extensions_; + } + + private: + WARN_UNUSED_RESULT bool Consume(char c); + WARN_UNUSED_RESULT bool ConsumeExtension(WebSocketExtension* extension); + WARN_UNUSED_RESULT bool ConsumeExtensionParameter( + WebSocketExtension::Parameter* parameter); + WARN_UNUSED_RESULT bool ConsumeToken(base::StringPiece* token); + WARN_UNUSED_RESULT bool ConsumeQuotedToken(std::string* token); + void ConsumeSpaces(); + WARN_UNUSED_RESULT bool Lookahead(char c); + WARN_UNUSED_RESULT bool ConsumeIfMatch(char c); + + // The current position in the input string. + const char* current_; + // The pointer of the end of the input string. + const char* end_; + std::vector<WebSocketExtension> extensions_; + + DISALLOW_COPY_AND_ASSIGN(WebSocketExtensionParser); +}; + +} // namespace net + +#endif // NET_WEBSOCKETS_WEBSOCKET_EXTENSION_PARSER_H_
diff --git a/src/net/websockets/websocket_handshake_challenge.cc b/src/net/websockets/websocket_handshake_challenge.cc new file mode 100644 index 0000000..3a1c3e8 --- /dev/null +++ b/src/net/websockets/websocket_handshake_challenge.cc
@@ -0,0 +1,20 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/websockets/websocket_handshake_challenge.h" + +#include "base/base64.h" +#include "base/sha1.h" +#include "net/websockets/websocket_handshake_constants.h" + +namespace net { + +std::string ComputeSecWebSocketAccept(const std::string& key) { + std::string accept; + std::string hash = base::SHA1HashString(key + websockets::kWebSocketGuid); + base::Base64Encode(hash, &accept); + return accept; +} + +} // namespace net
diff --git a/src/net/websockets/websocket_handshake_challenge.h b/src/net/websockets/websocket_handshake_challenge.h new file mode 100644 index 0000000..e21f2b0 --- /dev/null +++ b/src/net/websockets/websocket_handshake_challenge.h
@@ -0,0 +1,21 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_CHALLENGE_H_ +#define NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_CHALLENGE_H_ + +#include <string> + +#include "net/base/net_export.h" + +namespace net { + +// Given a WebSocket handshake challenge, compute the value that the server +// should return in the Sec-WebSocket-Accept header. +NET_EXPORT_PRIVATE std::string ComputeSecWebSocketAccept( + const std::string& key); + +} // namespace net + +#endif // NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_CHALLENGE_H_
diff --git a/src/net/websockets/websocket_handshake_challenge_test.cc b/src/net/websockets/websocket_handshake_challenge_test.cc new file mode 100644 index 0000000..d7e45ca --- /dev/null +++ b/src/net/websockets/websocket_handshake_challenge_test.cc
@@ -0,0 +1,24 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/websockets/websocket_handshake_challenge.h" + +#include <string> + +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { + +namespace { + +// Test the example challenge from the RFC6455. +TEST(WebSocketHandshakeChallengeTest, RFC6455) { + const std::string key = "dGhlIHNhbXBsZSBub25jZQ=="; + std::string accept = ComputeSecWebSocketAccept(key); + EXPECT_EQ("s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", accept); +} + +} // namespace + +} // namespace net
diff --git a/src/net/websockets/websocket_handshake_constants.cc b/src/net/websockets/websocket_handshake_constants.cc new file mode 100644 index 0000000..bb031e2 --- /dev/null +++ b/src/net/websockets/websocket_handshake_constants.cc
@@ -0,0 +1,38 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/websockets/websocket_handshake_constants.h" + +namespace net { +namespace websockets { + +const char kHttpProtocolVersion[] = "HTTP/1.1"; + +const size_t kRawChallengeLength = 16; + +const char kSecWebSocketProtocol[] = "Sec-WebSocket-Protocol"; +const char kSecWebSocketExtensions[] = "Sec-WebSocket-Extensions"; +const char kSecWebSocketKey[] = "Sec-WebSocket-Key"; +const char kSecWebSocketAccept[] = "Sec-WebSocket-Accept"; +const char kSecWebSocketVersion[] = "Sec-WebSocket-Version"; + +const char kSupportedVersion[] = "13"; + +const char kUpgrade[] = "Upgrade"; +const char kWebSocketGuid[] = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + +const char kSecWebSocketProtocolSpdy3[] = ":sec-websocket-protocol"; +const char kSecWebSocketExtensionsSpdy3[] = ":sec-websocket-extensions"; + +const char* const kSecWebSocketProtocolLowercase = + kSecWebSocketProtocolSpdy3 + 1; +const char* const kSecWebSocketExtensionsLowercase = + kSecWebSocketExtensionsSpdy3 + 1; +const char kSecWebSocketKeyLowercase[] = "sec-websocket-key"; +const char kSecWebSocketVersionLowercase[] = "sec-websocket-version"; +const char kUpgradeLowercase[] = "upgrade"; +const char kWebSocketLowercase[] = "websocket"; + +} // namespace websockets +} // namespace net
diff --git a/src/net/websockets/websocket_handshake_constants.h b/src/net/websockets/websocket_handshake_constants.h new file mode 100644 index 0000000..6b17be0 --- /dev/null +++ b/src/net/websockets/websocket_handshake_constants.h
@@ -0,0 +1,91 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// A set of common constants that are needed for the WebSocket handshake. +// In general, you should prefer using these constants to literal strings, +// except in tests. +// +// These constants cannot be used in files that are compiled on iOS, because +// this file is not compiled on iOS. + +#ifndef NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_CONSTANTS_H_ +#define NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_CONSTANTS_H_ + +#include <stddef.h> + +#include "net/base/net_export.h" + +// This file plases constants inside the ::net::websockets namespace to avoid +// risk of collisions with other symbols in libnet. +namespace net { +namespace websockets { + +// "HTTP/1.1" +// RFC6455 only requires HTTP/1.1 "or better" but in practice an HTTP version +// other than 1.1 should not occur in a WebSocket handshake. +extern const char kHttpProtocolVersion[]; + +// The Sec-WebSockey-Key challenge is 16 random bytes, base64 encoded. +extern const size_t kRawChallengeLength; + +// "Sec-WebSocket-Protocol" +extern const char kSecWebSocketProtocol[]; + +// "Sec-WebSocket-Extensions" +extern const char kSecWebSocketExtensions[]; + +// "Sec-WebSocket-Key" +extern const char kSecWebSocketKey[]; + +// "Sec-WebSocket-Accept" +extern const char kSecWebSocketAccept[]; + +// "Sec-WebSocket-Version" +extern const char kSecWebSocketVersion[]; + +// This implementation only supports one version of the WebSocket protocol, +// "13", as specified in RFC6455. If support for multiple versions is added in +// future, it will probably no longer be worth having a constant for this. +extern const char kSupportedVersion[]; + +// "Upgrade" +extern const char kUpgrade[]; + +// "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" as defined in section 4.1 of +// RFC6455. +extern const char NET_EXPORT kWebSocketGuid[]; + +// Colon-prefixed lowercase headers for SPDY3. + +// ":sec-websocket-protocol" +extern const char kSecWebSocketProtocolSpdy3[]; + +// ":sec-websocket-extensions" +extern const char kSecWebSocketExtensionsSpdy3[]; + +// Some parts of the code require lowercase versions of the header names in +// order to do case-insensitive comparisons, or because of SPDY. +// "sec-websocket-protocol" +extern const char* const kSecWebSocketProtocolLowercase; + +// "sec-websocket-extensions" +extern const char* const kSecWebSocketExtensionsLowercase; + +// "sec-webSocket-key" +extern const char kSecWebSocketKeyLowercase[]; + +// "sec-websocket-version" +extern const char kSecWebSocketVersionLowercase[]; + +// "upgrade" +extern const char kUpgradeLowercase[]; + +// "websocket", as used in the "Upgrade:" header. This is always lowercase +// (except in obsolete versions of the protocol). +extern const char kWebSocketLowercase[]; + +} // namespace websockets +} // namespace net + +#endif // NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_CONSTANTS_H_
diff --git a/src/net/websockets/websocket_handshake_handler.cc b/src/net/websockets/websocket_handshake_handler.cc index 991ea31..657f2c6 100644 --- a/src/net/websockets/websocket_handshake_handler.cc +++ b/src/net/websockets/websocket_handshake_handler.cc
@@ -541,10 +541,13 @@ headers_ = FilterHeaders(headers_, headers_to_remove, headers_to_remove_len); } +std::size_t WebSocketHandshakeResponseHandler::GetRawResponseLength() const { + return original_header_length_ + GetResponseKeySize(); +} + std::string WebSocketHandshakeResponseHandler::GetRawResponse() const { DCHECK(HasResponse()); - return std::string(original_.data(), - original_header_length_ + GetResponseKeySize()); + return std::string(original_.data(), GetRawResponseLength()); } std::string WebSocketHandshakeResponseHandler::GetResponse() {
diff --git a/src/net/websockets/websocket_handshake_handler.h b/src/net/websockets/websocket_handshake_handler.h index b4a0dd5..a39403c 100644 --- a/src/net/websockets/websocket_handshake_handler.h +++ b/src/net/websockets/websocket_handshake_handler.h
@@ -132,6 +132,7 @@ // Gets raw WebSocket handshake response received from WebSocket server. std::string GetRawResponse() const; + std::size_t GetRawResponseLength() const; // Gets WebSocket handshake response message sent to renderer process. std::string GetResponse();
diff --git a/src/net/websockets/websocket_job.cc b/src/net/websockets/websocket_job.cc index ff60ebe..e04cecd 100644 --- a/src/net/websockets/websocket_job.cc +++ b/src/net/websockets/websocket_job.cc
@@ -17,8 +17,6 @@ #include "net/http/http_network_session.h" #include "net/http/http_transaction_factory.h" #include "net/http/http_util.h" -#include "net/spdy/spdy_session.h" -#include "net/spdy/spdy_session_pool.h" #include "net/url_request/url_request_context.h" #include "net/websockets/websocket_handshake_handler.h" #include "net/websockets/websocket_net_log_params.h" @@ -59,18 +57,11 @@ namespace net { -bool WebSocketJob::websocket_over_spdy_enabled_ = false; - // static void WebSocketJob::EnsureInit() { g_websocket_job_init.Get(); } -// static -void WebSocketJob::set_websocket_over_spdy_enabled(bool enabled) { - websocket_over_spdy_enabled_ = enabled; -} - WebSocketJob::WebSocketJob(SocketStream::Delegate* delegate) : delegate_(delegate), state_(INITIALIZED), @@ -80,7 +71,6 @@ started_to_send_handshake_request_(false), handshake_request_sent_(0), response_cookies_save_index_(0), - spdy_protocol_version_(0), ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_for_send_pending_(this)) { } @@ -181,7 +171,7 @@ AddRef(); // Balanced when callback_ is cleared. return ERR_IO_PENDING; } - return TrySpdyStream(); + return OK; } void WebSocketJob::OnConnected( @@ -279,73 +269,6 @@ delegate_->OnError(socket, error); } -void WebSocketJob::OnCreatedSpdyStream(int result) { - DCHECK(spdy_websocket_stream_.get()); - DCHECK(socket_.get()); - DCHECK_NE(ERR_IO_PENDING, result); - - if (state_ == CLOSED) { - result = ERR_ABORTED; - } else if (result == OK) { - state_ = CONNECTING; - result = ERR_PROTOCOL_SWITCHED; - } else { - spdy_websocket_stream_.reset(); - } - - CompleteIO(result); -} - -void WebSocketJob::OnSentSpdyHeaders(int result) { - DCHECK_NE(INITIALIZED, state_); - if (state_ != CONNECTING) - return; - if (delegate_) - delegate_->OnSentData(socket_, handshake_request_->original_length()); - handshake_request_.reset(); -} - -int WebSocketJob::OnReceivedSpdyResponseHeader( - const SpdyHeaderBlock& headers, int status) { - DCHECK_NE(INITIALIZED, state_); - if (state_ != CONNECTING) - return status; - if (status != OK) - return status; - // TODO(toyoshim): Fallback to non-spdy connection? - handshake_response_->ParseResponseHeaderBlock(headers, - challenge_, - spdy_protocol_version_); - - SaveCookiesAndNotifyHeaderComplete(); - return OK; -} - -void WebSocketJob::OnSentSpdyData(int amount_sent) { - DCHECK_NE(INITIALIZED, state_); - DCHECK_NE(CONNECTING, state_); - if (state_ == CLOSED) - return; - if (!spdy_websocket_stream_.get()) - return; - OnSentData(socket_, amount_sent); -} - -void WebSocketJob::OnReceivedSpdyData(const char* data, int length) { - DCHECK_NE(INITIALIZED, state_); - DCHECK_NE(CONNECTING, state_); - if (state_ == CLOSED) - return; - if (!spdy_websocket_stream_.get()) - return; - OnReceivedData(socket_, data, length); -} - -void WebSocketJob::OnCloseSpdyStream() { - spdy_websocket_stream_.reset(); - OnClose(socket_); -} - bool WebSocketJob::SendHandshakeRequest(const char* data, int len) { DCHECK_EQ(state_, CONNECTING); if (started_to_send_handshake_request_) @@ -389,13 +312,7 @@ } void WebSocketJob::DoSendData() { - if (spdy_websocket_stream_.get()) { - scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock); - handshake_request_->GetRequestHeaderBlock( - socket_->url(), headers.get(), &challenge_, spdy_protocol_version_); - spdy_websocket_stream_->SendRequest(headers.Pass()); - } else { - const std::string& handshake_request = + const std::string& handshake_request = handshake_request_->GetRawRequest(); handshake_request_sent_ = 0; socket_->net_log()->AddEvent( @@ -403,7 +320,6 @@ base::Bind(&NetLogWebSocketHandshakeCallback, &handshake_request)); socket_->SendData(handshake_request.data(), handshake_request.size()); - } // Just buffered in |handshake_request_|. started_to_send_handshake_request_ = true; } @@ -441,10 +357,7 @@ return; } // handshake message is completed. - std::string raw_response = handshake_response_->GetRawResponse(); - socket_->net_log()->AddEvent( - NetLog::TYPE_WEB_SOCKET_READ_RESPONSE_HEADERS, - base::Bind(&NetLogWebSocketHandshakeCallback, &raw_response)); + if (len - response_length > 0) { // If we received extra data, it should be frame data. DCHECK(received_data_after_handshake_.empty()); @@ -536,57 +449,6 @@ return addresses_; } -int WebSocketJob::TrySpdyStream() { - if (!socket_.get()) - return ERR_FAILED; - - if (!websocket_over_spdy_enabled_) - return OK; - - // Check if we have a SPDY session available. - HttpTransactionFactory* factory = - socket_->context()->http_transaction_factory(); - if (!factory) - return OK; - scoped_refptr<HttpNetworkSession> session = factory->GetSession(); - if (!session.get()) - return OK; - SpdySessionPool* spdy_pool = session->spdy_session_pool(); - const HostPortProxyPair pair(HostPortPair::FromURL(socket_->url()), - socket_->proxy_server()); - if (!spdy_pool->HasSession(pair)) - return OK; - - // Forbid wss downgrade to SPDY without SSL. - // TODO(toyoshim): Does it realize the same policy with HTTP? - scoped_refptr<SpdySession> spdy_session = - spdy_pool->Get(pair, *socket_->net_log()); - SSLInfo ssl_info; - bool was_npn_negotiated; - NextProto protocol_negotiated = kProtoUnknown; - bool use_ssl = spdy_session->GetSSLInfo( - &ssl_info, &was_npn_negotiated, &protocol_negotiated); - if (socket_->is_secure() && !use_ssl) - return OK; - - // Create SpdyWebSocketStream. - spdy_protocol_version_ = spdy_session->GetProtocolVersion(); - spdy_websocket_stream_.reset(new SpdyWebSocketStream(spdy_session, this)); - - int result = spdy_websocket_stream_->InitializeStream( - socket_->url(), MEDIUM, *socket_->net_log()); - if (result == OK) { - OnConnected(socket_, kMaxPendingSendAllowed); - return ERR_PROTOCOL_SWITCHED; - } - if (result != ERR_IO_PENDING) { - spdy_websocket_stream_.reset(); - return OK; - } - - return ERR_IO_PENDING; -} - void WebSocketJob::SetWaiting() { waiting_ = true; } @@ -607,12 +469,7 @@ } void WebSocketJob::RetryPendingIO() { - int result = TrySpdyStream(); - - // In the case of ERR_IO_PENDING, CompleteIO() will be called from - // OnCreatedSpdyStream(). - if (result != ERR_IO_PENDING) - CompleteIO(result); + CompleteIO(OK); } void WebSocketJob::CompleteIO(int result) { @@ -626,16 +483,12 @@ } bool WebSocketJob::SendDataInternal(const char* data, int length) { - if (spdy_websocket_stream_.get()) - return ERR_IO_PENDING == spdy_websocket_stream_->SendData(data, length); if (socket_.get()) return socket_->SendData(data, length); return false; } void WebSocketJob::CloseInternal() { - if (spdy_websocket_stream_.get()) - spdy_websocket_stream_->Close(); if (socket_.get()) socket_->Close(); }
diff --git a/src/net/websockets/websocket_job.h b/src/net/websockets/websocket_job.h index e01085b..99a9c93 100644 --- a/src/net/websockets/websocket_job.h +++ b/src/net/websockets/websocket_job.h
@@ -13,8 +13,6 @@ #include "net/base/address_list.h" #include "net/base/completion_callback.h" #include "net/socket_stream/socket_stream_job.h" -#include "net/spdy/spdy_header_block.h" -#include "net/spdy/spdy_websocket_stream.h" class GURL; @@ -33,8 +31,7 @@ // TODO(ukai): refactor websocket.cc to use this. class NET_EXPORT WebSocketJob : public SocketStreamJob, - public SocketStream::Delegate, - public SpdyWebSocketStream::Delegate { + public SocketStream::Delegate { public: // This is state of WebSocket, not SocketStream. enum State { @@ -49,10 +46,6 @@ static void EnsureInit(); - // Enable or Disable WebSocket over SPDY feature. - // This function is intended to be called before I/O thread starts. - static void set_websocket_over_spdy_enabled(bool enabled); - State state() const { return state_; } virtual void Connect() OVERRIDE; virtual bool SendData(const char* data, int len) OVERRIDE; @@ -77,19 +70,12 @@ bool fatal) OVERRIDE; virtual void OnError(const SocketStream* socket, int error) OVERRIDE; - // SpdyWebSocketStream::Delegate methods. - virtual void OnCreatedSpdyStream(int status) OVERRIDE; - virtual void OnSentSpdyHeaders(int status) OVERRIDE; - virtual int OnReceivedSpdyResponseHeader( - const SpdyHeaderBlock& headers, int status) OVERRIDE; - virtual void OnSentSpdyData(int amount_sent) OVERRIDE; - virtual void OnReceivedSpdyData(const char* data, int length) OVERRIDE; - virtual void OnCloseSpdyStream() OVERRIDE; + WebSocketHandshakeResponseHandler* GetHandshakeResponse() { + return handshake_response_.get(); + } private: friend class WebSocketThrottle; - friend class WebSocketJobSpdy2Test; - friend class WebSocketJobSpdy3Test; virtual ~WebSocketJob(); bool SendHandshakeRequest(const char* data, int len); @@ -107,7 +93,6 @@ GURL GetURLForCookies() const; const AddressList& address_list() const; - int TrySpdyStream(); void SetWaiting(); bool IsWaiting() const; void Wakeup(); @@ -118,8 +103,6 @@ void CloseInternal(); void SendPending(); - static bool websocket_over_spdy_enabled_; - SocketStream::Delegate* delegate_; State state_; bool waiting_; @@ -139,8 +122,6 @@ scoped_refptr<DrainableIOBuffer> current_send_buffer_; std::vector<char> received_data_after_handshake_; - int spdy_protocol_version_; - scoped_ptr<SpdyWebSocketStream> spdy_websocket_stream_; std::string challenge_; base::WeakPtrFactory<WebSocketJob> weak_ptr_factory_;
diff --git a/src/net/websockets/websocket_throttle_unittest.cc b/src/net/websockets/websocket_throttle_unittest.cc index ef05c4c..7577574 100644 --- a/src/net/websockets/websocket_throttle_unittest.cc +++ b/src/net/websockets/websocket_throttle_unittest.cc
@@ -63,7 +63,6 @@ DummySocketStreamDelegate delegate; // TODO(toyoshim): We need to consider both spdy-enabled and spdy-disabled // configuration. - WebSocketJob::set_websocket_over_spdy_enabled(true); // For host1: 1.2.3.4, 1.2.3.5, 1.2.3.6 AddressList addr; @@ -280,7 +279,6 @@ TEST_F(WebSocketThrottleTest, NoThrottleForDuplicateAddress) { TestURLRequestContext context; DummySocketStreamDelegate delegate; - WebSocketJob::set_websocket_over_spdy_enabled(true); // For localhost: 127.0.0.1, 127.0.0.1 AddressList addr;
diff --git a/src/starboard/accessibility.h b/src/starboard/accessibility.h new file mode 100644 index 0000000..fbe4c97 --- /dev/null +++ b/src/starboard/accessibility.h
@@ -0,0 +1,57 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Module Overview: Starboard Accessibility module +// +// Provides access to the system options and settings related to accessibility. + +#ifndef STARBOARD_ACCESSIBILITY_H_ +#define STARBOARD_ACCESSIBILITY_H_ + +#include "starboard/export.h" +#include "starboard/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + +// A group of settings related to text-to-speech functionality, for platforms +// that expose system settings for text-to-speech. +typedef struct SbAccessibilityTextToSpeechSettings { + // Whether this platform has a system setting for text-to-speech or not. + bool has_text_to_speech_setting; + + // Whether the text-to-speech setting is enabled or not. This setting is only + // valid if |has_text_to_speech_setting| is set to true. + bool is_text_to_speech_enabled; +} SbAccessibilityTextToSpeechSettings; + +// Get the platform settings related to the text-to-speech accessibility +// feature. This function returns false if |out_settings| is NULL or if it is +// not zero-initialized. +// +// |out_settings|: A pointer to a zero-initialized +// SbAccessibilityTextToSpeechSettings struct. +SB_EXPORT bool SbAccessibilityGetTextToSpeechSettings( + SbAccessibilityTextToSpeechSettings* out_settings); + +#endif // SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // STARBOARD_ACCESSIBILITY_H_
diff --git a/src/starboard/common/flat_map.h b/src/starboard/common/flat_map.h index 4f4d39c..2e04d60 100644 --- a/src/starboard/common/flat_map.h +++ b/src/starboard/common/flat_map.h
@@ -53,7 +53,7 @@ // where n is the number of items in flatmap // and m is the input size for the operation. // -// bulk insert | O(n+m + m*log(m)) +// bulk insert | O(m*log(m) + m*log(n) + n+m) (sort input, check dups, merge) // insert | O(n) // erase | O(n) // bulk erase | O(n*m) TODO: Make faster - O(n+m + log(m))
diff --git a/src/starboard/doc/api_process.md b/src/starboard/doc/api_process.md new file mode 100644 index 0000000..5e6e6e2 --- /dev/null +++ b/src/starboard/doc/api_process.md
@@ -0,0 +1,68 @@ +# Starboard API Review Process + +## Why do we need a process? +The Starboard API is the contract between Starboard applications and +implementors of the Starboard API. Changing existing APIs and adding new +required APIs breaks that contract and increases the cost of implementors +keeping their Starboard port up-to-date. Pushing a release to the Open Source +repository signals to Starboard implementors that any non-experimental APIs in +that version will not change for as long as that version of Starboard is +supported by the Starboard applications. We cannot change those newly frozen +APIs without causing a potentially significant disruption to any partners who +have already implemented them, or are in the process of implementing them. + +While having a process may make it harder to add new things to Starboard, it is +much harder to remove or change things that are already there. + +Thus we need to give special focus to changes to the Starboard API to ensure its +consistency with existing APIs design principles. Unnecessary churn on the +Starboard API creates more work for Starboard application developers and may +discourage porters from keeping Starboard applications up-to-date on their +platforms. This process is intended to save time and effort for both Starboard +application developers and Starboard implementors in the long run, and +illustrates the complexity of dealing with a wide variety of platforms +simultaneously. + +## So you want to add a new API? +Historically, we have done API review as a part of the Code Review process using +Gerrit. This works well for small-ish changes. For larger changes, consider +writing a design document up front before defining the new API. + +### Who does the review? +Send a message to the public cobalt-dev group to request a review. + +### What is the process? +Developers are strongly encouraged to create the interface and upload that to +Gerrit for review before spending time on stubs and tests. Iteration on the +interface will necessarily result in changes to the stubs and tests, which can +result in more work for the implementer of a new API. + +1. Upload a .h file with Module Overview and (optionally) initial function + prototypes + * New APIs should be declared in the experimental version, as described in the + starboard versioning doc. +2. Discuss the new API with whoever is performing the review, and address + comments. +3. Iterate. + * As a part of the review process, the reviewer will work with you to ensure + that the new API adheres to the starboard principles. +4. Finalize function declarations. +5. Implement tests and stubs. + * Existing platforms on trunk should not break as a result of this change. + * At this point, you may submit the interface, tests, and stubs with your + reviewer’s +2. +6. Implement the interface for at least one platform. +7. Iterate +8. It may be that implementation of the API reveals things that were overlooked + during the earlier stages of the review. + +Ideally most major points of feedback will be caught early in the review process +before much time has been spent on implementation. +In the case that the platform in (6) is an internal platform, provide a +reference implementation for at least one external reference platform. This can +be in a follow-up CL, but must be implemented before the new API is frozen +(see [versioning.md](versioning.md)). + +## How to design a new API +See [principles.md](principles.md) for a guide on how to design a good Starboard +API.
diff --git a/src/starboard/doc/versioning.md b/src/starboard/doc/versioning.md new file mode 100644 index 0000000..3e18903 --- /dev/null +++ b/src/starboard/doc/versioning.md
@@ -0,0 +1,135 @@ +# Starboard Versioning + +## Motivation +When a porter implements Starboard for a platform, it is more precise to say +that they have implemented support for a certain version of Starboard. +Changes to the Starboard API are associated with Starboard versions. Any usage +of new Starboard APIs must also be protected by a compile-time check for the +Starboard version it belongs to. This decoupling of Cobalt and Starboard +versions ensures that a porter can update to a newer version of Cobalt, but not +be required to implement new Starboard APIs, if the version of Starboard they +have implemented is still supported. + +## Starboard API version vs. Starboard application version +The Starboard version describes the set of Starboard APIs available to Starboard +applications. It will be incremented with every open-source release that +includes changes to the Starboard API. Reasons to increment the Starboard API +version include: + +* New Starboard APIs +* Removed Starboard APIs +* Modified semantics to existing APIs + +Some notable cases that do not justify incrementing the Starboard version +include: + +* More descriptive or clearer comments for existing APIs that do not change the + semantics +* New utility classes that are built on top of Starboard APIs, such as + `starboard::ScopedFile` +* Changes that affect the upward API to Starboard applications, but not the + downward API to porters. For example, defining new upward APIs in terms of + existing Starboard APIs. + +A particular Starboard application may be versioned independently of the +Starboard API. A given version of a Starboard application may support a range of +Starboard versions. It may be the case that some new functionality in a +Starboard application requires Starboard APIs that were added to a particular +API version. If a porter wants to use such a feature, they must therefore also +implement the required version of the Starboard API. For example, Voice Search +was added to Cobalt version 5 and requires the SbMicrophone APIs which were +added to Starboard version 2. Platforms that implemented Starboard version 1 +continued to build and run Cobalt 5 correctly, but the Voice Search feature +would be unavailable. + +## Range of supported Starboard versions +The minimum supported API version is defined by the `SB_MINIMUM_API_VERSION` +macro, which is defined in starboard/configuration.h. Likewise, the +`SB_MAXIMUM_API_VERSION` macro defines the maximum supported API version. All +platforms must declare a `SB_API_VERSION` macro in the platform’s +configuration.h to declare the starboard version the platform has implemented. +Declaring implementation for an API version outside this range will result in an +error at compilation time. +Generally Starboard applications will not support all versions of the Starboard +API indefinitely. Starboard application owners may increment the minimum +required Starboard version at their discretion. +TBD: Timelines and communication around when an upcoming Cobalt release will +require porters to implement a newer version of Starboard. + +## Using new Starboard APIs from Starboard Applications +Usage of a Starboard API that is not available in all supported Starboard API +versions must be guarded with a check for `SB_API_VERSION`. Starboard +applications must continue to function correctly and must not disable existing +functionality if this check evaluates to false, but it’s acceptable to disable +new functionality in Starboard applications if this evaluates to false. + +## Adding and using new Starboard APIs +### “experimental” Starboard version +At any given time, exactly one version of Starboard will be denoted as the +“experimental” version, as defined by the `SB_EXPERIMENTAL_API_VERSION` macro in +starboard/configuration.h. It is generally not recommended to declare support +for this version. Any Starboard APIs defined in the experimental version are +subject to change and API requirements could be added, removed, or changed at +any time. +### “frozen” Starboard versions +All Starboard versions that are less than the experimental version are +considered frozen. Any Starboard APIs in a frozen version shall not change as +long as that version is supported by Cobalt. +### Life of a Starboard API +New Starboard APIs should be defined in the experimental version. In practice, +they should be declared as follows: + +``` +// starboard/new_functionality.h +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION +void SbNewFunctionality(); +#endif +``` + +Starboard application features that use a new API must have a similar check: + +``` +// cobalt/new_feature.cc +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION +void DoSomethingCool() { + SbNewFunctionality(); +} +#endif +``` + +When a new version of a Starboard Application that requires new Starboard APIs +is to be released, these new Starboard APIs will be frozen to the value of the +current experimental version, and the experimental version will be incremented +by one. + +``` +// starboard/new_functionality.h +#if SB_API_VERSION >= 7 +void SbNewFunctionality(); +#endif + +// starboard/other_new_functionality.h +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION +void SbStillInDevelopment(); +#endif + +// starboard/configuration.h +#define SB_EXPERIMENTAL_API_VERSION 8 + +// cobalt/new_feature.cc +#if SB_API_VERSION >= 7 +void DoSomethingCool() { + SbNewFunctionality(); +} +#endif +``` + +A developer who increments the experimental version must ensure that stubs and +reference platforms declare support for the new experimental version through +their respective `SB_API_VERSION` macros. + +## Open questions +### Communicating Starboard API changes to porters +When a new version of Starboard is released, there should be a process to +describe the changes to the API, which Cobalt features depend on these, and a +timeline for when porters will be required to move to the new version.
diff --git a/src/starboard/event.h b/src/starboard/event.h index 44cdd79..f7d9a68 100644 --- a/src/starboard/event.h +++ b/src/starboard/event.h
@@ -151,6 +151,13 @@ // callback directly, so SbEventHandle should never receive this event // directly. The data type is an internally-defined structure. kSbEventTypeScheduled, + +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + // The platform's accessibility settings have changed. The application should + // query the accessibility settings using the appropriate APIs to get the + // new settings. + kSbEventTypeAccessiblitySettingsChanged, +#endif } SbEventType; // Structure representing a Starboard event and its data.
diff --git a/src/starboard/linux/x64directfb/future/starboard_platform.gyp b/src/starboard/linux/x64directfb/future/starboard_platform.gyp index 189aaf1..dd6f502 100644 --- a/src/starboard/linux/x64directfb/future/starboard_platform.gyp +++ b/src/starboard/linux/x64directfb/future/starboard_platform.gyp
@@ -18,6 +18,7 @@ 'product_name': 'starboard_platform_future', 'type': 'static_library', 'sources': [ + '<(DEPTH)/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc', '<(DEPTH)/starboard/shared/stub/decode_target_create_blitter.cc', '<(DEPTH)/starboard/shared/stub/decode_target_destroy.cc', '<(DEPTH)/starboard/shared/stub/decode_target_get_format.cc',
diff --git a/src/starboard/linux/x64x11/atomic_public.h b/src/starboard/linux/x64x11/atomic_public.h index 169cb89..7845b02 100644 --- a/src/starboard/linux/x64x11/atomic_public.h +++ b/src/starboard/linux/x64x11/atomic_public.h
@@ -14,4 +14,9 @@ * limitations under the License. */ +#ifndef STARBOARD_LINUX_X64X11_ATOMIC_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_ATOMIC_PUBLIC_H_ + #include "starboard/linux/shared/atomic_public.h" + +#endif // STARBOARD_LINUX_X64X11_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/future/starboard_platform.gyp b/src/starboard/linux/x64x11/future/starboard_platform.gyp index 6435941..3c1ac11 100644 --- a/src/starboard/linux/x64x11/future/starboard_platform.gyp +++ b/src/starboard/linux/x64x11/future/starboard_platform.gyp
@@ -22,6 +22,7 @@ 'type': 'static_library', 'sources': [ '<@(starboard_platform_sources)', + '<(DEPTH)/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc', '<(DEPTH)/starboard/shared/stub/decode_target_create_egl.cc', '<(DEPTH)/starboard/shared/stub/decode_target_destroy.cc', '<(DEPTH)/starboard/shared/stub/decode_target_get_format.cc',
diff --git a/src/starboard/linux/x64x11/thread_types_public.h b/src/starboard/linux/x64x11/thread_types_public.h index 6548e00..716c697 100644 --- a/src/starboard/linux/x64x11/thread_types_public.h +++ b/src/starboard/linux/x64x11/thread_types_public.h
@@ -14,4 +14,9 @@ * limitations under the License. */ +#ifndef STARBOARD_LINUX_X64X11_THREAD_TYPES_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_THREAD_TYPES_PUBLIC_H_ + #include "starboard/linux/shared/thread_types_public.h" + +#endif // STARBOARD_LINUX_X64X11_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/memory.h b/src/starboard/memory.h index 7181541..1a7d3e9 100644 --- a/src/starboard/memory.h +++ b/src/starboard/memory.h
@@ -292,6 +292,16 @@ return result; } +// Returns true if the first |count| bytes of |buffer| are set to zero. +static SB_C_INLINE bool SbMemoryIsZero(const void* buffer, size_t count) { + if (count == 0) { + return true; + } + const char* char_buffer = (const char*)(buffer); + return char_buffer[0] == 0 && + SbMemoryCompare(char_buffer, char_buffer + 1, count - 1) == 0; +} + ///////////////////////////////////////////////////////////////// // Deprecated. Do not use. /////////////////////////////////////////////////////////////////
diff --git a/src/starboard/nplb/accessibility_get_setting_test.cc b/src/starboard/nplb/accessibility_get_setting_test.cc new file mode 100644 index 0000000..ab182f7 --- /dev/null +++ b/src/starboard/nplb/accessibility_get_setting_test.cc
@@ -0,0 +1,42 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "starboard/accessibility.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace starboard { +namespace nplb { +namespace { + +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + +TEST(SbAccessibilityGetSettingTest, CanCallGetTextToSpeechSettings) { + SbAccessibilityTextToSpeechSettings settings = {0}; + EXPECT_TRUE(SbAccessibilityGetTextToSpeechSettings(&settings)); +} + +TEST(SbAccessibilityGetSettingTest, CallTextToSpeechWithInvalidArgument) { + // |settings| should be zero-initialized. + SbAccessibilityTextToSpeechSettings settings = {1}; + EXPECT_FALSE(SbAccessibilityGetTextToSpeechSettings(&settings)); + + // Argument should not be NULL. + EXPECT_FALSE(SbAccessibilityGetTextToSpeechSettings(NULL)); +} + +#endif + +} // namespace +} // namespace nplb +} // namespace starboard
diff --git a/src/starboard/nplb/include_all.c b/src/starboard/nplb/include_all.c index e55a271..69ce553 100644 --- a/src/starboard/nplb/include_all.c +++ b/src/starboard/nplb/include_all.c
@@ -14,6 +14,7 @@ // Includes all headers in a C context to make sure they compile as C files. +#include "starboard/accessibility.h" #include "starboard/atomic.h" #include "starboard/audio_sink.h" #include "starboard/blitter.h"
diff --git a/src/starboard/nplb/memory_is_zero_test.cc b/src/starboard/nplb/memory_is_zero_test.cc new file mode 100644 index 0000000..5529071 --- /dev/null +++ b/src/starboard/nplb/memory_is_zero_test.cc
@@ -0,0 +1,52 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "starboard/memory.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace starboard { +namespace nplb { +namespace { + +const size_t kSize = 128; + +TEST(SbMemoryIsZeroTest, MemoryIsZero) { + int8_t buffer[kSize] = {0}; + + EXPECT_TRUE(SbMemoryIsZero(&buffer, sizeof(buffer))); +} + +TEST(SbMemoryIsZeroTest, MemoryIsNonZero) { + int8_t buffer[kSize] = {0}; + buffer[kSize - 1] = 1; + + EXPECT_FALSE(SbMemoryIsZero(&buffer, sizeof(buffer))); + EXPECT_TRUE(SbMemoryIsZero(&buffer, sizeof(buffer) - 1)); +} + +TEST(SbMemoryIsZeroTest, EmptyBufferIsZero) { + EXPECT_TRUE(SbMemoryIsZero(NULL, 0)); +} + +TEST(SbMemoryIsZeroTest, SingleByte) { + int8_t zero = 0; + int8_t non_zero = 1; + + EXPECT_TRUE(SbMemoryIsZero(&zero, 1)); + EXPECT_FALSE(SbMemoryIsZero(&non_zero, 1)); +} + +} // namespace +} // namespace nplb +} // namespace starboard
diff --git a/src/starboard/nplb/nplb.gyp b/src/starboard/nplb/nplb.gyp index 2bf9cb6..fd578f0 100644 --- a/src/starboard/nplb/nplb.gyp +++ b/src/starboard/nplb/nplb.gyp
@@ -22,6 +22,7 @@ 'type': '<(gtest_target_type)', 'sources': [ '<(DEPTH)/starboard/common/test_main.cc', + 'accessibility_get_setting_test.cc', 'atomic_test.cc', 'audio_sink_create_test.cc', 'audio_sink_destroy_test.cc', @@ -117,10 +118,11 @@ 'memory_allocate_test.cc', 'memory_compare_test.cc', 'memory_copy_test.cc', - 'memory_find_byte_test.cc', 'memory_deallocate_aligned_test.cc', 'memory_deallocate_test.cc', 'memory_get_stack_bounds_test.cc', + 'memory_is_zero_test.cc', + 'memory_find_byte_test.cc', 'memory_map_test.cc', 'memory_move_test.cc', 'memory_reallocate_test.cc',
diff --git a/src/starboard/raspi/shared/starboard_platform.gypi b/src/starboard/raspi/shared/starboard_platform.gypi index a096687..9fcbc9f 100644 --- a/src/starboard/raspi/shared/starboard_platform.gypi +++ b/src/starboard/raspi/shared/starboard_platform.gypi
@@ -302,6 +302,7 @@ '<(DEPTH)/starboard/shared/starboard/system_get_random_uint64.cc', '<(DEPTH)/starboard/shared/starboard/system_request_stop.cc', '<(DEPTH)/starboard/shared/starboard/window_set_default_options.cc', + '<(DEPTH)/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc', '<(DEPTH)/starboard/shared/stub/drm_close_session.cc', '<(DEPTH)/starboard/shared/stub/drm_create_system.cc', '<(DEPTH)/starboard/shared/stub/drm_destroy_system.cc',
diff --git a/src/starboard/shared/starboard/player/player_worker.cc b/src/starboard/shared/starboard/player/player_worker.cc index 61155d6..63fb43d 100644 --- a/src/starboard/shared/starboard/player/player_worker.cc +++ b/src/starboard/shared/starboard/player/player_worker.cc
@@ -96,12 +96,13 @@ void* PlayerWorker::ThreadEntryPoint(void* context) { ThreadParam* param = static_cast<ThreadParam*>(context); SB_DCHECK(param != NULL); + PlayerWorker* player_worker = param->player_worker; { ScopedLock scoped_lock(param->mutex); - param->player_worker->job_queue_.reset(new JobQueue); + player_worker->job_queue_.reset(new JobQueue); param->condition_variable.Signal(); } - param->player_worker->RunLoop(); + player_worker->RunLoop(); return NULL; }
diff --git a/src/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc b/src/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc new file mode 100644 index 0000000..6a2d326 --- /dev/null +++ b/src/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc
@@ -0,0 +1,27 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "starboard/accessibility.h" + +#include "starboard/memory.h" + +bool SbAccessibilityGetTextToSpeechSettings( + SbAccessibilityTextToSpeechSettings* out_setting) { + if (!out_setting || + !SbMemoryIsZero(out_setting, + sizeof(SbAccessibilityTextToSpeechSettings))) { + return false; + } + return true; +}
diff --git a/src/starboard/stub/starboard_platform.gyp b/src/starboard/stub/starboard_platform.gyp index ff61a20..b228978 100644 --- a/src/starboard/stub/starboard_platform.gyp +++ b/src/starboard/stub/starboard_platform.gyp
@@ -25,6 +25,7 @@ '<(DEPTH)/starboard/shared/starboard/file_mode_string_to_flags.cc', '<(DEPTH)/starboard/shared/starboard/log_message.cc', '<(DEPTH)/starboard/shared/starboard/queue_application.cc', + '<(DEPTH)/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc', '<(DEPTH)/starboard/shared/stub/atomic_public.h', '<(DEPTH)/starboard/shared/stub/audio_sink_create.cc', '<(DEPTH)/starboard/shared/stub/audio_sink_destroy.cc',
diff --git a/src/starboard/system.h b/src/starboard/system.h index 2d5a1a2..8532ad8 100644 --- a/src/starboard/system.h +++ b/src/starboard/system.h
@@ -129,6 +129,11 @@ // Desktop PC. kSbSystemDeviceTypeDesktopPC, +#if SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + // An Android TV Device. + kSbSystemDeviceTypeAndroidTV, +#endif // SB_API_VERSION >= SB_EXPERIMENTAL_API_VERSION + // Unknown device. kSbSystemDeviceTypeUnknown, } SbSystemDeviceType;
diff --git a/src/third_party/libwebp/libwebp.gyp b/src/third_party/libwebp/libwebp.gyp index 947ed92..59deb74 100644 --- a/src/third_party/libwebp/libwebp.gyp +++ b/src/third_party/libwebp/libwebp.gyp
@@ -80,6 +80,10 @@ },{ # "target_arch != "arm" or arm_version < 7" 'type': 'none', }], + ['target_arch == "arm" and arm_version >= 8 and clang == 1', { + # NEON is implicit on ARMv8, and clang doesn't like the redundant flag + 'cflags!': [ '-mfpu=neon' ], + }], ['order_profiling != 0', { 'target_conditions' : [ ['_toolset=="target"', {
diff --git a/src/third_party/mozjs/js/src/vm/NumericConversions.h b/src/third_party/mozjs/js/src/vm/NumericConversions.h index 61511a0..94cddae 100644 --- a/src/third_party/mozjs/js/src/vm/NumericConversions.h +++ b/src/third_party/mozjs/js/src/vm/NumericConversions.h
@@ -132,7 +132,11 @@ inline int32_t ToInt32(double d) { -#if defined (__arm__) && defined (__GNUC__) +#if defined(__ANDROID__) && defined(__clang__) && \ + __clang_major__ == 3 && __clang_minor__ == 8 +#define ANDROID_CLANG38 1 +#endif +#if defined (__arm__) && defined (__GNUC__) && !defined(ANDROID_CLANG38) int32_t i; uint32_t tmp0; uint32_t tmp1; @@ -256,6 +260,7 @@ #else return detail::ToIntWidth<int32_t>(d); #endif +#undef ANDROID_CLANG38 } /* ES5 9.6 (specialized for doubles). */
diff --git a/src/third_party/mozjs/mfbt/double-conversion/utils.h b/src/third_party/mozjs/mfbt/double-conversion/utils.h index 0eec2d9..52fe028 100644 --- a/src/third_party/mozjs/mfbt/double-conversion/utils.h +++ b/src/third_party/mozjs/mfbt/double-conversion/utils.h
@@ -53,7 +53,7 @@ // disabled.) // On Linux,x86 89255e-22 != Div_double(89255.0/1e22) #if defined(_M_X64) || defined(__x86_64__) || \ - defined(__ARMEL__) || defined(__avr32__) || \ + defined(__ARMEL__) || defined(__avr32__) || defined(__aarch64__) || \ defined(__hppa__) || defined(__ia64__) || \ defined(__mips__) || defined(__powerpc__) || \ defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
diff --git a/src/third_party/openssl/openssl.gyp b/src/third_party/openssl/openssl.gyp index 484a49e..27a29c3 100644 --- a/src/third_party/openssl/openssl.gyp +++ b/src/third_party/openssl/openssl.gyp
@@ -593,61 +593,71 @@ 'openssl_config_path': 'config/android', }, }], - ['target_arch == "arm"', { - 'sources!': [ - # Use assembly version of this source file for ARM. - 'openssl/crypto/aes/aes_core.c', + ['OS=="lb_shell" or OS=="starboard"', { + # Don't use assembly in steel or starboard. + # TODO: Investigate whether assembly helps low-profile devices. + 'defines': [ + 'OPENSSL_NO_ASM', ], - 'sources': [ - 'openssl/crypto/aes/asm/aes-armv4.S', - 'openssl/crypto/bn/asm/armv4-gf2m.S', - 'openssl/crypto/bn/asm/armv4-mont.S', - 'openssl/crypto/modes/asm/ghash-armv4.S', - 'openssl/crypto/sha/asm/sha1-armv4-large.S', - 'openssl/crypto/sha/asm/sha256-armv4.S', - 'openssl/crypto/sha/asm/sha512-armv4.S', - ], - }], - ['target_arch == "ia32"', { - 'sources!': [ - # Use assembly version of this source file for ARM. - 'openssl/crypto/aes/aes_core.c', - 'openssl/crypto/aes/aes_cbc.c', - 'openssl/crypto/des/des_enc.c', - 'openssl/crypto/des/fcrypt_b.c', - 'openssl/crypto/bf/bf_enc.c', - 'openssl/crypto/bn/bn_asm.c', - ], - 'sources': [ - 'openssl/crypto/aes/asm/aes-586.S', - 'openssl/crypto/aes/asm/aesni-x86.S', - 'openssl/crypto/aes/asm/vpaes-x86.S', - 'openssl/crypto/bf/asm/bf-586.S', - 'openssl/crypto/bn/asm/bn-586.S', - 'openssl/crypto/bn/asm/co-586.S', - 'openssl/crypto/bn/asm/x86-gf2m.S', - 'openssl/crypto/bn/asm/x86-mont.S', - 'openssl/crypto/des/asm/crypt586.S', - 'openssl/crypto/des/asm/des-586.S', - 'openssl/crypto/md5/asm/md5-586.S', - 'openssl/crypto/modes/asm/ghash-x86.S', - 'openssl/crypto/sha/asm/sha1-586.S', - 'openssl/crypto/sha/asm/sha256-586.S', - 'openssl/crypto/sha/asm/sha512-586.S', - ], - }], - ['target_arch=="mips"', { - 'sources!': [ - # Use assembly version of these source files for MIPS. - 'openssl/crypto/bn/bn_asm.c', - 'openssl/crypto/aes/aes_core.c', - ], - 'sources': [ - 'openssl/crypto/aes/asm/aes-mips.S', - 'openssl/crypto/bn/asm/bn-mips.S', - 'openssl/crypto/bn/asm/mips-mont.S', - 'openssl/crypto/sha/asm/sha1-mips.S', - 'openssl/crypto/sha/asm/sha256-mips.S', + }, { # Not steel or starboard, use assembly + 'conditions': [ + ['target_arch == "arm"', { + 'sources!': [ + # Use assembly version of this source file for ARM. + 'openssl/crypto/aes/aes_core.c', + ], + 'sources': [ + 'openssl/crypto/aes/asm/aes-armv4.S', + 'openssl/crypto/bn/asm/armv4-gf2m.S', + 'openssl/crypto/bn/asm/armv4-mont.S', + 'openssl/crypto/modes/asm/ghash-armv4.S', + 'openssl/crypto/sha/asm/sha1-armv4-large.S', + 'openssl/crypto/sha/asm/sha256-armv4.S', + 'openssl/crypto/sha/asm/sha512-armv4.S', + ], + }], + ['target_arch == "ia32"', { + 'sources!': [ + # Use assembly version of these source files for IA32. + 'openssl/crypto/aes/aes_core.c', + 'openssl/crypto/aes/aes_cbc.c', + 'openssl/crypto/des/des_enc.c', + 'openssl/crypto/des/fcrypt_b.c', + 'openssl/crypto/bf/bf_enc.c', + 'openssl/crypto/bn/bn_asm.c', + ], + 'sources': [ + 'openssl/crypto/aes/asm/aes-586.S', + 'openssl/crypto/aes/asm/aesni-x86.S', + 'openssl/crypto/aes/asm/vpaes-x86.S', + 'openssl/crypto/bf/asm/bf-586.S', + 'openssl/crypto/bn/asm/bn-586.S', + 'openssl/crypto/bn/asm/co-586.S', + 'openssl/crypto/bn/asm/x86-gf2m.S', + 'openssl/crypto/bn/asm/x86-mont.S', + 'openssl/crypto/des/asm/crypt586.S', + 'openssl/crypto/des/asm/des-586.S', + 'openssl/crypto/md5/asm/md5-586.S', + 'openssl/crypto/modes/asm/ghash-x86.S', + 'openssl/crypto/sha/asm/sha1-586.S', + 'openssl/crypto/sha/asm/sha256-586.S', + 'openssl/crypto/sha/asm/sha512-586.S', + ], + }], + ['target_arch=="mips"', { + 'sources!': [ + # Use assembly version of these source files for MIPS. + 'openssl/crypto/bn/bn_asm.c', + 'openssl/crypto/aes/aes_core.c', + ], + 'sources': [ + 'openssl/crypto/aes/asm/aes-mips.S', + 'openssl/crypto/bn/asm/bn-mips.S', + 'openssl/crypto/bn/asm/mips-mont.S', + 'openssl/crypto/sha/asm/sha1-mips.S', + 'openssl/crypto/sha/asm/sha256-mips.S', + ], + }], ], }], ['clang==1', { @@ -683,7 +693,6 @@ 'NO_SYS_UN_H', 'NO_SYSLOG', 'NO_WINDOWS_BRAINDEATH', - 'OPENSSL_NO_ASM', 'OPENSSL_NO_BF', 'OPENSSL_NO_BUF_FREELISTS', 'OPENSSL_NO_CAMELLIA',
diff --git a/src/third_party/openssl/openssl/crypto/bn/asm/armv4-gf2m.S b/src/third_party/openssl/openssl/crypto/bn/asm/armv4-gf2m.S index 038f086..4cb7b99 100644 --- a/src/third_party/openssl/openssl/crypto/bn/asm/armv4-gf2m.S +++ b/src/third_party/openssl/openssl/crypto/bn/asm/armv4-gf2m.S
@@ -121,7 +121,7 @@ beq .Lialu veor d18,d18 - vmov.32 d19,r3,r3 @ two copies of b1 + vmov d19,r3,r3 @ two copies of b1 vmov.32 d18[0],r1 @ a1 veor d20,d20
diff --git a/src/third_party/openssl/openssl/crypto/modes/asm/ghash-armv4.S b/src/third_party/openssl/openssl/crypto/modes/asm/ghash-armv4.S index d66c4cb..a32a2e8 100644 --- a/src/third_party/openssl/openssl/crypto/modes/asm/ghash-armv4.S +++ b/src/third_party/openssl/openssl/crypto/modes/asm/ghash-armv4.S
@@ -3,6 +3,11 @@ .text .code 32 +#ifdef __clang__ +#define ldrplb ldrbpl +#define ldrneb ldrbne +#endif + .type rem_4bit,%object .align 5 rem_4bit:
diff --git a/src/third_party/promise-polyfill/CHANGELOG.md b/src/third_party/promise-polyfill/CHANGELOG.md new file mode 100644 index 0000000..f9bf5b5 --- /dev/null +++ b/src/third_party/promise-polyfill/CHANGELOG.md
@@ -0,0 +1,94 @@ +# Changelog + +## 6.0.0 Deprecated `Promise._setImmediateFn` and `Promise._setUnhandledRejectionFn` +This allows subclassing Promise without rewriting functions +- `Promise._setImmediateFn(<immediateFn>)` has been deprecated. Use `Promise._immediateFn = <immediateFn>` instead. +- `Promise._setUnhandledRejectionFn(<rejectionFn>)` has been deprecated. Use `Promise._unhandledRejectionFn = <rejectionFn>` instead. +These functions will be removed in the next major version. + +### 5.2.1 setTimeout to 0 +Fixed bug where setTimeout was set to 1 instead of 0 for async execution + +### 5.2.0 Subclassing +Allowed Subclassing. [#27](https://github.com/taylorhakes/promise-polyfill/pull/27) + +### 5.1.0 Fixed reliance on setTimeout +Changed possibly unhanded warnings to use asap function instead of setTimeout + +## 5.0.0 Removed multiple params from Promise.all +Removed non standard functionality of passing multiple params to Promise.all. You must pass an array now. You must change this code +```js +Promise.all(prom1, prom2, prom3); +``` +to this +```js +Promise.all([prom1, prom2, prom3]); +``` + +### 4.0.4 IE8 console.warn fix +IE8 does not have console, unless you open the developer tools. This fix checks to makes sure console.warn is defined before calling it. + +### 4.0.3 Fix case in bower.json +bower.json had Promise.js instead of promise.js + +### 4.0.2 promise.js case fix in package.json +Fixed promise.js in package.json. It was accidently published as Promise.js + +## 4.0.1 Unhandled Rejections and Other Fixes +- Added unhandled rejection warnings to the console +- Removed Grunt, jasmine and other unused code +- Renamed Promise.js to lowercase promise.js in multiple places + +### 3.0.1 Fixed shadowing issue on setTimeout +New version fixing this major bug https://github.com/taylorhakes/promise-polyfill/pull/17 + +## 3.0.0 Updated setTimeout to not be affected by test mocks +This is considered a breaking change because people may have been using this functionality. If you would like to keep version 2 functionality, set Promise._setImmediateFn on `promise-polyfill` like the code below. + +```js +var Promise = require('promise-polyfill'); +Promise._setImmedateFn(function(fn) { + setTimeout(fn, 1); +}); +``` + +### 2.1.0 Promise._setImmedateFn +Removed dead code Promise.immedateFn and added Promise._setImmediateFn(fn); + +### 2.0.2 Simplified Global detection +Simplified attaching to global object + +### 2.0.1 Webworker bugfixes +Fixed Webworkers missing window object + +## 2.0.0 +**Changed the following line** +``` +module.exports = root.Promise ? root.Promise : Promise; +``` +to +``` +module.exports = Promise; +``` + +This means the library will not use built-in Promise by default. This allows for more consistency. + +You can easily add the functionality back. +``` +var Promise = window.Promise || require('promise-polyfill'); +``` + +**Added Promise.immediateFn to allow changing the setImmedate function** +``` +Promise.immediateFn = window.setAsap; +``` + +### 1.1.4 Updated Promise to use correct global object in Browser and Node + +### 1.1.3 Fixed browserify issue with `this` + +### 1.1.2 Updated Promise.resolve to resolve with original Promise + +### 1.1.0 Performance Improvements for Modern Browsers + +## 1.0.1 Update README.md
diff --git a/src/third_party/promise-polyfill/LICENSE b/src/third_party/promise-polyfill/LICENSE new file mode 100644 index 0000000..94b9dac --- /dev/null +++ b/src/third_party/promise-polyfill/LICENSE
@@ -0,0 +1,20 @@ +Copyright (c) 2014 Taylor Hakes +Copyright (c) 2014 Forbes Lindesay + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file
diff --git a/src/third_party/promise-polyfill/README.cobalt b/src/third_party/promise-polyfill/README.cobalt new file mode 100644 index 0000000..2048a76 --- /dev/null +++ b/src/third_party/promise-polyfill/README.cobalt
@@ -0,0 +1,15 @@ +Name: promise-polyfill +Short Name: promise-polyfill +URL: https://github.com/taylorhakes/promise-polyfill +Version: 6.0.2 +Date: Nov 24, 2016 +License: MIT +License File: LICENSE +Security Critical: yes + +Description: +A pure-ES5 implementation of ES6 Promises. + +Local Modifications: +Deleted unnecessary files. +Modified to be slightly more tolerant of setTimeout missing. \ No newline at end of file
diff --git a/src/third_party/promise-polyfill/README.md b/src/third_party/promise-polyfill/README.md new file mode 100644 index 0000000..a60d646 --- /dev/null +++ b/src/third_party/promise-polyfill/README.md
@@ -0,0 +1,96 @@ +<a href="http://promises-aplus.github.com/promises-spec"> + <img src="http://promises-aplus.github.com/promises-spec/assets/logo-small.png" + align="right" alt="Promises/A+ logo" /> +</a> +# Promise Polyfill +[![travis][travis-image]][travis-url] + +[travis-image]: https://img.shields.io/travis/taylorhakes/promise-polyfill.svg?style=flat +[travis-url]: https://travis-ci.org/taylorhakes/promise-polyfill + + +Lightweight ES6 Promise polyfill for the browser and node. Adheres closely to the spec. It is a perfect polyfill IE, Firefox or any other browser that does not support native promises. + +For API information about Promises, please check out this article [HTML5Rocks article](http://www.html5rocks.com/en/tutorials/es6/promises/). + +It is extremely lightweight. ***< 1kb Gzipped*** + +## Browser Support +IE8+, Chrome, Firefox, IOS 4+, Safari 5+, Opera + +### NPM Use +``` +npm install promise-polyfill --save-exact +``` +### Bower Use +``` +bower install promise-polyfill +``` + +## Downloads + +- [Promise](https://raw.github.com/taylorhakes/promise-polyfill/master/promise.js) +- [Promise-min](https://raw.github.com/taylorhakes/promise-polyfill/master/promise.min.js) + +## Simple use +```js +import Promise from 'promise-polyfill'; + +// To add to window +if (!window.Promise) { + window.Promise = Promise; +} +``` + +then you can use like normal Promises +```js +var prom = new Promise(function(resolve, reject) { + // do a thing, possibly async, then… + + if (/* everything turned out fine */) { + resolve("Stuff worked!"); + } else { + reject(new Error("It broke")); + } +}); + +prom.then(function(result) { + // Do something when async done +}); +``` + +## Deprecations +- `Promise._setImmediateFn(<immediateFn>)` has been deprecated. Use `Promise._immediateFn = <immediateFn>;` instead. +- `Promise._setUnhandledRejectionFn(<rejectionFn>)` has been deprecated. Use `Promise._unhandledRejectionFn = <rejectionFn>` instead. +These functions will be removed in the next major version. + +## Performance +By default promise-polyfill uses `setImmediate`, but falls back to `setTimeout` for executing asynchronously. If a browser does not support `setImmediate` (IE/Edge are the only browsers with setImmediate), you may see performance issues. +Use a `setImmediate` polyfill to fix this issue. [setAsap](https://github.com/taylorhakes/setAsap) or [setImmediate](https://github.com/YuzuJS/setImmediate) work well. + +If you polyfill `window.setImmediate` or use `Promise._immediateFn = yourImmediateFn` it will be used instead of `window.setTimeout` +``` +npm install setasap --save +``` +```js +var Promise = require('promise-polyfill'); +var setAsap = require('setasap'); +Promise._immediateFn = setAsap; +``` + +## Unhandled Rejections +promise-polyfill will warn you about possibly unhandled rejections. It will show a console warning if a Promise is rejected, but no `.catch` is used. You can turn off this behavior by setting `Promise._setUnhandledRejectionFn(<rejectError>)`. +If you would like to disable unhandled rejections. Use a noop like below. +```js +Promise._unhandledRejectionFn = function(rejectError) {}; +``` + + +## Testing +``` +npm install +npm test +``` + +## License +MIT
diff --git a/src/third_party/promise-polyfill/promise.js b/src/third_party/promise-polyfill/promise.js new file mode 100644 index 0000000..63aaa54 --- /dev/null +++ b/src/third_party/promise-polyfill/promise.js
@@ -0,0 +1,233 @@ +(function (root) { + + // Store setTimeout reference so promise-polyfill will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var setTimeoutFunc = root.setTimeout; + + function noop() {} + + // Polyfill for Function.prototype.bind + function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; + } + + function Promise(fn) { + if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); + if (typeof fn !== 'function') throw new TypeError('not a function'); + this._state = 0; + this._handled = false; + this._value = undefined; + this._deferreds = []; + + doResolve(fn, this); + } + + function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (self._state === 0) { + self._deferreds.push(deferred); + return; + } + self._handled = true; + Promise._immediateFn(function () { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (self._state === 1 ? resolve : reject)(deferred.promise, self._value); + return; + } + var ret; + try { + ret = cb(self._value); + } catch (e) { + reject(deferred.promise, e); + return; + } + resolve(deferred.promise, ret); + }); + } + + function resolve(self, newValue) { + try { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.'); + if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (newValue instanceof Promise) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(bind(then, newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); + } catch (e) { + reject(self, e); + } + } + + function reject(self, newValue) { + self._state = 2; + self._value = newValue; + finale(self); + } + + function finale(self) { + if (self._state === 2 && self._deferreds.length === 0) { + Promise._immediateFn(function() { + if (!self._handled) { + Promise._unhandledRejectionFn(self._value); + } + }); + } + + for (var i = 0, len = self._deferreds.length; i < len; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; + } + + function Handler(onFulfilled, onRejected, promise) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; + } + + /** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ + function doResolve(fn, self) { + var done = false; + try { + fn(function (value) { + if (done) return; + done = true; + resolve(self, value); + }, function (reason) { + if (done) return; + done = true; + reject(self, reason); + }); + } catch (ex) { + if (done) return; + done = true; + reject(self, ex); + } + } + + Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); + }; + + Promise.prototype.then = function (onFulfilled, onRejected) { + var prom = new (this.constructor)(noop); + + handle(this, new Handler(onFulfilled, onRejected, prom)); + return prom; + }; + + Promise.all = function (arr) { + var args = Array.prototype.slice.call(arr); + + return new Promise(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + + function res(i, val) { + try { + if (val && (typeof val === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + } + + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + }; + + Promise.resolve = function (value) { + if (value && typeof value === 'object' && value.constructor === Promise) { + return value; + } + + return new Promise(function (resolve) { + resolve(value); + }); + }; + + Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); + }; + + Promise.race = function (values) { + return new Promise(function (resolve, reject) { + for (var i = 0, len = values.length; i < len; i++) { + values[i].then(resolve, reject); + } + }); + }; + + // Use polyfill for setImmediate for performance gains + Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) || + function (fn) { + setTimeoutFunc(fn, 0); + }; + + Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { + if (typeof console !== 'undefined' && console) { + console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console + } + }; + + /** + * Set the immediate function to execute callbacks + * @param fn {function} Function to execute + * @deprecated + */ + Promise._setImmediateFn = function _setImmediateFn(fn) { + Promise._immediateFn = fn; + }; + + /** + * Change the function to execute on unhandled rejection + * @param {function} fn Function to execute on unhandled rejection + * @deprecated + */ + Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) { + Promise._unhandledRejectionFn = fn; + }; + + if (typeof module !== 'undefined' && module.exports) { + module.exports = Promise; + } else if (!root.Promise) { + root.Promise = Promise; + } + +})(this);
diff --git a/src/third_party/promise-polyfill/promise.min.js b/src/third_party/promise-polyfill/promise.min.js new file mode 100644 index 0000000..1ae225e --- /dev/null +++ b/src/third_party/promise-polyfill/promise.min.js
@@ -0,0 +1 @@ +!function(e){function n(){}function t(e,n){return function(){e.apply(n,arguments)}}function o(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],s(e,this)}function i(e,n){for(;3===e._state;)e=e._value;return 0===e._state?void e._deferreds.push(n):(e._handled=!0,void o._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null===t)return void(1===e._state?r:u)(n.promise,e._value);var o;try{o=t(e._value)}catch(i){return void u(n.promise,i)}r(n.promise,o)}))}function r(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var i=n.then;if(n instanceof o)return e._state=3,e._value=n,void f(e);if("function"==typeof i)return void s(t(i,n),e)}e._state=1,e._value=n,f(e)}catch(r){u(e,r)}}function u(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;n<t;n++)i(e,e._deferreds[n]);e._deferreds=null}function c(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}function s(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,u(n,e))})}catch(o){if(t)return;t=!0,u(n,o)}}var a=e.setTimeout;o.prototype["catch"]=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var o=new this.constructor(n);return i(this,new c(e,t,o)),o},o.all=function(e){var n=Array.prototype.slice.call(e);return new o(function(e,t){function o(r,u){try{if(u&&("object"==typeof u||"function"==typeof u)){var f=u.then;if("function"==typeof f)return void f.call(u,function(e){o(r,e)},t)}n[r]=u,0===--i&&e(n)}catch(c){t(c)}}if(0===n.length)return e([]);for(var i=n.length,r=0;r<n.length;r++)o(r,n[r])})},o.resolve=function(e){return e&&"object"==typeof e&&e.constructor===o?e:new o(function(n){n(e)})},o.reject=function(e){return new o(function(n,t){t(e)})},o.race=function(e){return new o(function(n,t){for(var o=0,i=e.length;o<i;o++)e[o].then(n,t)})},o._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){a(e,0)},o._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},o._setImmediateFn=function(e){o._immediateFn=e},o._setUnhandledRejectionFn=function(e){o._unhandledRejectionFn=e},"undefined"!=typeof module&&module.exports?module.exports=o:e.Promise||(e.Promise=o)}(this); \ No newline at end of file
diff --git a/src/third_party/promise-polyfill/test/adapter.js b/src/third_party/promise-polyfill/test/adapter.js new file mode 100644 index 0000000..ca85741 --- /dev/null +++ b/src/third_party/promise-polyfill/test/adapter.js
@@ -0,0 +1,14 @@ +var Promise = require('../promise'); +module.exports = { + resolved: Promise.resolve, + rejected: Promise.rejected, + deferred: function() { + var obj = {}; + var prom = new Promise(function(resolve, reject) { + obj.resolve = resolve; + obj.reject = reject; + }); + obj.promise = prom; + return obj; + } +};
diff --git a/src/third_party/promise-polyfill/test/promise.js b/src/third_party/promise-polyfill/test/promise.js new file mode 100644 index 0000000..6d9fedc --- /dev/null +++ b/src/third_party/promise-polyfill/test/promise.js
@@ -0,0 +1,190 @@ +var Promise = require('../promise'); +var sinon = require('sinon'); +var assert = require('assert'); +var adapter = require('./adapter'); +describe("Promises/A+ Tests", function () { + require("promises-aplus-tests").mocha(adapter); +}); +describe('Promise', function () { + describe('Promise._setImmediateFn', function () { + afterEach(function() { + Promise._setImmediateFn((typeof setImmediate === 'function' && function (fn) { + setImmediate(fn); + }) || + function (fn) { + setTimeout(fn, 1); + }); + }); + it('changes immediate fn', function () { + var spy = sinon.spy(); + + function immediateFn(fn) { + spy(); + fn(); + } + Promise._setImmediateFn(immediateFn); + var done = false; + new Promise(function (resolve) { + resolve(); + }).then(function () { + done = true; + }); + assert(spy.calledOnce); + assert(done); + }); + it('changes immediate fn multiple', function () { + var spy1 = sinon.spy(); + + function immediateFn1(fn) { + spy1(); + fn(); + } + + var spy2 = sinon.spy(); + + function immediateFn2(fn) { + spy2(); + fn(); + } + + Promise._setImmediateFn(immediateFn1); + var done = false; + new Promise(function (resolve) { + resolve(); + }).then(function () { + }); + Promise._setImmediateFn(immediateFn2); + new Promise(function (resolve) { + resolve(); + }).then(function () { + done = true; + }); + assert(spy2.called); + assert(spy1.calledOnce); + assert(done); + }); + }); + describe('Promise._onUnhandledRejection', function () { + var stub, sandbox; + beforeEach(function() { + sandbox = sinon.sandbox.create(); + stub = sandbox.stub(console, 'warn'); + }); + afterEach(function() { + sandbox.restore(); + }); + it('no error on resolve', function (done) { + Promise.resolve(true).then(function(result) { + return result; + }).then(function(result) { + return result; + }); + + setTimeout(function() { + assert(!stub.called); + done(); + }, 50); + }); + it('error single Promise', function (done) { + new Promise(function(resolve, reject) { + abc.abc = 1; + }); + setTimeout(function() { + assert(stub.calledOnce); + done(); + }, 50); + }); + it('multi promise error', function (done) { + new Promise(function(resolve, reject) { + abc.abc = 1; + }).then(function(result) { + return result; + }); + setTimeout(function() { + assert(stub.calledOnce); + done(); + }, 50); + }); + it('promise catch no error', function (done) { + new Promise(function(resolve, reject) { + abc.abc = 1; + }).catch(function(result) { + return result; + }); + setTimeout(function() { + assert(!stub.called); + done(); + }, 50); + }); + it('promise catch no error', function (done) { + new Promise(function(resolve, reject) { + abc.abc = 1; + }).then(function(result) { + return result; + }).catch(function(result) { + return result; + }); + setTimeout(function() { + assert(!stub.called); + done(); + }, 50); + }); + it('promise reject error', function (done) { + Promise.reject('hello'); + setTimeout(function() { + assert(stub.calledOnce); + done(); + }, 50); + }); + it('promise reject error late', function (done) { + var prom = Promise.reject('hello'); + prom.catch(function() { + + }); + setTimeout(function() { + assert(!stub.called); + done(); + }, 50); + }); + it('promise reject error late', function (done) { + Promise.reject('hello'); + setTimeout(function() { + assert.equal(stub.args[0][1], 'hello'); + done(); + }, 50); + }); + }); + describe('Promise.prototype.then', function() { + var spy, + SubClass; + beforeEach(function() { + spy = sinon.spy(); + SubClass = function() { + spy(); + Promise.apply(this, arguments); + }; + + function __() { this.constructor = SubClass; } + __.prototype = Promise.prototype; + SubClass.prototype = new __(); + + SubClass.prototype.then = function() { + return Promise.prototype.then.apply(this, arguments); + }; + }); + it('subclassed Promise resolves to subclass', function() { + var prom = new SubClass(function(resolve) { + resolve(); + }).then(function() {}, function() {}); + assert(spy.calledTwice); + assert(prom instanceof SubClass); + }); + it('subclassed Promise rejects to subclass', function() { + var prom = new SubClass(function(_, reject) { + reject(); + }).then(function() {}, function() {}); + assert(spy.calledTwice); + assert(prom instanceof SubClass); + }); + }); +});
 \ No newline at end of file
diff --git a/src/third_party/protobuf-3/BUILD b/src/third_party/protobuf-3/BUILD new file mode 100644 index 0000000..8b1046b --- /dev/null +++ b/src/third_party/protobuf-3/BUILD
@@ -0,0 +1,709 @@ +# Bazel (http://bazel.io/) BUILD file for Protobuf. + +licenses(["notice"]) + +################################################################################ +# Protobuf Runtime Library +################################################################################ + +COPTS = [ + "-DHAVE_PTHREAD", + "-Wall", + "-Wwrite-strings", + "-Woverloaded-virtual", + "-Wno-sign-compare", + "-Wno-error=unused-function", +] + +config_setting( + name = "android", + values = { + "crosstool_top": "//external:android/crosstool", + }, +) + +# Android builds do not need to link in a separate pthread library. +LINK_OPTS = select({ + ":android": [], + "//conditions:default": ["-lpthread"], +}) + +load( + "protobuf", + "cc_proto_library", + "py_proto_library", + "internal_gen_well_known_protos_java", + "internal_protobuf_py_tests", +) + +config_setting( + name = "ios_armv7", + values = { + "ios_cpu": "armv7", + }, +) + +config_setting( + name = "ios_armv7s", + values = { + "ios_cpu": "armv7s", + }, +) + +config_setting( + name = "ios_arm64", + values = { + "ios_cpu": "arm64", + }, +) + +IOS_ARM_COPTS = COPTS + [ + "-DOS_IOS", + "-miphoneos-version-min=7.0", + "-arch armv7", + "-arch armv7s", + "-arch arm64", + "-D__thread=", + "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/", +] + +cc_library( + name = "protobuf_lite", + srcs = [ + # AUTOGEN(protobuf_lite_srcs) + "src/google/protobuf/arena.cc", + "src/google/protobuf/arenastring.cc", + "src/google/protobuf/extension_set.cc", + "src/google/protobuf/generated_message_util.cc", + "src/google/protobuf/io/coded_stream.cc", + "src/google/protobuf/io/zero_copy_stream.cc", + "src/google/protobuf/io/zero_copy_stream_impl_lite.cc", + "src/google/protobuf/message_lite.cc", + "src/google/protobuf/repeated_field.cc", + "src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc", + "src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc", + "src/google/protobuf/stubs/bytestream.cc", + "src/google/protobuf/stubs/common.cc", + "src/google/protobuf/stubs/int128.cc", + "src/google/protobuf/stubs/once.cc", + "src/google/protobuf/stubs/status.cc", + "src/google/protobuf/stubs/statusor.cc", + "src/google/protobuf/stubs/stringpiece.cc", + "src/google/protobuf/stubs/stringprintf.cc", + "src/google/protobuf/stubs/structurally_valid.cc", + "src/google/protobuf/stubs/strutil.cc", + "src/google/protobuf/stubs/time.cc", + "src/google/protobuf/wire_format_lite.cc", + ], + hdrs = glob(["src/google/protobuf/**/*.h"]), + copts = select({ + ":ios_armv7": IOS_ARM_COPTS, + ":ios_armv7s": IOS_ARM_COPTS, + ":ios_arm64": IOS_ARM_COPTS, + "//conditions:default": COPTS, + }), + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], +) + +cc_library( + name = "protobuf", + srcs = [ + # AUTOGEN(protobuf_srcs) + "src/google/protobuf/any.cc", + "src/google/protobuf/any.pb.cc", + "src/google/protobuf/api.pb.cc", + "src/google/protobuf/compiler/importer.cc", + "src/google/protobuf/compiler/parser.cc", + "src/google/protobuf/descriptor.cc", + "src/google/protobuf/descriptor.pb.cc", + "src/google/protobuf/descriptor_database.cc", + "src/google/protobuf/duration.pb.cc", + "src/google/protobuf/dynamic_message.cc", + "src/google/protobuf/empty.pb.cc", + "src/google/protobuf/extension_set_heavy.cc", + "src/google/protobuf/field_mask.pb.cc", + "src/google/protobuf/generated_message_reflection.cc", + "src/google/protobuf/io/gzip_stream.cc", + "src/google/protobuf/io/printer.cc", + "src/google/protobuf/io/strtod.cc", + "src/google/protobuf/io/tokenizer.cc", + "src/google/protobuf/io/zero_copy_stream_impl.cc", + "src/google/protobuf/map_field.cc", + "src/google/protobuf/message.cc", + "src/google/protobuf/reflection_ops.cc", + "src/google/protobuf/service.cc", + "src/google/protobuf/source_context.pb.cc", + "src/google/protobuf/struct.pb.cc", + "src/google/protobuf/stubs/mathlimits.cc", + "src/google/protobuf/stubs/substitute.cc", + "src/google/protobuf/text_format.cc", + "src/google/protobuf/timestamp.pb.cc", + "src/google/protobuf/type.pb.cc", + "src/google/protobuf/unknown_field_set.cc", + "src/google/protobuf/util/field_comparator.cc", + "src/google/protobuf/util/field_mask_util.cc", + "src/google/protobuf/util/internal/datapiece.cc", + "src/google/protobuf/util/internal/default_value_objectwriter.cc", + "src/google/protobuf/util/internal/error_listener.cc", + "src/google/protobuf/util/internal/field_mask_utility.cc", + "src/google/protobuf/util/internal/json_escaping.cc", + "src/google/protobuf/util/internal/json_objectwriter.cc", + "src/google/protobuf/util/internal/json_stream_parser.cc", + "src/google/protobuf/util/internal/object_writer.cc", + "src/google/protobuf/util/internal/proto_writer.cc", + "src/google/protobuf/util/internal/protostream_objectsource.cc", + "src/google/protobuf/util/internal/protostream_objectwriter.cc", + "src/google/protobuf/util/internal/type_info.cc", + "src/google/protobuf/util/internal/type_info_test_helper.cc", + "src/google/protobuf/util/internal/utility.cc", + "src/google/protobuf/util/json_util.cc", + "src/google/protobuf/util/message_differencer.cc", + "src/google/protobuf/util/time_util.cc", + "src/google/protobuf/util/type_resolver_util.cc", + "src/google/protobuf/wire_format.cc", + "src/google/protobuf/wrappers.pb.cc", + ], + hdrs = glob(["src/**/*.h"]), + copts = select({ + ":ios_armv7": IOS_ARM_COPTS, + ":ios_armv7s": IOS_ARM_COPTS, + ":ios_arm64": IOS_ARM_COPTS, + "//conditions:default": COPTS, + }), + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protobuf_lite"], +) + +objc_library( + name = "protobuf_objc", + hdrs = ["objectivec/GPBProtocolBuffers.h"], + includes = ["objectivec"], + non_arc_srcs = ["objectivec/GPBProtocolBuffers.m"], + visibility = ["//visibility:public"], +) + +RELATIVE_WELL_KNOWN_PROTOS = [ + # AUTOGEN(well_known_protos) + "google/protobuf/any.proto", + "google/protobuf/api.proto", + "google/protobuf/compiler/plugin.proto", + "google/protobuf/descriptor.proto", + "google/protobuf/duration.proto", + "google/protobuf/empty.proto", + "google/protobuf/field_mask.proto", + "google/protobuf/source_context.proto", + "google/protobuf/struct.proto", + "google/protobuf/timestamp.proto", + "google/protobuf/type.proto", + "google/protobuf/wrappers.proto", +] + +WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS] + +filegroup( + name = "well_known_protos", + srcs = WELL_KNOWN_PROTOS, + visibility = ["//visibility:public"], +) + +cc_proto_library( + name = "cc_wkt_protos", + srcs = WELL_KNOWN_PROTOS, + include = "src", + default_runtime = ":protobuf", + internal_bootstrap_hack = 1, + protoc = ":protoc", + visibility = ["//visibility:public"], +) + +################################################################################ +# Protocol Buffers Compiler +################################################################################ + +cc_library( + name = "protoc_lib", + srcs = [ + # AUTOGEN(protoc_lib_srcs) + "src/google/protobuf/compiler/code_generator.cc", + "src/google/protobuf/compiler/command_line_interface.cc", + "src/google/protobuf/compiler/cpp/cpp_enum.cc", + "src/google/protobuf/compiler/cpp/cpp_enum_field.cc", + "src/google/protobuf/compiler/cpp/cpp_extension.cc", + "src/google/protobuf/compiler/cpp/cpp_field.cc", + "src/google/protobuf/compiler/cpp/cpp_file.cc", + "src/google/protobuf/compiler/cpp/cpp_generator.cc", + "src/google/protobuf/compiler/cpp/cpp_helpers.cc", + "src/google/protobuf/compiler/cpp/cpp_map_field.cc", + "src/google/protobuf/compiler/cpp/cpp_message.cc", + "src/google/protobuf/compiler/cpp/cpp_message_field.cc", + "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc", + "src/google/protobuf/compiler/cpp/cpp_service.cc", + "src/google/protobuf/compiler/cpp/cpp_string_field.cc", + "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc", + "src/google/protobuf/compiler/csharp/csharp_enum.cc", + "src/google/protobuf/compiler/csharp/csharp_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_field_base.cc", + "src/google/protobuf/compiler/csharp/csharp_generator.cc", + "src/google/protobuf/compiler/csharp/csharp_helpers.cc", + "src/google/protobuf/compiler/csharp/csharp_map_field.cc", + "src/google/protobuf/compiler/csharp/csharp_message.cc", + "src/google/protobuf/compiler/csharp/csharp_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc", + "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc", + "src/google/protobuf/compiler/java/java_context.cc", + "src/google/protobuf/compiler/java/java_doc_comment.cc", + "src/google/protobuf/compiler/java/java_enum.cc", + "src/google/protobuf/compiler/java/java_enum_field.cc", + "src/google/protobuf/compiler/java/java_enum_field_lite.cc", + "src/google/protobuf/compiler/java/java_enum_lite.cc", + "src/google/protobuf/compiler/java/java_extension.cc", + "src/google/protobuf/compiler/java/java_extension_lite.cc", + "src/google/protobuf/compiler/java/java_field.cc", + "src/google/protobuf/compiler/java/java_file.cc", + "src/google/protobuf/compiler/java/java_generator.cc", + "src/google/protobuf/compiler/java/java_generator_factory.cc", + "src/google/protobuf/compiler/java/java_helpers.cc", + "src/google/protobuf/compiler/java/java_lazy_message_field.cc", + "src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_map_field.cc", + "src/google/protobuf/compiler/java/java_map_field_lite.cc", + "src/google/protobuf/compiler/java/java_message.cc", + "src/google/protobuf/compiler/java/java_message_builder.cc", + "src/google/protobuf/compiler/java/java_message_builder_lite.cc", + "src/google/protobuf/compiler/java/java_message_field.cc", + "src/google/protobuf/compiler/java/java_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_message_lite.cc", + "src/google/protobuf/compiler/java/java_name_resolver.cc", + "src/google/protobuf/compiler/java/java_primitive_field.cc", + "src/google/protobuf/compiler/java/java_primitive_field_lite.cc", + "src/google/protobuf/compiler/java/java_service.cc", + "src/google/protobuf/compiler/java/java_shared_code_generator.cc", + "src/google/protobuf/compiler/java/java_string_field.cc", + "src/google/protobuf/compiler/java/java_string_field_lite.cc", + "src/google/protobuf/compiler/javanano/javanano_enum.cc", + "src/google/protobuf/compiler/javanano/javanano_enum_field.cc", + "src/google/protobuf/compiler/javanano/javanano_extension.cc", + "src/google/protobuf/compiler/javanano/javanano_field.cc", + "src/google/protobuf/compiler/javanano/javanano_file.cc", + "src/google/protobuf/compiler/javanano/javanano_generator.cc", + "src/google/protobuf/compiler/javanano/javanano_helpers.cc", + "src/google/protobuf/compiler/javanano/javanano_map_field.cc", + "src/google/protobuf/compiler/javanano/javanano_message.cc", + "src/google/protobuf/compiler/javanano/javanano_message_field.cc", + "src/google/protobuf/compiler/javanano/javanano_primitive_field.cc", + "src/google/protobuf/compiler/js/js_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_extension.cc", + "src/google/protobuf/compiler/objectivec/objectivec_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_file.cc", + "src/google/protobuf/compiler/objectivec/objectivec_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc", + "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc", + "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc", + "src/google/protobuf/compiler/plugin.cc", + "src/google/protobuf/compiler/plugin.pb.cc", + "src/google/protobuf/compiler/python/python_generator.cc", + "src/google/protobuf/compiler/ruby/ruby_generator.cc", + "src/google/protobuf/compiler/subprocess.cc", + "src/google/protobuf/compiler/zip_writer.cc", + ], + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protobuf"], +) + +cc_binary( + name = "protoc", + srcs = ["src/google/protobuf/compiler/main.cc"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protoc_lib"], +) + +################################################################################ +# Tests +################################################################################ + +RELATIVE_LITE_TEST_PROTOS = [ + # AUTOGEN(lite_test_protos) + "google/protobuf/map_lite_unittest.proto", + "google/protobuf/unittest_import_lite.proto", + "google/protobuf/unittest_import_public_lite.proto", + "google/protobuf/unittest_lite.proto", + "google/protobuf/unittest_no_arena_lite.proto", +] + +LITE_TEST_PROTOS = ["src/" + s for s in RELATIVE_LITE_TEST_PROTOS] + +RELATIVE_TEST_PROTOS = [ + # AUTOGEN(test_protos) + "google/protobuf/any_test.proto", + "google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto", + "google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto", + "google/protobuf/map_proto2_unittest.proto", + "google/protobuf/map_unittest.proto", + "google/protobuf/unittest.proto", + "google/protobuf/unittest_arena.proto", + "google/protobuf/unittest_custom_options.proto", + "google/protobuf/unittest_drop_unknown_fields.proto", + "google/protobuf/unittest_embed_optimize_for.proto", + "google/protobuf/unittest_empty.proto", + "google/protobuf/unittest_enormous_descriptor.proto", + "google/protobuf/unittest_import.proto", + "google/protobuf/unittest_import_public.proto", + "google/protobuf/unittest_lite_imports_nonlite.proto", + "google/protobuf/unittest_mset.proto", + "google/protobuf/unittest_mset_wire_format.proto", + "google/protobuf/unittest_no_arena.proto", + "google/protobuf/unittest_no_arena_import.proto", + "google/protobuf/unittest_no_field_presence.proto", + "google/protobuf/unittest_no_generic_services.proto", + "google/protobuf/unittest_optimize_for.proto", + "google/protobuf/unittest_preserve_unknown_enum.proto", + "google/protobuf/unittest_preserve_unknown_enum2.proto", + "google/protobuf/unittest_proto3_arena.proto", + "google/protobuf/unittest_proto3_arena_lite.proto", + "google/protobuf/unittest_proto3_lite.proto", + "google/protobuf/unittest_well_known_types.proto", + "google/protobuf/util/internal/testdata/anys.proto", + "google/protobuf/util/internal/testdata/books.proto", + "google/protobuf/util/internal/testdata/default_value.proto", + "google/protobuf/util/internal/testdata/default_value_test.proto", + "google/protobuf/util/internal/testdata/field_mask.proto", + "google/protobuf/util/internal/testdata/maps.proto", + "google/protobuf/util/internal/testdata/oneofs.proto", + "google/protobuf/util/internal/testdata/struct.proto", + "google/protobuf/util/internal/testdata/timestamp_duration.proto", + "google/protobuf/util/json_format_proto3.proto", + "google/protobuf/util/message_differencer_unittest.proto", +] + +TEST_PROTOS = ["src/" + s for s in RELATIVE_TEST_PROTOS] + +cc_proto_library( + name = "cc_test_protos", + srcs = LITE_TEST_PROTOS + TEST_PROTOS, + include = "src", + default_runtime = ":protobuf", + protoc = ":protoc", + deps = [":cc_wkt_protos"], +) + +COMMON_TEST_SRCS = [ + # AUTOGEN(common_test_srcs) + "src/google/protobuf/arena_test_util.cc", + "src/google/protobuf/map_test_util.cc", + "src/google/protobuf/test_util.cc", + "src/google/protobuf/testing/file.cc", + "src/google/protobuf/testing/googletest.cc", +] + +cc_binary( + name = "test_plugin", + srcs = [ + # AUTOGEN(test_plugin_srcs) + "src/google/protobuf/compiler/mock_code_generator.cc", + "src/google/protobuf/compiler/test_plugin.cc", + "src/google/protobuf/testing/file.cc", + ], + deps = [ + ":protobuf", + ":protoc_lib", + "//external:gtest", + ], +) + +cc_test( + name = "protobuf_test", + srcs = COMMON_TEST_SRCS + [ + # AUTOGEN(test_srcs) + "src/google/protobuf/any_test.cc", + "src/google/protobuf/arena_unittest.cc", + "src/google/protobuf/arenastring_unittest.cc", + "src/google/protobuf/compiler/command_line_interface_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_unittest.cc", + "src/google/protobuf/compiler/cpp/metadata_test.cc", + "src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc", + "src/google/protobuf/compiler/importer_unittest.cc", + "src/google/protobuf/compiler/java/java_doc_comment_unittest.cc", + "src/google/protobuf/compiler/java/java_plugin_unittest.cc", + "src/google/protobuf/compiler/mock_code_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc", + "src/google/protobuf/compiler/parser_unittest.cc", + "src/google/protobuf/compiler/python/python_plugin_unittest.cc", + "src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc", + "src/google/protobuf/descriptor_database_unittest.cc", + "src/google/protobuf/descriptor_unittest.cc", + "src/google/protobuf/drop_unknown_fields_test.cc", + "src/google/protobuf/dynamic_message_unittest.cc", + "src/google/protobuf/extension_set_unittest.cc", + "src/google/protobuf/generated_message_reflection_unittest.cc", + "src/google/protobuf/io/coded_stream_unittest.cc", + "src/google/protobuf/io/printer_unittest.cc", + "src/google/protobuf/io/tokenizer_unittest.cc", + "src/google/protobuf/io/zero_copy_stream_unittest.cc", + "src/google/protobuf/map_field_test.cc", + "src/google/protobuf/map_test.cc", + "src/google/protobuf/message_unittest.cc", + "src/google/protobuf/no_field_presence_test.cc", + "src/google/protobuf/preserve_unknown_enum_test.cc", + "src/google/protobuf/proto3_arena_lite_unittest.cc", + "src/google/protobuf/proto3_arena_unittest.cc", + "src/google/protobuf/proto3_lite_unittest.cc", + "src/google/protobuf/reflection_ops_unittest.cc", + "src/google/protobuf/repeated_field_reflection_unittest.cc", + "src/google/protobuf/repeated_field_unittest.cc", + "src/google/protobuf/stubs/bytestream_unittest.cc", + "src/google/protobuf/stubs/common_unittest.cc", + "src/google/protobuf/stubs/int128_unittest.cc", + "src/google/protobuf/stubs/once_unittest.cc", + "src/google/protobuf/stubs/status_test.cc", + "src/google/protobuf/stubs/statusor_test.cc", + "src/google/protobuf/stubs/stringpiece_unittest.cc", + "src/google/protobuf/stubs/stringprintf_unittest.cc", + "src/google/protobuf/stubs/structurally_valid_unittest.cc", + "src/google/protobuf/stubs/strutil_unittest.cc", + "src/google/protobuf/stubs/template_util_unittest.cc", + "src/google/protobuf/stubs/time_test.cc", + "src/google/protobuf/stubs/type_traits_unittest.cc", + "src/google/protobuf/text_format_unittest.cc", + "src/google/protobuf/unknown_field_set_unittest.cc", + "src/google/protobuf/util/field_comparator_test.cc", + "src/google/protobuf/util/field_mask_util_test.cc", + "src/google/protobuf/util/internal/default_value_objectwriter_test.cc", + "src/google/protobuf/util/internal/json_objectwriter_test.cc", + "src/google/protobuf/util/internal/json_stream_parser_test.cc", + "src/google/protobuf/util/internal/protostream_objectsource_test.cc", + "src/google/protobuf/util/internal/protostream_objectwriter_test.cc", + "src/google/protobuf/util/internal/type_info_test_helper.cc", + "src/google/protobuf/util/json_util_test.cc", + "src/google/protobuf/util/message_differencer_unittest.cc", + "src/google/protobuf/util/time_util_test.cc", + "src/google/protobuf/util/type_resolver_util_test.cc", + "src/google/protobuf/well_known_types_unittest.cc", + "src/google/protobuf/wire_format_unittest.cc", + ], + copts = COPTS, + data = [ + ":test_plugin", + ] + glob([ + "src/google/protobuf/**/*", + ]), + includes = [ + "src/", + ], + linkopts = LINK_OPTS, + deps = [ + ":cc_test_protos", + ":protobuf", + ":protoc_lib", + "//external:gtest_main", + ], +) + +################################################################################ +# Java support +################################################################################ +internal_gen_well_known_protos_java( + srcs = WELL_KNOWN_PROTOS, +) + +java_library( + name = "protobuf_java", + srcs = glob([ + "java/core/src/main/java/com/google/protobuf/*.java", + ]) + [ + ":gen_well_known_protos_java", + ], + visibility = ["//visibility:public"], +) + +java_library( + name = "protobuf_java_util", + srcs = glob([ + "java/util/src/main/java/com/google/protobuf/util/*.java", + ]), + deps = [ + "protobuf_java", + "//external:gson", + "//external:guava", + ], + visibility = ["//visibility:public"], +) + +################################################################################ +# Python support +################################################################################ + +py_library( + name = "python_srcs", + srcs = glob( + [ + "python/google/protobuf/*.py", + "python/google/protobuf/**/*.py", + ], + exclude = [ + "python/google/protobuf/internal/*_test.py", + "python/google/protobuf/internal/test_util.py", + ], + ), + srcs_version = "PY2AND3", + imports = ["python"], +) + +cc_binary( + name = "internal/_api_implementation.so", + srcs = ["python/google/protobuf/internal/api_implementation.cc"], + copts = COPTS + [ + "-DPYTHON_PROTO2_CPP_IMPL_V2", + ], + linkshared = 1, + linkstatic = 1, + deps = select({ + "//conditions:default": [], + ":use_fast_cpp_protos": ["//external:python_headers"], + }), +) + +cc_binary( + name = "pyext/_message.so", + srcs = glob([ + "python/google/protobuf/pyext/*.cc", + "python/google/protobuf/pyext/*.h", + ]), + copts = COPTS + [ + "-DGOOGLE_PROTOBUF_HAS_ONEOF=1", + ] + select({ + "//conditions:default": [], + ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"], + }), + includes = [ + "python/", + "src/", + ], + linkshared = 1, + linkstatic = 1, + deps = [ + ":protobuf", + ] + select({ + "//conditions:default": [], + ":use_fast_cpp_protos": ["//external:python_headers"], + }), +) + +config_setting( + name = "use_fast_cpp_protos", + values = { + "define": "use_fast_cpp_protos=true", + }, +) + +config_setting( + name = "allow_oversize_protos", + values = { + "define": "allow_oversize_protos=true", + }, +) + +py_proto_library( + name = "protobuf_python", + srcs = WELL_KNOWN_PROTOS, + include = "src", + data = select({ + "//conditions:default": [], + ":use_fast_cpp_protos": [ + ":internal/_api_implementation.so", + ":pyext/_message.so", + ], + }), + default_runtime = "", + protoc = ":protoc", + py_libs = [ + ":python_srcs", + "//external:six" + ], + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) + +py_proto_library( + name = "python_common_test_protos", + srcs = LITE_TEST_PROTOS + TEST_PROTOS, + include = "src", + default_runtime = "", + protoc = ":protoc", + srcs_version = "PY2AND3", + deps = [":protobuf_python"], +) + +py_proto_library( + name = "python_specific_test_protos", + srcs = glob([ + "python/google/protobuf/internal/*.proto", + "python/google/protobuf/internal/import_test_package/*.proto", + ]), + include = "python", + default_runtime = ":protobuf_python", + protoc = ":protoc", + srcs_version = "PY2AND3", + deps = [":python_common_test_protos"], +) + +py_library( + name = "python_tests", + srcs = glob( + [ + "python/google/protobuf/internal/*_test.py", + "python/google/protobuf/internal/test_util.py", + ], + ), + imports = ["python"], + srcs_version = "PY2AND3", + deps = [ + ":protobuf_python", + ":python_common_test_protos", + ":python_specific_test_protos", + ], +) + +internal_protobuf_py_tests( + name = "python_tests_batch", + data = glob([ + "src/google/protobuf/**/*", + ]), + modules = [ + "descriptor_database_test", + "descriptor_pool_test", + "descriptor_test", + "generator_test", + "json_format_test", + "message_factory_test", + "message_test", + "proto_builder_test", + "reflection_test", + "service_reflection_test", + "symbol_database_test", + "text_encoding_test", + "text_format_test", + "unknown_fields_test", + "wire_format_test", + ], + deps = [":python_tests"], +)
diff --git a/src/third_party/protobuf-3/BUILD.gn b/src/third_party/protobuf-3/BUILD.gn new file mode 100644 index 0000000..84c916a --- /dev/null +++ b/src/third_party/protobuf-3/BUILD.gn
@@ -0,0 +1,652 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +config("protobuf_config") { + include_dirs = [ "src" ] + defines = [ + "GOOGLE_PROTOBUF_NO_RTTI", + "GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER", + ] + if (!is_win) { + defines += [ "HAVE_PTHREAD" ] + } +} + +config("protobuf_warnings") { + cflags = [] + if (is_clang) { + # protobuf-3 contains a few functions that are unused. + cflags += [ "-Wno-unused-function" ] + } +} + +if (is_component_build) { + config("protobuf_use_dlls") { + defines = [ "PROTOBUF_USE_DLLS" ] + } +} + +# This config should be applied to targets using generated code from the proto +# compiler. It sets up the include directories properly. +config("using_proto") { + include_dirs = [ + "src", + "$root_gen_dir/protoc_out", + ] +} + +protobuf_lite_sources = [ + "src/google/protobuf/arena.cc", + "src/google/protobuf/arena.h", + "src/google/protobuf/arenastring.cc", + "src/google/protobuf/arenastring.h", + "src/google/protobuf/extension_set.cc", + "src/google/protobuf/extension_set.h", + "src/google/protobuf/generated_message_util.cc", + "src/google/protobuf/generated_message_util.h", + "src/google/protobuf/io/coded_stream.cc", + "src/google/protobuf/io/coded_stream.h", + "src/google/protobuf/io/coded_stream_inl.h", + "src/google/protobuf/io/zero_copy_stream.cc", + "src/google/protobuf/io/zero_copy_stream.h", + "src/google/protobuf/io/zero_copy_stream_impl_lite.cc", + "src/google/protobuf/io/zero_copy_stream_impl_lite.h", + "src/google/protobuf/map.h", + "src/google/protobuf/map_entry_lite.h", + "src/google/protobuf/map_field_lite.h", + "src/google/protobuf/map_type_handler.h", + "src/google/protobuf/message_lite.cc", + "src/google/protobuf/message_lite.h", + "src/google/protobuf/repeated_field.cc", + "src/google/protobuf/repeated_field.h", + "src/google/protobuf/stubs/atomicops.h", + "src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h", + "src/google/protobuf/stubs/atomicops_internals_arm_gcc.h", + "src/google/protobuf/stubs/atomicops_internals_arm_qnx.h", + "src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h", + "src/google/protobuf/stubs/atomicops_internals_generic_gcc.h", + "src/google/protobuf/stubs/atomicops_internals_macosx.h", + "src/google/protobuf/stubs/atomicops_internals_mips_gcc.h", + "src/google/protobuf/stubs/atomicops_internals_pnacl.h", + "src/google/protobuf/stubs/atomicops_internals_power.h", + "src/google/protobuf/stubs/atomicops_internals_ppc_gcc.h", + "src/google/protobuf/stubs/atomicops_internals_solaris.h", + "src/google/protobuf/stubs/atomicops_internals_tsan.h", + "src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc", + "src/google/protobuf/stubs/atomicops_internals_x86_gcc.h", + "src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc", + "src/google/protobuf/stubs/atomicops_internals_x86_msvc.h", + "src/google/protobuf/stubs/atomic_sequence_num.h", + "src/google/protobuf/stubs/bytestream.cc", + "src/google/protobuf/stubs/bytestream.h", + "src/google/protobuf/stubs/callback.h", + "src/google/protobuf/stubs/casts.h", + "src/google/protobuf/stubs/common.cc", + "src/google/protobuf/stubs/common.h", + "src/google/protobuf/stubs/fastmem.h", + "src/google/protobuf/stubs/hash.h", + "src/google/protobuf/stubs/int128.cc", + "src/google/protobuf/stubs/int128.h", + "src/google/protobuf/stubs/logging.h", + "src/google/protobuf/stubs/macros.h", + "src/google/protobuf/stubs/map_util.h", + "src/google/protobuf/stubs/mutex.h", + "src/google/protobuf/stubs/once.cc", + "src/google/protobuf/stubs/once.h", + "src/google/protobuf/stubs/platform_macros.h", + "src/google/protobuf/stubs/port.h", + "src/google/protobuf/stubs/scoped_ptr.h", + "src/google/protobuf/stubs/shared_ptr.h", + "src/google/protobuf/stubs/status.cc", + "src/google/protobuf/stubs/status.h", + "src/google/protobuf/stubs/status_macros.h", + "src/google/protobuf/stubs/statusor.cc", + "src/google/protobuf/stubs/statusor.h", + "src/google/protobuf/stubs/stl_util.h", + "src/google/protobuf/stubs/stringpiece.cc", + "src/google/protobuf/stubs/stringpiece.h", + "src/google/protobuf/stubs/stringprintf.cc", + "src/google/protobuf/stubs/stringprintf.h", + "src/google/protobuf/stubs/structurally_valid.cc", + "src/google/protobuf/stubs/strutil.cc", + "src/google/protobuf/stubs/strutil.h", + "src/google/protobuf/stubs/template_util.h", + "src/google/protobuf/stubs/type_traits.h", + "src/google/protobuf/stubs/time.cc", + "src/google/protobuf/stubs/time.h", + "src/google/protobuf/wire_format_lite.cc", + "src/google/protobuf/wire_format_lite.h", + "src/google/protobuf/wire_format_lite_inl.h", +] + +protobuf_lite_cflags = [] +if (is_win) { + protobuf_lite_cflags = [ + "/wd4018", # signed/unsigned mismatch in comparison + "/wd4065", # switch statement contains 'default' but no 'case' labels + "/wd4146", # unary minus operator applied to unsigned type + "/wd4244", # implicit conversion, possible loss of data + "/wd4267", # size_t to int truncation + "/wd4291", # no matching operator delete for a placement new. + "/wd4305", # double to float truncation + "/wd4355", # 'this' used in base member initializer list + "/wd4506", # no definition for inline function (protobuf issue #240) + "/wd4715", # not all control paths return a value (fixed in trunk) + ] +} + +component("protobuf_lite") { + sources = protobuf_lite_sources + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", + + # Must be after no_chromium_code for warning flags to be ordered + # correctly. + ":protobuf_warnings", + ] + + if (is_win) { + configs -= [ "//build/config/win:lean_and_mean" ] + } + + public_configs = [ + ":protobuf_config", + + # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. + "//build/config/compiler:no_size_t_to_int_warning", + ] + + deps = [ + "//build/config/sanitizers:deps", + ] + + cflags = protobuf_lite_cflags + + # Required for component builds. See http://crbug.com/172800. + if (is_component_build) { + public_configs += [ ":protobuf_use_dlls" ] + defines = [ "LIBPROTOBUF_EXPORTS" ] + } +} + +# This is the full, heavy protobuf lib that's needed for c++ .protos that don't +# specify the LITE_RUNTIME option. The protocol compiler itself (protoc) falls +# into that category. Do not use in Chrome code. +static_library("protobuf_full") { + # Prevent people from depending on this outside our file. + visibility = [ ":*" ] + + sources = protobuf_lite_sources + sources += [ + "src/google/protobuf/any.cc", + "src/google/protobuf/any.h", + "src/google/protobuf/any.pb.cc", + "src/google/protobuf/any.pb.h", + "src/google/protobuf/api.pb.cc", + "src/google/protobuf/api.pb.h", + "src/google/protobuf/compiler/importer.cc", + "src/google/protobuf/compiler/importer.h", + "src/google/protobuf/compiler/parser.cc", + "src/google/protobuf/compiler/parser.h", + "src/google/protobuf/descriptor.cc", + "src/google/protobuf/descriptor.h", + "src/google/protobuf/descriptor.pb.cc", + "src/google/protobuf/descriptor.pb.h", + "src/google/protobuf/descriptor_database.cc", + "src/google/protobuf/descriptor_database.h", + "src/google/protobuf/duration.pb.cc", + "src/google/protobuf/duration.pb.h", + "src/google/protobuf/dynamic_message.cc", + "src/google/protobuf/dynamic_message.h", + "src/google/protobuf/empty.pb.cc", + "src/google/protobuf/empty.pb.h", + "src/google/protobuf/extension_set_heavy.cc", + "src/google/protobuf/field_mask.pb.cc", + "src/google/protobuf/field_mask.pb.h", + "src/google/protobuf/generated_enum_reflection.h", + "src/google/protobuf/generated_enum_util.h", + "src/google/protobuf/generated_message_reflection.cc", + "src/google/protobuf/generated_message_reflection.h", + + # gzip_stream.cc pulls in zlib, but it's not actually used by protoc, just + # by test code, so instead of compiling zlib for the host, let's just + # exclude this. + # "src/google/protobuf/io/gzip_stream.cc", + # "src/google/protobuf/io/gzip_stream.h", + + "src/google/protobuf/io/printer.cc", + "src/google/protobuf/io/printer.h", + "src/google/protobuf/io/strtod.cc", + "src/google/protobuf/io/strtod.h", + "src/google/protobuf/io/tokenizer.cc", + "src/google/protobuf/io/tokenizer.h", + "src/google/protobuf/io/zero_copy_stream_impl.cc", + "src/google/protobuf/io/zero_copy_stream_impl.h", + "src/google/protobuf/map_entry.h", + "src/google/protobuf/map_field.cc", + "src/google/protobuf/map_field.h", + "src/google/protobuf/map_field_inl.h", + "src/google/protobuf/message.cc", + "src/google/protobuf/message.h", + "src/google/protobuf/metadata.h", + "src/google/protobuf/reflection.h", + "src/google/protobuf/reflection_internal.h", + "src/google/protobuf/reflection_ops.cc", + "src/google/protobuf/reflection_ops.h", + "src/google/protobuf/service.cc", + "src/google/protobuf/service.h", + "src/google/protobuf/source_context.pb.cc", + "src/google/protobuf/source_context.pb.h", + "src/google/protobuf/struct.pb.cc", + "src/google/protobuf/struct.pb.h", + "src/google/protobuf/stubs/mathlimits.cc", + "src/google/protobuf/stubs/mathlimits.h", + "src/google/protobuf/stubs/mathutil.h", + "src/google/protobuf/stubs/singleton.h", + "src/google/protobuf/stubs/substitute.cc", + "src/google/protobuf/stubs/substitute.h", + "src/google/protobuf/text_format.cc", + "src/google/protobuf/text_format.h", + "src/google/protobuf/timestamp.pb.cc", + "src/google/protobuf/timestamp.pb.h", + "src/google/protobuf/type.pb.cc", + "src/google/protobuf/type.pb.h", + "src/google/protobuf/unknown_field_set.cc", + "src/google/protobuf/unknown_field_set.h", + "src/google/protobuf/util/field_comparator.cc", + "src/google/protobuf/util/field_comparator.h", + "src/google/protobuf/util/field_mask_util.cc", + "src/google/protobuf/util/field_mask_util.h", + "src/google/protobuf/util/internal/constants.h", + "src/google/protobuf/util/internal/datapiece.cc", + "src/google/protobuf/util/internal/datapiece.h", + "src/google/protobuf/util/internal/default_value_objectwriter.cc", + "src/google/protobuf/util/internal/default_value_objectwriter.h", + "src/google/protobuf/util/internal/error_listener.cc", + "src/google/protobuf/util/internal/error_listener.h", + "src/google/protobuf/util/internal/field_mask_utility.cc", + "src/google/protobuf/util/internal/field_mask_utility.h", + "src/google/protobuf/util/internal/json_escaping.cc", + "src/google/protobuf/util/internal/json_escaping.h", + "src/google/protobuf/util/internal/json_objectwriter.cc", + "src/google/protobuf/util/internal/json_objectwriter.h", + "src/google/protobuf/util/internal/json_stream_parser.cc", + "src/google/protobuf/util/internal/json_stream_parser.h", + "src/google/protobuf/util/internal/location_tracker.h", + "src/google/protobuf/util/internal/object_location_tracker.h", + "src/google/protobuf/util/internal/object_source.h", + "src/google/protobuf/util/internal/object_writer.cc", + "src/google/protobuf/util/internal/object_writer.h", + "src/google/protobuf/util/internal/proto_writer.cc", + "src/google/protobuf/util/internal/proto_writer.h", + "src/google/protobuf/util/internal/protostream_objectsource.cc", + "src/google/protobuf/util/internal/protostream_objectsource.h", + "src/google/protobuf/util/internal/protostream_objectwriter.cc", + "src/google/protobuf/util/internal/protostream_objectwriter.h", + "src/google/protobuf/util/internal/structured_objectwriter.h", + "src/google/protobuf/util/internal/type_info.cc", + "src/google/protobuf/util/internal/type_info.h", + "src/google/protobuf/util/internal/type_info_test_helper.cc", + "src/google/protobuf/util/internal/type_info_test_helper.h", + "src/google/protobuf/util/internal/utility.cc", + "src/google/protobuf/util/internal/utility.h", + "src/google/protobuf/util/json_util.cc", + "src/google/protobuf/util/json_util.h", + "src/google/protobuf/util/message_differencer.cc", + "src/google/protobuf/util/message_differencer.h", + "src/google/protobuf/util/time_util.cc", + "src/google/protobuf/util/time_util.h", + "src/google/protobuf/util/type_resolver.h", + "src/google/protobuf/util/type_resolver_util.cc", + "src/google/protobuf/util/type_resolver_util.h", + "src/google/protobuf/wire_format.cc", + "src/google/protobuf/wire_format.h", + "src/google/protobuf/wrappers.pb.cc", + "src/google/protobuf/wrappers.pb.h", + ] + + deps = [ + "//build/config/sanitizers:deps", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", + + # Must be after no_chromium_code for warning flags to be ordered + # correctly. + ":protobuf_warnings", + ] + if (is_win) { + configs -= [ "//build/config/win:lean_and_mean" ] + } + public_configs = [ + ":protobuf_config", + + # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. + "//build/config/compiler:no_size_t_to_int_warning", + ] + + cflags = protobuf_lite_cflags +} + +# Only compile the compiler for the host architecture. +if (current_toolchain == host_toolchain) { + # protoc compiler is separated into protoc library and executable targets to + # support protoc plugins that need to link libprotoc, but not the main() + # itself. See src/google/protobuf/compiler/plugin.h + static_library("protoc_lib") { + sources = [ + "src/google/protobuf/compiler/code_generator.cc", + "src/google/protobuf/compiler/code_generator.h", + "src/google/protobuf/compiler/command_line_interface.cc", + "src/google/protobuf/compiler/command_line_interface.h", + "src/google/protobuf/compiler/cpp/cpp_enum.cc", + "src/google/protobuf/compiler/cpp/cpp_enum.h", + "src/google/protobuf/compiler/cpp/cpp_enum_field.cc", + "src/google/protobuf/compiler/cpp/cpp_enum_field.h", + "src/google/protobuf/compiler/cpp/cpp_extension.cc", + "src/google/protobuf/compiler/cpp/cpp_extension.h", + "src/google/protobuf/compiler/cpp/cpp_field.cc", + "src/google/protobuf/compiler/cpp/cpp_field.h", + "src/google/protobuf/compiler/cpp/cpp_file.cc", + "src/google/protobuf/compiler/cpp/cpp_file.h", + "src/google/protobuf/compiler/cpp/cpp_generator.cc", + "src/google/protobuf/compiler/cpp/cpp_generator.h", + "src/google/protobuf/compiler/cpp/cpp_helpers.cc", + "src/google/protobuf/compiler/cpp/cpp_helpers.h", + "src/google/protobuf/compiler/cpp/cpp_map_field.cc", + "src/google/protobuf/compiler/cpp/cpp_map_field.h", + "src/google/protobuf/compiler/cpp/cpp_message.cc", + "src/google/protobuf/compiler/cpp/cpp_message.h", + "src/google/protobuf/compiler/cpp/cpp_message_field.cc", + "src/google/protobuf/compiler/cpp/cpp_message_field.h", + "src/google/protobuf/compiler/cpp/cpp_options.h", + "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc", + "src/google/protobuf/compiler/cpp/cpp_primitive_field.h", + "src/google/protobuf/compiler/cpp/cpp_service.cc", + "src/google/protobuf/compiler/cpp/cpp_service.h", + "src/google/protobuf/compiler/cpp/cpp_string_field.cc", + "src/google/protobuf/compiler/cpp/cpp_string_field.h", + "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc", + "src/google/protobuf/compiler/csharp/csharp_doc_comment.h", + "src/google/protobuf/compiler/csharp/csharp_enum.cc", + "src/google/protobuf/compiler/csharp/csharp_enum.h", + "src/google/protobuf/compiler/csharp/csharp_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_enum_field.h", + "src/google/protobuf/compiler/csharp/csharp_field_base.cc", + "src/google/protobuf/compiler/csharp/csharp_field_base.h", + "src/google/protobuf/compiler/csharp/csharp_generator.cc", + "src/google/protobuf/compiler/csharp/csharp_generator.h", + "src/google/protobuf/compiler/csharp/csharp_helpers.cc", + "src/google/protobuf/compiler/csharp/csharp_helpers.h", + "src/google/protobuf/compiler/csharp/csharp_map_field.cc", + "src/google/protobuf/compiler/csharp/csharp_map_field.h", + "src/google/protobuf/compiler/csharp/csharp_message.cc", + "src/google/protobuf/compiler/csharp/csharp_message.h", + "src/google/protobuf/compiler/csharp/csharp_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_message_field.h", + "src/google/protobuf/compiler/csharp/csharp_options.h", + "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_primitive_field.h", + "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc", + "src/google/protobuf/compiler/csharp/csharp_reflection_class.h", + "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.h", + "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.h", + "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h", + "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc", + "src/google/protobuf/compiler/csharp/csharp_source_generator_base.h", + "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc", + "src/google/protobuf/compiler/csharp/csharp_wrapper_field.h", + "src/google/protobuf/compiler/java/java_context.cc", + "src/google/protobuf/compiler/java/java_context.h", + "src/google/protobuf/compiler/java/java_doc_comment.cc", + "src/google/protobuf/compiler/java/java_doc_comment.h", + "src/google/protobuf/compiler/java/java_enum.cc", + "src/google/protobuf/compiler/java/java_enum.h", + "src/google/protobuf/compiler/java/java_enum_field.cc", + "src/google/protobuf/compiler/java/java_enum_field.h", + "src/google/protobuf/compiler/java/java_enum_field_lite.cc", + "src/google/protobuf/compiler/java/java_enum_field_lite.h", + "src/google/protobuf/compiler/java/java_enum_lite.cc", + "src/google/protobuf/compiler/java/java_enum_lite.h", + "src/google/protobuf/compiler/java/java_extension.cc", + "src/google/protobuf/compiler/java/java_extension.h", + "src/google/protobuf/compiler/java/java_extension_lite.cc", + "src/google/protobuf/compiler/java/java_extension_lite.h", + "src/google/protobuf/compiler/java/java_field.cc", + "src/google/protobuf/compiler/java/java_field.h", + "src/google/protobuf/compiler/java/java_file.cc", + "src/google/protobuf/compiler/java/java_file.h", + "src/google/protobuf/compiler/java/java_generator.cc", + "src/google/protobuf/compiler/java/java_generator.h", + "src/google/protobuf/compiler/java/java_generator_factory.cc", + "src/google/protobuf/compiler/java/java_generator_factory.h", + "src/google/protobuf/compiler/java/java_helpers.cc", + "src/google/protobuf/compiler/java/java_helpers.h", + "src/google/protobuf/compiler/java/java_lazy_message_field.cc", + "src/google/protobuf/compiler/java/java_lazy_message_field.h", + "src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_lazy_message_field_lite.h", + "src/google/protobuf/compiler/java/java_map_field.cc", + "src/google/protobuf/compiler/java/java_map_field.h", + "src/google/protobuf/compiler/java/java_map_field_lite.cc", + "src/google/protobuf/compiler/java/java_map_field_lite.h", + "src/google/protobuf/compiler/java/java_message.cc", + "src/google/protobuf/compiler/java/java_message.h", + "src/google/protobuf/compiler/java/java_message_builder.cc", + "src/google/protobuf/compiler/java/java_message_builder.h", + "src/google/protobuf/compiler/java/java_message_builder_lite.cc", + "src/google/protobuf/compiler/java/java_message_builder_lite.h", + "src/google/protobuf/compiler/java/java_message_field.cc", + "src/google/protobuf/compiler/java/java_message_field.h", + "src/google/protobuf/compiler/java/java_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_message_field_lite.h", + "src/google/protobuf/compiler/java/java_message_lite.cc", + "src/google/protobuf/compiler/java/java_message_lite.h", + "src/google/protobuf/compiler/java/java_name_resolver.cc", + "src/google/protobuf/compiler/java/java_name_resolver.h", + "src/google/protobuf/compiler/java/java_primitive_field.cc", + "src/google/protobuf/compiler/java/java_primitive_field.h", + "src/google/protobuf/compiler/java/java_primitive_field_lite.cc", + "src/google/protobuf/compiler/java/java_primitive_field_lite.h", + "src/google/protobuf/compiler/java/java_service.cc", + "src/google/protobuf/compiler/java/java_service.h", + "src/google/protobuf/compiler/java/java_shared_code_generator.cc", + "src/google/protobuf/compiler/java/java_shared_code_generator.h", + "src/google/protobuf/compiler/java/java_string_field.cc", + "src/google/protobuf/compiler/java/java_string_field.h", + "src/google/protobuf/compiler/java/java_string_field_lite.cc", + "src/google/protobuf/compiler/java/java_string_field_lite.h", + "src/google/protobuf/compiler/javanano/javanano_enum.cc", + "src/google/protobuf/compiler/javanano/javanano_enum.h", + "src/google/protobuf/compiler/javanano/javanano_enum_field.cc", + "src/google/protobuf/compiler/javanano/javanano_enum_field.h", + "src/google/protobuf/compiler/javanano/javanano_extension.cc", + "src/google/protobuf/compiler/javanano/javanano_extension.h", + "src/google/protobuf/compiler/javanano/javanano_field.cc", + "src/google/protobuf/compiler/javanano/javanano_field.h", + "src/google/protobuf/compiler/javanano/javanano_file.cc", + "src/google/protobuf/compiler/javanano/javanano_file.h", + "src/google/protobuf/compiler/javanano/javanano_generator.cc", + "src/google/protobuf/compiler/javanano/javanano_generator.h", + "src/google/protobuf/compiler/javanano/javanano_helpers.cc", + "src/google/protobuf/compiler/javanano/javanano_helpers.h", + "src/google/protobuf/compiler/javanano/javanano_map_field.cc", + "src/google/protobuf/compiler/javanano/javanano_map_field.h", + "src/google/protobuf/compiler/javanano/javanano_message.cc", + "src/google/protobuf/compiler/javanano/javanano_message.h", + "src/google/protobuf/compiler/javanano/javanano_message_field.cc", + "src/google/protobuf/compiler/javanano/javanano_message_field.h", + "src/google/protobuf/compiler/javanano/javanano_primitive_field.cc", + "src/google/protobuf/compiler/javanano/javanano_primitive_field.h", + "src/google/protobuf/compiler/js/js_generator.cc", + "src/google/protobuf/compiler/js/js_generator.h", + "src/google/protobuf/compiler/objectivec/objectivec_enum.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum.h", + "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum_field.h", + "src/google/protobuf/compiler/objectivec/objectivec_extension.cc", + "src/google/protobuf/compiler/objectivec/objectivec_extension.h", + "src/google/protobuf/compiler/objectivec/objectivec_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_field.h", + "src/google/protobuf/compiler/objectivec/objectivec_file.cc", + "src/google/protobuf/compiler/objectivec/objectivec_file.h", + "src/google/protobuf/compiler/objectivec/objectivec_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_generator.h", + "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc", + "src/google/protobuf/compiler/objectivec/objectivec_helpers.h", + "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_map_field.h", + "src/google/protobuf/compiler/objectivec/objectivec_message.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message.h", + "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message_field.h", + "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc", + "src/google/protobuf/compiler/objectivec/objectivec_oneof.h", + "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.h", + "src/google/protobuf/compiler/plugin.cc", + "src/google/protobuf/compiler/plugin.h", + "src/google/protobuf/compiler/plugin.pb.cc", + "src/google/protobuf/compiler/plugin.pb.h", + "src/google/protobuf/compiler/python/python_generator.cc", + "src/google/protobuf/compiler/python/python_generator.h", + "src/google/protobuf/compiler/ruby/ruby_generator.cc", + "src/google/protobuf/compiler/ruby/ruby_generator.h", + "src/google/protobuf/compiler/subprocess.cc", + "src/google/protobuf/compiler/subprocess.h", + "src/google/protobuf/compiler/zip_writer.cc", + "src/google/protobuf/compiler/zip_writer.h", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", + + # Must be after no_chromium_code for warning flags to be ordered + # correctly. + ":protobuf_warnings", + ] + if (is_win) { + # This is defined internally, don't warn on duplicate. + configs -= [ "//build/config/win:lean_and_mean" ] + } + + public_configs = [ ":protobuf_config" ] + + cflags = protobuf_lite_cflags + + public_deps = [ + ":protobuf_full", + ] + } + + executable("protoc") { + sources = [ + "src/google/protobuf/compiler/main.cc", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + + cflags = protobuf_lite_cflags + + deps = [ + ":protoc_lib", + + # Default manifest on Windows (a no-op elsewhere). + "//build/win:default_exe_manifest", + ] + } +} + +google_python_dir = "$root_out_dir/pyproto/google" + +copy("copy_google") { + sources = [ + "__init__.py", + ] + outputs = [ + "$google_python_dir/{{source_file_part}}", + ] +} + +copy("copy_six") { + sources = [ + "third_party/six/six.py", + ] + outputs = [ + "$google_python_dir/third_party/six/{{source_file_part}}", + ] +} + +copy("copy_google_protobuf") { + sources = [ + "python/google/protobuf/__init__.py", + "python/google/protobuf/descriptor.py", + "python/google/protobuf/descriptor_database.py", + "python/google/protobuf/descriptor_pool.py", + "python/google/protobuf/json_format.py", + "python/google/protobuf/message.py", + "python/google/protobuf/message_factory.py", + "python/google/protobuf/proto_builder.py", + "python/google/protobuf/reflection.py", + "python/google/protobuf/service.py", + "python/google/protobuf/service_reflection.py", + "python/google/protobuf/symbol_database.py", + "python/google/protobuf/text_encoding.py", + "python/google/protobuf/text_format.py", + + # TODO(ncarter): protoc's python generator treats descriptor.proto + # specially, but only when the input path is exactly + # "google/protobuf/descriptor.proto". I'm not sure how to execute a rule + # from a different directory. For now, use a manually-generated copy of + # descriptor_pb2.py. + "python/google/protobuf/descriptor_pb2.py", + ] + outputs = [ + "$google_python_dir/protobuf/{{source_file_part}}", + ] +} + +copy("copy_google_protobuf_internal") { + sources = [ + "python/google/protobuf/internal/__init__.py", + "python/google/protobuf/internal/_parameterized.py", + "python/google/protobuf/internal/api_implementation.py", + "python/google/protobuf/internal/containers.py", + "python/google/protobuf/internal/decoder.py", + "python/google/protobuf/internal/encoder.py", + "python/google/protobuf/internal/enum_type_wrapper.py", + "python/google/protobuf/internal/message_listener.py", + "python/google/protobuf/internal/python_message.py", + "python/google/protobuf/internal/type_checkers.py", + "python/google/protobuf/internal/well_known_types.py", + "python/google/protobuf/internal/wire_format.py", + ] + outputs = [ + "$google_python_dir/protobuf/internal/{{source_file_part}}", + ] +} + +group("py_proto") { + public_deps = [ + ":copy_google", + ":copy_google_protobuf", + ":copy_google_protobuf_internal", + ":copy_six", + ] + + # Targets that depend on this should depend on the copied data files. + data = get_target_outputs(":copy_google") + data += get_target_outputs(":copy_six") + data += get_target_outputs(":copy_google_protobuf") + data += get_target_outputs(":copy_google_protobuf_internal") +}
diff --git a/src/third_party/protobuf-3/CHANGES.txt b/src/third_party/protobuf-3/CHANGES.txt new file mode 100644 index 0000000..3459ccc --- /dev/null +++ b/src/third_party/protobuf-3/CHANGES.txt
@@ -0,0 +1,1182 @@ +2016-05-16 version 3.0.0-beta-3 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript) + General + * Supported Proto3 lite-runtime in C++/Java for mobile platforms. + * Any type now supports APIs to specify prefixes other than + type.googleapis.com + * Removed javanano_use_deprecated_package option; Nano will always has its own + ".nano" package. + + C++ (Beta) + * Improved hash maps. + - Improved hash maps comments. In particular, please note that equal hash + maps will not necessarily have the same iteration order and + serialization. + - Added a new hash maps implementation that will become the default in a + later release. + * Arenas + - Several inlined methods in Arena were moved to out-of-line to improve + build performance and code size. + - Added SpaceAllocatedAndUsed() to report both space used and allocated + - Added convenient class UnsafeArenaAllocatedRepeatedPtrFieldBackInserter + * Any + - Allow custom type URL prefixes in Any packing. + - TextFormat now expand the Any type rather than printing bytes. + * Performance optimizations and various bug fixes. + + Java (Beta) + * Introduced an ExperimentalApi annotation. Annotated APIs are experimental + and are subject to change in a backward incompatible way in future releases. + * Introduced zero-copy serialization as an ExperimentalApi + - Introduction of the `ByteOutput` interface. This is similar to + `OutputStream` but provides semantics for lazy writing (i.e. no + immediate copy required) of fields that are considered to be immutable. + - `ByteString` now supports writing to a `ByteOutput`, which will directly + expose the internals of the `ByteString` (i.e. `byte[]` or `ByteBuffer`) + to the `ByteOutput` without copying. + - `CodedOutputStream` now supports writing to a `ByteOutput`. `ByteString` + instances that are too large to fit in the internal buffer will be + (lazily) written to the `ByteOutput` directly. + - This allows applications using large `ByteString` fields to avoid + duplication of these fields entirely. Such an application can supply a + `ByteOutput` that chains together the chunks received from + `CodedOutputStream` before forwarding them onto the IO system. + * Other related changes to `CodedOutputStream` + - Additional use of `sun.misc.Unsafe` where possible to perform fast + access to `byte[]` and `ByteBuffer` values and avoiding unnecessary + range checking. + - `ByteBuffer`-backed `CodedOutputStream` now writes directly to the + `ByteBuffer` rather than to an intermediate array. + * Improved lite-runtime. + - Lite protos now implement deep equals/hashCode/toString + - Significantly improved the performance of Builder#mergeFrom() and + Builder#mergeDelimitedFrom() + * Various bug fixes and small feature enhancement. + - Fixed stack overflow when in hashCode() for infinite recursive oneofs. + - Fixed the lazy field parsing in lite to merge rather than overwrite. + - TextFormat now supports reporting line/column numbers on errors. + - Updated to add appropriate @Override for better compiler errors. + + Python (Beta) + * Added JSON format for Any, Struct, Value and ListValue + * [ ] is now accepted for both repeated scalar fields and repeated message + fields in text format parser. + * Numerical field name is now supported in text format. + * Added DiscardUnknownFields API for python protobuf message. + + Objective-C (Beta) + * Proto comments now come over as HeaderDoc comments in the generated sources + so Xcode can pick them up and display them. + * The library headers have been updated to use HeaderDoc comments so Xcode can + pick them up and display them. + * The per message and per field overhead in both generated code and runtime + object sizes was reduced. + * Generated code now include deprecated annotations when the proto file + included them. + + C# (Beta) + In general: some changes are breaking, which require regenerating messages. + Most user-written code will not be impacted *except* for the renaming of enum + values. + + * Allow custom type URL prefixes in `Any` packing, and ignore them when + unpacking + * `protoc` is now in a separate NuGet package (Google.Protobuf.Tools) + * New option: `internal_access` to generate internal classes + * Enum values are now PascalCased, and if there's a prefix which matches the + name of the enum, that is removed (so an enum `COLOR` with a value + `COLOR_BLUE` would generate a value of just `Blue`). An option + (`legacy_enum_values`) is temporarily available to disable this, but the + option will be removed for GA. + * `json_name` option is now honored + * If group tags are encountered when parsing, they are validated more + thoroughly (although we don't support actual groups) + * NuGet dependencies are better specified + * Breaking: `Preconditions` is renamed to `ProtoPreconditions` + * Breaking: `GeneratedCodeInfo` is renamed to `GeneratedClrTypeInfo` + * `JsonFormatter` now allows writing to a `TextWriter` + * New interface, `ICustomDiagnosticMessage` to allow more compact + representations from `ToString` + * `CodedInputStream` and `CodedOutputStream` now implement `IDisposable`, + which simply disposes of the streams they were constructed with + * Map fields no longer support null values (in line with other languages) + * Improvements in JSON formatting and parsing + + Javascript (Alpha) + * Better support for "bytes" fields: bytes fields can be read as either a + base64 string or UInt8Array (in environments where TypedArray is supported). + * New support for CommonJS imports. This should make it easier to use the + JavaScript support in Node.js and tools like WebPack. See js/README.md for + more information. + * Some significant internal refactoring to simplify and modularize the code. + + Ruby (Alpha) + * JSON serialization now properly uses camelCased names, with a runtime option + that will preserve original names from .proto files instead. + * Well-known types are now included in the distribution. + * Release now includes binary gems for Windows, Mac, and Linux instead of just + source gems. + * Bugfix for serializing oneofs. + + C++/Java Lite (Alpha) + A new "lite" generator parameter was introduced in the protoc for C++ and + Java for Proto3 syntax messages. Example usage: + + ./protoc --cpp_out=lite:$OUTPUT_PATH foo.proto + + The protoc will treat the current input and all the transitive dependencies + as LITE. The same generator parameter must be used to generate the + dependencies. + + In Proto3 syntax files, "optimized_for=LITE_RUNTIME" is no longer supported. + + +2015-12-30 version 3.0.0-beta-2 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript) + General + * Introduced a new language implementation: JavaScript. + * Added a new field option "json_name". By default proto field names are + converted to "lowerCamelCase" in proto3 JSON format. This option can be + used to override this behavior and specify a different JSON name for the + field. + * Added conformance tests to ensure implementations are following proto3 JSON + specification. + + C++ (Beta) + * Various bug fixes and improvements to the JSON support utility: + - Duplicate map keys in JSON are now rejected (i.e., translation will + fail). + - Fixed wire-format for google.protobuf.Value/ListValue. + - Fixed precision loss when converting google.protobuf.Timestamp. + - Fixed a bug when parsing invalid UTF-8 code points. + - Fixed a memory leak. + - Reduced call stack usage. + + Java (Beta) + * Cleaned up some unused methods on CodedOutputStream. + * Presized lists for packed fields during parsing in the lite runtime to + reduce allocations and improve performance. + * Improved the performance of unknown fields in the lite runtime. + * Introduced UnsafeByteStrings to support zero-copy ByteString creation. + * Various bug fixes and improvements to the JSON support utility: + - Fixed a thread-safety bug. + - Added a new option “preservingProtoFieldNames” to JsonFormat. + - Added a new option “includingDefaultValueFields” to JsonFormat. + - Updated the JSON utility to comply with proto3 JSON specification. + + Python (Beta) + * Added proto3 JSON format utility. It includes support for all field types + and a few well-known types except for Any and Struct. + * Added runtime support for Any, Timestamp, Duration and FieldMask. + * [ ] is now accepted for repeated scalar fields in text format parser. + * Map fields now have proper O(1) performance for lookup/insert/delete + when using the Python/C++ implementation. They were previously using O(n) + search-based algorithms because the C++ reflection interface didn't + support true map operations. + + Objective-C (Beta) + * Various bug-fixes and code tweaks to pass more strict compiler warnings. + * Now has conformance test coverage and is passing all tests. + + C# (Beta) + * Various bug-fixes. + * Code generation: Files generated in directories based on namespace. + * Code generation: Include comments from .proto files in XML doc + comments (naively) + * Code generation: Change organization/naming of "reflection class" (access + to file descriptor) + * Code generation and library: Add Parser property to MessageDescriptor, + and introduce a non-generic parser type. + * Library: Added TypeRegistry to support JSON parsing/formatting of Any. + * Library: Added Any.Pack/Unpack support. + * Library: Implemented JSON parsing. + + Javascript (Alpha) + * Added proto3 support for JavaScript. The runtime is written in pure + JavaScript and works in browsers and in Node.js. To generate JavaScript + code for your proto, invoke protoc with "--js_out". See js/README.md + for more build instructions. + +2015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#) + About Beta + * This is the first beta release of protobuf v3.0.0. Not all languages + have reached beta stage. Languages not marked as beta are still in + alpha (i.e., be prepared for API breaking changes). + + General + * Proto3 JSON is supported in several languages (fully supported in C++ + and Java, partially supported in Ruby/C#). The JSON spec is defined in + the proto3 language guide: + + https://developers.google.com/protocol-buffers/docs/proto3#json + + We will publish a more detailed spec to define the exact behavior of + proto3-conformant JSON serializers and parsers. Until then, do not rely + on specific behaviors of the implementation if it’s not documented in + the above spec. More specifically, the behavior is not yet finalized for + the following: + - Parsing invalid JSON input (e.g., input with trailing commas). + - Non-camelCase names in JSON input. + - The same field appears multiple times in JSON input. + - JSON arrays contain “null” values.