Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(352)

Unified Diff: Source/bindings/tests/results/V8TestExtendedEvent.cpp

Issue 20034002: Add support for KeyboardEvent.location attribute (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/bindings/tests/results/V8TestExtendedEvent.h ('k') | Source/core/dom/KeyboardEvent.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/tests/results/V8TestExtendedEvent.cpp
diff --git a/Source/bindings/tests/results/V8TestExtendedEvent.cpp b/Source/bindings/tests/results/V8TestExtendedEvent.cpp
index b125fb9000d2c4a638524f78e7249d4b04921e35..98e875e285594189c8e73c7794a4a106401190e5 100644
--- a/Source/bindings/tests/results/V8TestExtendedEvent.cpp
+++ b/Source/bindings/tests/results/V8TestExtendedEvent.cpp
@@ -24,13 +24,17 @@
#include "RuntimeEnabledFeatures.h"
#include "V8TestEvent.h"
+#include "bindings/v8/Dictionary.h"
#include "bindings/v8/ScriptController.h"
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMConfiguration.h"
#include "bindings/v8/V8DOMWrapper.h"
+#include "bindings/v8/V8ObjectConstructor.h"
#include "core/dom/ContextFeatures.h"
#include "core/dom/Document.h"
#include "core/page/Frame.h"
+#include "core/page/PageConsole.h"
+#include "core/page/UseCounter.h"
#include "core/platform/chromium/TraceEvent.h"
#include "wtf/UnusedParam.h"
@@ -62,8 +66,91 @@ namespace EventV8Internal {
template <typename T> void V8_USE(T) { }
+static void locationAttrGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
+{
+ Event* imp = V8TestExtendedEvent::toNative(info.Holder());
+ v8SetReturnValueUnsigned(info, imp->location());
+ return;
+}
+
+static void locationAttrGetterCallback(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
+{
+ TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter");
+ EventV8Internal::locationAttrGetter(name, info);
+ TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution");
+}
+
+static void keyLocationAttrGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
+{
+ Event* imp = V8TestExtendedEvent::toNative(info.Holder());
+ v8SetReturnValueUnsigned(info, imp->location());
+ return;
+}
+
+static void keyLocationAttrGetterCallback(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
+{
+ TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter");
+ UseCounter::countDeprecation(activeDOMWindow(), UseCounter::KeyboardEventKeyLocation);
+ EventV8Internal::keyLocationAttrGetter(name, info);
+ TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution");
+}
+
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
+{
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
+
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, args[0]);
+ EventInit eventInit;
+ if (args.Length() >= 2) {
+ V8TRYCATCH_VOID(Dictionary, options, Dictionary(args[1], args.GetIsolate()));
+ if (!fillEventInit(eventInit, options))
+ return;
+ }
+
+ RefPtr<Event> event = Event::create(type, eventInit);
+ v8::Handle<v8::Object> wrapper = args.Holder();
+ V8DOMWrapper::associateObjectWithWrapper<V8TestExtendedEvent>(event.release(), &V8TestExtendedEvent::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
+ v8SetReturnValue(args, wrapper);
+}
} // namespace EventV8Internal
+static const V8DOMConfiguration::BatchedAttribute V8TestExtendedEventAttrs[] = {
+ // Attribute 'location'
+ {"location", EventV8Internal::locationAttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+ // Attribute 'keyLocation'
+ {"keyLocation", EventV8Internal::keyLocationAttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+};
+
+bool fillEventInit(EventInit& eventInit, const Dictionary& options)
+{
+ if (!fillTestEventInit(eventInit, options))
+ return false;
+
+ options.get("location", eventInit.location);
+ if (options.get("keyLocation", eventInit.location))
+ UseCounter::countDeprecation(activeDOMWindow(), UseCounter::KeyboardEventKeyLocation);
+ return true;
+}
+
+void V8TestExtendedEvent::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
+{
+ TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "DOMConstructor");
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
+
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
+
+ EventV8Internal::constructor(args);
+}
+
static v8::Handle<v8::FunctionTemplate> ConfigureV8TestExtendedEventTemplate(v8::Handle<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
{
desc->ReadOnlyPrototype();
@@ -73,9 +160,11 @@ static v8::Handle<v8::FunctionTemplate> ConfigureV8TestExtendedEventTemplate(v8:
defaultSignature = V8DOMConfiguration::configureTemplate(desc, "", V8TestEvent::GetTemplate(isolate, currentWorldType), V8TestExtendedEvent::internalFieldCount, 0, 0, 0, 0, isolate, currentWorldType);
else
defaultSignature = V8DOMConfiguration::configureTemplate(desc, "TestExtendedEvent", V8TestEvent::GetTemplate(isolate, currentWorldType), V8TestExtendedEvent::internalFieldCount,
- 0, 0,
+ V8TestExtendedEventAttrs, WTF_ARRAY_LENGTH(V8TestExtendedEventAttrs),
0, 0, isolate, currentWorldType);
UNUSED_PARAM(defaultSignature); // In some cases, it will not be used.
+ desc->SetCallHandler(V8TestExtendedEvent::constructorCallback);
+ desc->SetLength(1);
// Custom toString template
desc->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::current()->toStringTemplate());
« no previous file with comments | « Source/bindings/tests/results/V8TestExtendedEvent.h ('k') | Source/core/dom/KeyboardEvent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698