summaryrefslogtreecommitdiff
path: root/Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp')
-rw-r--r--Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp62
1 files changed, 38 insertions, 24 deletions
diff --git a/Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp b/Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp
index 0a9b88ada..4f8b84535 100644
--- a/Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp
+++ b/Source/WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp
@@ -21,12 +21,12 @@
#include "config.h"
#include "V8TestActiveDOMObject.h"
+#include "BindingState.h"
#include "ContextFeatures.h"
#include "ExceptionCode.h"
+#include "Frame.h"
#include "RuntimeEnabledFeatures.h"
#include "V8Binding.h"
-#include "V8BindingMacros.h"
-#include "V8BindingState.h"
#include "V8DOMWrapper.h"
#include "V8IsolatedContext.h"
#include "V8Node.h"
@@ -54,11 +54,11 @@ static v8::Handle<v8::Value> excitingFunctionCallback(const v8::Arguments& args)
if (args.Length() < 1)
return V8Proxy::throwNotEnoughArgumentsError(args.GetIsolate());
TestActiveDOMObject* imp = V8TestActiveDOMObject::toNative(args.Holder());
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true))
- return v8::Handle<v8::Value>();
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame()))
+ return v8Undefined();
EXCEPTION_BLOCK(Node*, nextChild, V8Node::HasInstance(MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined)) ? V8Node::toNative(v8::Handle<v8::Object>::Cast(MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined))) : 0);
imp->excitingFunction(nextChild);
- return v8::Handle<v8::Value>();
+ return v8Undefined();
}
static v8::Handle<v8::Value> postMessageCallback(const v8::Arguments& args)
@@ -69,13 +69,13 @@ static v8::Handle<v8::Value> postMessageCallback(const v8::Arguments& args)
TestActiveDOMObject* imp = V8TestActiveDOMObject::toNative(args.Holder());
STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, message, MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined));
imp->postMessage(message);
- return v8::Handle<v8::Value>();
+ return v8Undefined();
}
static v8::Handle<v8::Value> postMessageAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
INC_STATS("DOM.TestActiveDOMObject.postMessage._get");
- static v8::Persistent<v8::FunctionTemplate> privateTemplate = v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(TestActiveDOMObjectV8Internal::postMessageCallback, v8::Handle<v8::Value>(), v8::Signature::New(V8TestActiveDOMObject::GetRawTemplate())));
+ static v8::Persistent<v8::FunctionTemplate> privateTemplate = v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(TestActiveDOMObjectV8Internal::postMessageCallback, v8Undefined(), v8::Signature::New(V8TestActiveDOMObject::GetRawTemplate())));
v8::Handle<v8::Object> holder = V8DOMWrapper::lookupDOMWrapper(V8TestActiveDOMObject::GetTemplate(), info.This());
if (holder.IsEmpty()) {
// can only reach here by 'object.__proto__.func', and it should passed
@@ -83,16 +83,34 @@ static v8::Handle<v8::Value> postMessageAttrGetter(v8::Local<v8::String> name, c
return privateTemplate->GetFunction();
}
TestActiveDOMObject* imp = V8TestActiveDOMObject::toNative(holder);
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), false)) {
- static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(TestActiveDOMObjectV8Internal::postMessageCallback, v8::Handle<v8::Value>(), v8::Signature::New(V8TestActiveDOMObject::GetRawTemplate())));
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame(), DoNotReportSecurityError)) {
+ static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(TestActiveDOMObjectV8Internal::postMessageCallback, v8Undefined(), v8::Signature::New(V8TestActiveDOMObject::GetRawTemplate())));
return sharedTemplate->GetFunction();
}
+
+ v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(name);
+ if (!hiddenValue.IsEmpty())
+ return hiddenValue;
+
return privateTemplate->GetFunction();
}
+static void TestActiveDOMObjectDomainSafeFunctionSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ INC_STATS("DOM.TestActiveDOMObject._set");
+ v8::Handle<v8::Object> holder = V8DOMWrapper::lookupDOMWrapper(V8TestActiveDOMObject::GetTemplate(), info.This());
+ if (holder.IsEmpty())
+ return;
+ TestActiveDOMObject* imp = V8TestActiveDOMObject::toNative(holder);
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame()))
+ return;
+
+ info.This()->SetHiddenValue(name, value);
+}
+
} // namespace TestActiveDOMObjectV8Internal
-static const BatchedAttribute TestActiveDOMObjectAttrs[] = {
+static const V8DOMConfiguration::BatchedAttribute TestActiveDOMObjectAttrs[] = {
// Attribute 'excitingAttr' (Type: 'readonly attribute' ExtAttr: '')
{"excitingAttr", TestActiveDOMObjectV8Internal::excitingAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
};
@@ -102,7 +120,7 @@ static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestActiveDOMObjectTempla
desc->ReadOnlyPrototype();
v8::Local<v8::Signature> defaultSignature;
- defaultSignature = configureTemplate(desc, "TestActiveDOMObject", v8::Persistent<v8::FunctionTemplate>(), V8TestActiveDOMObject::internalFieldCount,
+ defaultSignature = V8DOMConfiguration::configureTemplate(desc, "TestActiveDOMObject", v8::Persistent<v8::FunctionTemplate>(), V8TestActiveDOMObject::internalFieldCount,
TestActiveDOMObjectAttrs, WTF_ARRAY_LENGTH(TestActiveDOMObjectAttrs),
0, 0);
UNUSED_PARAM(defaultSignature); // In some cases, it will not be used.
@@ -116,10 +134,10 @@ static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestActiveDOMObjectTempla
const int excitingFunctionArgc = 1;
v8::Handle<v8::FunctionTemplate> excitingFunctionArgv[excitingFunctionArgc] = { V8Node::GetRawTemplate() };
v8::Handle<v8::Signature> excitingFunctionSignature = v8::Signature::New(desc, excitingFunctionArgc, excitingFunctionArgv);
- proto->Set(v8::String::New("excitingFunction"), v8::FunctionTemplate::New(TestActiveDOMObjectV8Internal::excitingFunctionCallback, v8::Handle<v8::Value>(), excitingFunctionSignature));
+ proto->Set(v8::String::New("excitingFunction"), v8::FunctionTemplate::New(TestActiveDOMObjectV8Internal::excitingFunctionCallback, v8Undefined(), excitingFunctionSignature));
// Function 'postMessage' (ExtAttr: 'DoNotCheckSecurity')
- proto->SetAccessor(v8::String::New("postMessage"), TestActiveDOMObjectV8Internal::postMessageAttrGetter, 0, v8::Handle<v8::Value>(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly));
+ proto->SetAccessor(v8::String::New("postMessage"), TestActiveDOMObjectV8Internal::postMessageAttrGetter, TestActiveDOMObjectV8Internal::TestActiveDOMObjectDomainSafeFunctionSetter, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(v8::DontDelete));
// Custom toString template
desc->Set(getToStringName(), getToStringTemplate());
@@ -128,8 +146,8 @@ static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestActiveDOMObjectTempla
v8::Persistent<v8::FunctionTemplate> V8TestActiveDOMObject::GetRawTemplate()
{
- V8BindingPerIsolateData* data = V8BindingPerIsolateData::current();
- V8BindingPerIsolateData::TemplateMap::iterator result = data->rawTemplateMap().find(&info);
+ V8PerIsolateData* data = V8PerIsolateData::current();
+ V8PerIsolateData::TemplateMap::iterator result = data->rawTemplateMap().find(&info);
if (result != data->rawTemplateMap().end())
return result->second;
@@ -141,8 +159,8 @@ v8::Persistent<v8::FunctionTemplate> V8TestActiveDOMObject::GetRawTemplate()
v8::Persistent<v8::FunctionTemplate> V8TestActiveDOMObject::GetTemplate()
{
- V8BindingPerIsolateData* data = V8BindingPerIsolateData::current();
- V8BindingPerIsolateData::TemplateMap::iterator result = data->templateMap().find(&info);
+ V8PerIsolateData* data = V8PerIsolateData::current();
+ V8PerIsolateData::TemplateMap::iterator result = data->templateMap().find(&info);
if (result != data->templateMap().end())
return result->second;
@@ -164,9 +182,8 @@ v8::Handle<v8::Object> V8TestActiveDOMObject::wrapSlow(PassRefPtr<TestActiveDOMO
v8::Handle<v8::Object> wrapper;
V8Proxy* proxy = 0;
if (impl->frame()) {
- proxy = V8Proxy::retrieve(impl->frame());
- if (proxy)
- proxy->windowShell()->initContextIfNeeded();
+ proxy = impl->frame()->script()->proxy();
+ proxy->windowShell()->initContextIfNeeded();
}
// Enter the node's context and create the wrapper in that context.
@@ -184,12 +201,9 @@ v8::Handle<v8::Object> V8TestActiveDOMObject::wrapSlow(PassRefPtr<TestActiveDOMO
context->Exit();
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
-
- v8::Persistent<v8::Object> wrapperHandle = v8::Persistent<v8::Object>::New(wrapper);
-
+ v8::Persistent<v8::Object> wrapperHandle = V8DOMWrapper::setJSWrapperForDOMObject(impl, wrapper, isolate);
if (!hasDependentLifetime)
wrapperHandle.MarkIndependent();
- V8DOMWrapper::setJSWrapperForDOMObject(impl, wrapperHandle, isolate);
return wrapper;
}