diff options
author | Steve Block <steveblock@google.com> | 2011-05-25 19:08:45 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-06-08 13:51:31 +0100 |
commit | 2bde8e466a4451c7319e3a072d118917957d6554 (patch) | |
tree | 28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Source/WebKit/chromium/src/WebBindings.cpp | |
parent | 6939c99b71d9372d14a0c74a772108052e8c48c8 (diff) | |
download | external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2 |
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Source/WebKit/chromium/src/WebBindings.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebBindings.cpp | 209 |
1 files changed, 68 insertions, 141 deletions
diff --git a/Source/WebKit/chromium/src/WebBindings.cpp b/Source/WebKit/chromium/src/WebBindings.cpp index 0882e38..4012d1c 100644 --- a/Source/WebKit/chromium/src/WebBindings.cpp +++ b/Source/WebKit/chromium/src/WebBindings.cpp @@ -35,25 +35,18 @@ #include "npruntime_priv.h" #if USE(V8) -#include "ChromiumDataObject.h" -#include "ClipboardChromium.h" -#include "EventNames.h" -#include "MouseEvent.h" #include "NPV8Object.h" // for PrivateIdentifier #include "Range.h" #include "V8BindingState.h" #include "V8DOMWrapper.h" #include "V8Element.h" -#include "V8Event.h" -#include "V8Helpers.h" -#include "V8HiddenPropertyName.h" #include "V8NPUtils.h" +#include "V8Node.h" #include "V8Proxy.h" #include "V8Range.h" #elif USE(JSC) #include "bridge/c/c_utility.h" #endif -#include "WebDragData.h" #include "WebElement.h" #include "WebRange.h" @@ -65,9 +58,9 @@ using namespace WebCore; namespace WebKit { -bool WebBindings::construct(NPP npp, NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant* result) +bool WebBindings::construct(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result) { - return _NPN_Construct(npp, npobj, args, argCount, result); + return _NPN_Construct(npp, object, args, argCount, result); } NPObject* WebBindings::createObject(NPP npp, NPClass* npClass) @@ -75,19 +68,19 @@ NPObject* WebBindings::createObject(NPP npp, NPClass* npClass) return _NPN_CreateObject(npp, npClass); } -bool WebBindings::enumerate(NPP id, NPObject* obj, NPIdentifier** identifier, uint32_t* val) +bool WebBindings::enumerate(NPP npp, NPObject* object, NPIdentifier** identifier, uint32_t* identifierCount) { - return _NPN_Enumerate(id, obj, identifier, val); + return _NPN_Enumerate(npp, object, identifier, identifierCount); } -bool WebBindings::evaluate(NPP npp, NPObject* npObject, NPString* npScript, NPVariant* result) +bool WebBindings::evaluate(NPP npp, NPObject* object, NPString* script, NPVariant* result) { - return _NPN_Evaluate(npp, npObject, npScript, result); + return _NPN_Evaluate(npp, object, script, result); } -bool WebBindings::evaluateHelper(NPP npp, bool popups_allowed, NPObject* npobj, NPString* npscript, NPVariant* result) +bool WebBindings::evaluateHelper(NPP npp, bool popupsAllowed, NPObject* object, NPString* script, NPVariant* result) { - return _NPN_EvaluateHelper(npp, popups_allowed, npobj, npscript, result); + return _NPN_EvaluateHelper(npp, popupsAllowed, object, script, result); } NPIdentifier WebBindings::getIntIdentifier(int32_t number) @@ -95,9 +88,9 @@ NPIdentifier WebBindings::getIntIdentifier(int32_t number) return _NPN_GetIntIdentifier(number); } -bool WebBindings::getProperty(NPP npp, NPObject* obj, NPIdentifier propertyName, NPVariant *result) +bool WebBindings::getProperty(NPP npp, NPObject* object, NPIdentifier property, NPVariant* result) { - return _NPN_GetProperty(npp, obj, propertyName, result); + return _NPN_GetProperty(npp, object, property, result); } NPIdentifier WebBindings::getStringIdentifier(const NPUTF8* string) @@ -110,14 +103,14 @@ void WebBindings::getStringIdentifiers(const NPUTF8** names, int32_t nameCount, _NPN_GetStringIdentifiers(names, nameCount, identifiers); } -bool WebBindings::hasMethod(NPP npp, NPObject* npObject, NPIdentifier methodName) +bool WebBindings::hasMethod(NPP npp, NPObject* object, NPIdentifier method) { - return _NPN_HasMethod(npp, npObject, methodName); + return _NPN_HasMethod(npp, object, method); } -bool WebBindings::hasProperty(NPP npp, NPObject* npObject, NPIdentifier propertyName) +bool WebBindings::hasProperty(NPP npp, NPObject* object, NPIdentifier property) { - return _NPN_HasProperty(npp, npObject, propertyName); + return _NPN_HasProperty(npp, object, property); } bool WebBindings::identifierIsString(NPIdentifier identifier) @@ -139,19 +132,19 @@ void WebBindings::initializeVariantWithStringCopy(NPVariant* variant, const NPSt #endif } -bool WebBindings::invoke(NPP npp, NPObject* npObject, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) +bool WebBindings::invoke(NPP npp, NPObject* object, NPIdentifier method, const NPVariant* args, uint32_t argCount, NPVariant* result) { - return _NPN_Invoke(npp, npObject, methodName, arguments, argumentCount, result); + return _NPN_Invoke(npp, object, method, args, argCount, result); } -bool WebBindings::invokeDefault(NPP id, NPObject* obj, const NPVariant* args, uint32_t count, NPVariant* result) +bool WebBindings::invokeDefault(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result) { - return _NPN_InvokeDefault(id, obj, args, count, result); + return _NPN_InvokeDefault(npp, object, args, argCount, result); } -void WebBindings::releaseObject(NPObject* npObject) +void WebBindings::releaseObject(NPObject* object) { - return _NPN_ReleaseObject(npObject); + return _NPN_ReleaseObject(object); } void WebBindings::releaseVariantValue(NPVariant* variant) @@ -159,30 +152,30 @@ void WebBindings::releaseVariantValue(NPVariant* variant) _NPN_ReleaseVariantValue(variant); } -bool WebBindings::removeProperty(NPP id, NPObject* object, NPIdentifier identifier) +bool WebBindings::removeProperty(NPP npp, NPObject* object, NPIdentifier identifier) { - return _NPN_RemoveProperty(id, object, identifier); + return _NPN_RemoveProperty(npp, object, identifier); } -NPObject* WebBindings::retainObject(NPObject* npObject) +NPObject* WebBindings::retainObject(NPObject* object) { - return _NPN_RetainObject(npObject); + return _NPN_RetainObject(object); } -void WebBindings::setException(NPObject* obj, const NPUTF8* message) +void WebBindings::setException(NPObject* object, const NPUTF8* message) { - _NPN_SetException(obj, message); + _NPN_SetException(object, message); } -bool WebBindings::setProperty(NPP id, NPObject* obj, NPIdentifier identifier, const NPVariant* variant) +bool WebBindings::setProperty(NPP npp, NPObject* object, NPIdentifier identifier, const NPVariant* value) { - return _NPN_SetProperty(id, obj, identifier, variant); + return _NPN_SetProperty(npp, object, identifier, value); } -void WebBindings::unregisterObject(NPObject* npObject) +void WebBindings::unregisterObject(NPObject* object) { #if USE(V8) - _NPN_UnregisterObject(npObject); + _NPN_UnregisterObject(object); #endif } @@ -193,116 +186,46 @@ NPUTF8* WebBindings::utf8FromIdentifier(NPIdentifier identifier) void WebBindings::extractIdentifierData(const NPIdentifier& identifier, const NPUTF8*& string, int32_t& number, bool& isString) { - PrivateIdentifier* priv = static_cast<PrivateIdentifier*>(identifier); - if (!priv) { + PrivateIdentifier* data = static_cast<PrivateIdentifier*>(identifier); + if (!data) { isString = false; number = 0; return; } - isString = priv->isString; + isString = data->isString; if (isString) - string = priv->value.string; + string = data->value.string; else - number = priv->value.number; + number = data->value.number; } #if USE(V8) -static v8::Local<v8::Value> getEvent(const v8::Handle<v8::Context>& context) +static bool getRangeImpl(NPObject* object, WebRange* webRange) { - return context->Global()->GetHiddenValue(V8HiddenPropertyName::event()); -} - -static bool getDragDataImpl(NPObject* npobj, int* eventId, WebDragData* data) -{ - if (!npobj) - return false; - if (npobj->_class != npScriptObjectClass) - return false; - - v8::HandleScope handleScope; - v8::Handle<v8::Context> context = v8::Context::GetEntered(); - if (context.IsEmpty()) - return false; - - // Get the current WebCore event. - v8::Handle<v8::Value> currentEvent(getEvent(context)); - Event* event = V8Event::toNative(v8::Handle<v8::Object>::Cast(currentEvent)); - if (!event) - return false; - - // Check that the given npobj is that event. - V8NPObject* object = reinterpret_cast<V8NPObject*>(npobj); - Event* given = V8Event::toNative(object->v8Object); - if (given != event) - return false; - - // Check the execution frames are same origin. - V8Proxy* current = V8Proxy::retrieve(V8Proxy::retrieveFrameForCurrentContext()); - Frame* frame = V8Proxy::retrieveFrame(context); - if (!current || !V8BindingSecurity::canAccessFrame(V8BindingState::Only(), frame, false)) - return false; - - const EventNames& names(eventNames()); - const AtomicString& eventType(event->type()); - - enum DragTargetMouseEventId { - DragEnterId = 1, DragOverId = 2, DragLeaveId = 3, DropId = 4 - }; - - // The event type should be a drag event. - if (eventType == names.dragenterEvent) - *eventId = DragEnterId; - else if (eventType == names.dragoverEvent) - *eventId = DragOverId; - else if (eventType == names.dragleaveEvent) - *eventId = DragLeaveId; - else if (eventType == names.dropEvent) - *eventId = DropId; - else - return false; - - // Drag events are mouse events and should have a clipboard. - MouseEvent* me = static_cast<MouseEvent*>(event); - Clipboard* clipboard = me->clipboard(); - if (!clipboard) + if (!object || (object->_class != npScriptObjectClass)) return false; - // And that clipboard should be accessible by WebKit policy. - ClipboardChromium* chrome = static_cast<ClipboardChromium*>(clipboard); - HashSet<String> accessible(chrome->types()); - if (accessible.isEmpty()) - return false; - - RefPtr<ChromiumDataObject> dataObject(chrome->dataObject()); - if (dataObject && data) - *data = WebDragData(dataObject); - - return dataObject; -} - -static bool getRangeImpl(NPObject* npobj, WebRange* range) -{ - V8NPObject* v8npobject = reinterpret_cast<V8NPObject*>(npobj); - v8::Handle<v8::Object> v8object(v8npobject->v8Object); - if (!V8Range::info.equals(V8DOMWrapper::domWrapperType(v8object))) + V8NPObject* v8NPObject = reinterpret_cast<V8NPObject*>(object); + v8::Handle<v8::Object> v8Object(v8NPObject->v8Object); + if (!V8Range::info.equals(V8DOMWrapper::domWrapperType(v8Object))) return false; - Range* native = V8Range::toNative(v8object); + Range* native = V8Range::toNative(v8Object); if (!native) return false; - *range = WebRange(native); + *webRange = WebRange(native); return true; } -static bool getElementImpl(NPObject* npObj, WebElement* webElement) +static bool getElementImpl(NPObject* object, WebElement* webElement) { - if (!npObj || (npObj->_class != npScriptObjectClass)) + if (!object || (object->_class != npScriptObjectClass)) return false; - V8NPObject* v8NPObject = reinterpret_cast<V8NPObject*>(npObj); + V8NPObject* v8NPObject = reinterpret_cast<V8NPObject*>(object); v8::Handle<v8::Object> v8Object(v8NPObject->v8Object); Element* native = V8Element::toNative(v8Object); if (!native) @@ -316,7 +239,7 @@ static NPObject* makeIntArrayImpl(const WebVector<int>& data) { v8::HandleScope handleScope; v8::Handle<v8::Array> result = v8::Array::New(data.size()); - for (size_t i = 0; i < data.size(); i++) + for (size_t i = 0; i < data.size(); ++i) result->Set(i, v8::Number::New(data[i])); WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext()); @@ -334,28 +257,22 @@ static NPObject* makeStringArrayImpl(const WebVector<WebString>& data) return npCreateV8ScriptObject(0, result, window); } -#endif - -bool WebBindings::getDragData(NPObject* event, int* eventId, WebDragData* data) +static NPObject* makeNodeImpl(WebNode data) { -#if USE(V8) - return getDragDataImpl(event, eventId, data); -#else - // Not supported on other ports (JSC, etc). - return false; -#endif + v8::HandleScope handleScope; + if (data.isNull()) + return 0; + v8::Handle<v8::Object> result = V8Node::wrap(data.unwrap<Node>()); + WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext()); + return npCreateV8ScriptObject(0, result, window); } -bool WebBindings::isDragEvent(NPObject* event) -{ - int eventId; - return getDragData(event, &eventId, 0); -} +#endif -bool WebBindings::getRange(NPObject* range, WebRange* webrange) +bool WebBindings::getRange(NPObject* range, WebRange* webRange) { #if USE(V8) - return getRangeImpl(range, webrange); + return getRangeImpl(range, webRange); #else // Not supported on other ports (JSC, etc). return false; @@ -372,7 +289,7 @@ bool WebBindings::getElement(NPObject* element, WebElement* webElement) #endif } -NPObject* WebBindings::makeIntArray(const WebVector<int> & data) +NPObject* WebBindings::makeIntArray(const WebVector<int>& data) { #if USE(V8) return makeIntArrayImpl(data); @@ -392,6 +309,16 @@ NPObject* WebBindings::makeStringArray(const WebVector<WebString>& data) #endif } +NPObject* WebBindings::makeNode(const WebNode& data) +{ +#if USE(V8) + return makeNodeImpl(data); +#else + // Not supported on other ports (JSC, etc.). + return 0; +#endif +} + void WebBindings::pushExceptionHandler(ExceptionHandler handler, void* data) { WebCore::pushExceptionHandler(handler, data); |