| Index: Source/bindings/core/v8/PrivateScriptRunner.cpp
|
| diff --git a/Source/bindings/core/v8/PrivateScriptRunner.cpp b/Source/bindings/core/v8/PrivateScriptRunner.cpp
|
| index cd6aaf0235c4423d0c42942b3e04384422c51f44..4b4343aa370ba91785c5250d35c63d564fa965b5 100644
|
| --- a/Source/bindings/core/v8/PrivateScriptRunner.cpp
|
| +++ b/Source/bindings/core/v8/PrivateScriptRunner.cpp
|
| @@ -186,54 +186,9 @@ v8::Handle<v8::Value> PrivateScriptRunner::installClassIfNeeded(LocalFrame* fram
|
| return classObjectOfPrivateScript(scriptState, className);
|
| }
|
|
|
| -v8::Handle<v8::Value> PrivateScriptRunner::runDOMAttributeGetter(ScriptState* scriptState, String className, String attributeName, v8::Handle<v8::Value> holder)
|
| -{
|
| - v8::Handle<v8::Object> classObject = classObjectOfPrivateScript(scriptState, className);
|
| - v8::Handle<v8::Value> descriptor = classObject->GetOwnPropertyDescriptor(v8String(scriptState->isolate(), attributeName));
|
| - if (descriptor.IsEmpty() || !descriptor->IsObject()) {
|
| - fprintf(stderr, "Private script error: Target DOM attribute getter was not found. (Class name = %s, Attribute name = %s)\n", className.utf8().data(), attributeName.utf8().data());
|
| - RELEASE_ASSERT_NOT_REACHED();
|
| - }
|
| - v8::Handle<v8::Value> getter = v8::Handle<v8::Object>::Cast(descriptor)->Get(v8String(scriptState->isolate(), "get"));
|
| - if (getter.IsEmpty() || !getter->IsFunction()) {
|
| - fprintf(stderr, "Private script error: Target DOM attribute getter was not found. (Class name = %s, Attribute name = %s)\n", className.utf8().data(), attributeName.utf8().data());
|
| - RELEASE_ASSERT_NOT_REACHED();
|
| - }
|
| - initializeHolderIfNeeded(scriptState, classObject, holder);
|
| - return V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(getter), scriptState->executionContext(), holder, 0, 0, scriptState->isolate());
|
| -}
|
| -
|
| -void PrivateScriptRunner::runDOMAttributeSetter(ScriptState* scriptState, String className, String attributeName, v8::Handle<v8::Value> holder, v8::Handle<v8::Value> v8Value)
|
| -{
|
| - v8::Handle<v8::Object> classObject = classObjectOfPrivateScript(scriptState, className);
|
| - v8::Handle<v8::Value> descriptor = classObject->GetOwnPropertyDescriptor(v8String(scriptState->isolate(), attributeName));
|
| - if (descriptor.IsEmpty() || !descriptor->IsObject()) {
|
| - fprintf(stderr, "Private script error: Target DOM attribute setter was not found. (Class name = %s, Attribute name = %s)\n", className.utf8().data(), attributeName.utf8().data());
|
| - RELEASE_ASSERT_NOT_REACHED();
|
| - }
|
| - v8::Handle<v8::Value> setter = v8::Handle<v8::Object>::Cast(descriptor)->Get(v8String(scriptState->isolate(), "set"));
|
| - if (setter.IsEmpty() || !setter->IsFunction()) {
|
| - fprintf(stderr, "Private script error: Target DOM attribute setter was not found. (Class name = %s, Attribute name = %s)\n", className.utf8().data(), attributeName.utf8().data());
|
| - RELEASE_ASSERT_NOT_REACHED();
|
| - }
|
| - initializeHolderIfNeeded(scriptState, classObject, holder);
|
| - v8::Handle<v8::Value> argv[] = { v8Value };
|
| - V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(setter), scriptState->executionContext(), holder, WTF_ARRAY_LENGTH(argv), argv, scriptState->isolate());
|
| -}
|
| -
|
| -v8::Handle<v8::Value> PrivateScriptRunner::runDOMMethod(ScriptState* scriptState, String className, String methodName, v8::Handle<v8::Value> holder, int argc, v8::Handle<v8::Value> argv[])
|
| -{
|
| - v8::Handle<v8::Object> classObject = classObjectOfPrivateScript(scriptState, className);
|
| - v8::Handle<v8::Value> method = classObject->Get(v8String(scriptState->isolate(), methodName));
|
| - if (method.IsEmpty() || !method->IsFunction()) {
|
| - fprintf(stderr, "Private script error: Target DOM method was not found. (Class name = %s, Method name = %s)\n", className.utf8().data(), methodName.utf8().data());
|
| - RELEASE_ASSERT_NOT_REACHED();
|
| - }
|
| - initializeHolderIfNeeded(scriptState, classObject, holder);
|
| - return V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(method), scriptState->executionContext(), holder, argc, argv, scriptState->isolate());
|
| -}
|
| +namespace {
|
|
|
| -void PrivateScriptRunner::rethrowExceptionInPrivateScript(v8::Isolate* isolate, v8::TryCatch& block, ScriptState* scriptStateInUserScript, ExceptionState::Context errorContext, const char* propertyName, const char* interfaceName)
|
| +void rethrowExceptionInPrivateScript(v8::Isolate* isolate, v8::TryCatch& block, ScriptState* scriptStateInUserScript, ExceptionState::Context errorContext, const char* propertyName, const char* interfaceName)
|
| {
|
| v8::Handle<v8::Value> exception = block.Exception();
|
| RELEASE_ASSERT(!exception.IsEmpty() && exception->IsObject());
|
| @@ -276,4 +231,74 @@ void PrivateScriptRunner::rethrowExceptionInPrivateScript(v8::Isolate* isolate,
|
| RELEASE_ASSERT_NOT_REACHED();
|
| }
|
|
|
| +} // namespace
|
| +
|
| +v8::Handle<v8::Value> PrivateScriptRunner::runDOMAttributeGetter(ScriptState* scriptState, ScriptState* scriptStateInUserScript, const char* className, const char* attributeName, v8::Handle<v8::Value> holder)
|
| +{
|
| + v8::Handle<v8::Object> classObject = classObjectOfPrivateScript(scriptState, className);
|
| + v8::Handle<v8::Value> descriptor = classObject->GetOwnPropertyDescriptor(v8String(scriptState->isolate(), attributeName));
|
| + if (descriptor.IsEmpty() || !descriptor->IsObject()) {
|
| + fprintf(stderr, "Private script error: Target DOM attribute getter was not found. (Class name = %s, Attribute name = %s)\n", className, attributeName);
|
| + RELEASE_ASSERT_NOT_REACHED();
|
| + }
|
| + v8::Handle<v8::Value> getter = v8::Handle<v8::Object>::Cast(descriptor)->Get(v8String(scriptState->isolate(), "get"));
|
| + if (getter.IsEmpty() || !getter->IsFunction()) {
|
| + fprintf(stderr, "Private script error: Target DOM attribute getter was not found. (Class name = %s, Attribute name = %s)\n", className, attributeName);
|
| + RELEASE_ASSERT_NOT_REACHED();
|
| + }
|
| + initializeHolderIfNeeded(scriptState, classObject, holder);
|
| + v8::TryCatch block;
|
| + v8::Handle<v8::Value> result = V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(getter), scriptState->executionContext(), holder, 0, 0, scriptState->isolate());
|
| + if (block.HasCaught()) {
|
| + rethrowExceptionInPrivateScript(scriptState->isolate(), block, scriptStateInUserScript, ExceptionState::GetterContext, attributeName, className);
|
| + block.ReThrow();
|
| + return v8::Handle<v8::Value>();
|
| + }
|
| + return result;
|
| +}
|
| +
|
| +bool PrivateScriptRunner::runDOMAttributeSetter(ScriptState* scriptState, ScriptState* scriptStateInUserScript, const char* className, const char* attributeName, v8::Handle<v8::Value> holder, v8::Handle<v8::Value> v8Value)
|
| +{
|
| + v8::Handle<v8::Object> classObject = classObjectOfPrivateScript(scriptState, className);
|
| + v8::Handle<v8::Value> descriptor = classObject->GetOwnPropertyDescriptor(v8String(scriptState->isolate(), attributeName));
|
| + if (descriptor.IsEmpty() || !descriptor->IsObject()) {
|
| + fprintf(stderr, "Private script error: Target DOM attribute setter was not found. (Class name = %s, Attribute name = %s)\n", className, attributeName);
|
| + RELEASE_ASSERT_NOT_REACHED();
|
| + }
|
| + v8::Handle<v8::Value> setter = v8::Handle<v8::Object>::Cast(descriptor)->Get(v8String(scriptState->isolate(), "set"));
|
| + if (setter.IsEmpty() || !setter->IsFunction()) {
|
| + fprintf(stderr, "Private script error: Target DOM attribute setter was not found. (Class name = %s, Attribute name = %s)\n", className, attributeName);
|
| + RELEASE_ASSERT_NOT_REACHED();
|
| + }
|
| + initializeHolderIfNeeded(scriptState, classObject, holder);
|
| + v8::Handle<v8::Value> argv[] = { v8Value };
|
| + v8::TryCatch block;
|
| + V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(setter), scriptState->executionContext(), holder, WTF_ARRAY_LENGTH(argv), argv, scriptState->isolate());
|
| + if (block.HasCaught()) {
|
| + rethrowExceptionInPrivateScript(scriptState->isolate(), block, scriptStateInUserScript, ExceptionState::SetterContext, attributeName, className);
|
| + block.ReThrow();
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +v8::Handle<v8::Value> PrivateScriptRunner::runDOMMethod(ScriptState* scriptState, ScriptState* scriptStateInUserScript, const char* className, const char* methodName, v8::Handle<v8::Value> holder, int argc, v8::Handle<v8::Value> argv[])
|
| +{
|
| + v8::Handle<v8::Object> classObject = classObjectOfPrivateScript(scriptState, className);
|
| + v8::Handle<v8::Value> method = classObject->Get(v8String(scriptState->isolate(), methodName));
|
| + if (method.IsEmpty() || !method->IsFunction()) {
|
| + fprintf(stderr, "Private script error: Target DOM method was not found. (Class name = %s, Method name = %s)\n", className, methodName);
|
| + RELEASE_ASSERT_NOT_REACHED();
|
| + }
|
| + initializeHolderIfNeeded(scriptState, classObject, holder);
|
| + v8::TryCatch block;
|
| + v8::Handle<v8::Value> result = V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(method), scriptState->executionContext(), holder, argc, argv, scriptState->isolate());
|
| + if (block.HasCaught()) {
|
| + rethrowExceptionInPrivateScript(scriptState->isolate(), block, scriptStateInUserScript, ExceptionState::ExecutionContext, methodName, className);
|
| + block.ReThrow();
|
| + return v8::Handle<v8::Value>();
|
| + }
|
| + return result;
|
| +}
|
| +
|
| } // namespace blink
|
|
|