Diff
Modified: trunk/Source/WebCore/ChangeLog (125252 => 125253)
--- trunk/Source/WebCore/ChangeLog 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebCore/ChangeLog 2012-08-10 05:45:33 UTC (rev 125253)
@@ -1,3 +1,20 @@
+2012-08-09 Simon Hausmann <[email protected]>
+
+ [Qt] Remove support for __qt_sender__ in QObject bridge
+ https://bugs.webkit.org/show_bug.cgi?id=93649
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Support for __qt_sender__ has also been removed from QtScript/QJSEngine. The right
+ _javascript_ solution to the problem is Function.prototype.bind.
+
+ * bridge/qt/qt_instance.cpp:
+ (Bindings):
+ * bridge/qt/qt_instance.h:
+ * bridge/qt/qt_runtime.cpp:
+ (Bindings):
+ (JSC::Bindings::QtConnectionObject::execute):
+
2012-08-09 Shane Stephens <[email protected]>
Convert CSSParser's m_reusableSelectorVector to OwnPtr and rename to m_selectorVector.
Modified: trunk/Source/WebCore/bridge/qt/qt_instance.cpp (125252 => 125253)
--- trunk/Source/WebCore/bridge/qt/qt_instance.cpp 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebCore/bridge/qt/qt_instance.cpp 2012-08-10 05:45:33 UTC (rev 125253)
@@ -44,9 +44,6 @@
typedef QMultiHash<void*, QtInstance*> QObjectInstanceMap;
static QObjectInstanceMap cachedInstances;
-// Used for implementing '__qt_sender__'.
-Q_GLOBAL_STATIC(QtInstance::QtSenderStack, senderStack)
-
// Derived RuntimeObject
class QtRuntimeObject : public RuntimeObject {
public:
@@ -314,11 +311,6 @@
return stringValue(exec);
}
-QtInstance::QtSenderStack* QtInstance::qtSenderStack()
-{
- return senderStack();
-}
-
// In qt_runtime.cpp
JSValue convertQVariantToValue(ExecState*, PassRefPtr<RootObject> root, const QVariant& variant);
QVariant convertValueToQVariant(ExecState*, JSValue, QMetaType::Type hint, int *distance);
Modified: trunk/Source/WebCore/bridge/qt/qt_instance.h (125252 => 125253)
--- trunk/Source/WebCore/bridge/qt/qt_instance.h 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebCore/bridge/qt/qt_instance.h 2012-08-10 05:45:33 UTC (rev 125253)
@@ -85,9 +85,6 @@
QStack<QObject*> m_stack;
};
- // Used to implement '__qt_sender__'.
- static QtSenderStack* qtSenderStack();
-
private:
class QtWeakObjectReference {
Modified: trunk/Source/WebCore/bridge/qt/qt_runtime.cpp (125252 => 125253)
--- trunk/Source/WebCore/bridge/qt/qt_runtime.cpp 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebCore/bridge/qt/qt_runtime.cpp 2012-08-10 05:45:33 UTC (rev 125253)
@@ -1862,13 +1862,6 @@
}
// End of moc-generated code
-static bool isJavaScriptFunction(JSObjectRef object)
-{
- CallData callData;
- JSObject* jsObject = toJS(object);
- return jsObject->methodTable()->getCallData(jsObject, callData) == CallTypeJS;
-}
-
void QtConnectionObject::execute(void** argv)
{
QObject* sender = m_senderInstance->getObject();
@@ -1897,14 +1890,7 @@
args[i] = ::toRef(exec, convertQVariantToValue(exec, rootObject, QVariant(argType, argv[i+1])));
}
- const bool updateQtSender = isJavaScriptFunction(m_receiverFunction);
- if (updateQtSender)
- QtInstance::qtSenderStack()->push(QObject::sender());
-
JSObjectCallAsFunction(m_context, m_receiverFunction, m_receiver, argc, args.data(), 0);
-
- if (updateQtSender)
- QtInstance::qtSenderStack()->pop();
}
bool QtConnectionObject::match(JSContextRef context, QObject* sender, int signalIndex, JSObjectRef receiver, JSObjectRef receiverFunction)
Modified: trunk/Source/WebKit/qt/Api/qwebframe.cpp (125252 => 125253)
--- trunk/Source/WebKit/qt/Api/qwebframe.cpp 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebKit/qt/Api/qwebframe.cpp 2012-08-10 05:45:33 UTC (rev 125253)
@@ -488,45 +488,9 @@
void QWebFramePrivate::didClearWindowObject()
{
- if (page->settings()->testAttribute(QWebSettings::_javascript_Enabled))
- addQtSenderToGlobalObject();
emit q->_javascript_WindowObjectCleared();
}
-static JSValueRef qtSenderCallback(JSContextRef context, JSObjectRef, JSObjectRef, size_t, const JSValueRef[], JSValueRef*)
-{
- QObject* sender = JSC::Bindings::QtInstance::qtSenderStack()->top();
- if (!sender)
- return JSValueMakeUndefined(context);
-
- JSC::ExecState* exec = ::toJS(context);
- RefPtr<JSC::Bindings::RootObject> rootObject = JSC::Bindings::findRootObject(exec->dynamicGlobalObject());
- JSC::JSObject* jsSender = JSC::Bindings::QtInstance::getQtInstance(sender, rootObject, JSC::Bindings::QtInstance::QtOwnership)->createRuntimeObject(exec);
- return ::toRef(jsSender);
-}
-
-void QWebFramePrivate::addQtSenderToGlobalObject()
-{
- JSDOMWindow* window = toJSDOMWindow(frame, mainThreadNormalWorld());
- Q_ASSERT(window);
-
- JSC::ExecState* exec = window->globalExec();
- Q_ASSERT(exec);
- JSC::JSLockHolder lock(exec);
-
- JSContextRef context = ::toRef(exec);
- JSRetainPtr<JSStringRef> propertyName(Adopt, JSStringCreateWithUTF8CString("__qt_sender__"));
- JSObjectRef function = JSObjectMakeFunctionWithCallback(context, propertyName.get(), qtSenderCallback);
-
- // JSC public API doesn't support setting a Getter for a property of a given object, https://bugs.webkit.org/show_bug.cgi?id=61374.
- JSC::PropertyDescriptor descriptor;
- descriptor.setGetter(::toJS(function));
- descriptor.setSetter(JSC::jsUndefined());
- descriptor.setEnumerable(false);
- descriptor.setConfigurable(false);
- window->methodTable()->defineOwnProperty(window, exec, propertyName.get()->identifier(&exec->globalData()), descriptor, false);
-}
-
/*!
\class QWebFrame
\since 4.4
Modified: trunk/Source/WebKit/qt/Api/qwebframe_p.h (125252 => 125253)
--- trunk/Source/WebKit/qt/Api/qwebframe_p.h 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebKit/qt/Api/qwebframe_p.h 2012-08-10 05:45:33 UTC (rev 125253)
@@ -129,11 +129,6 @@
#if ENABLE(ORIENTATION_EVENTS)
QOrientationSensor m_orientation;
#endif // ENABLE(ORIENTATION_EVENTS).
-
-private:
-#if USE(JSC)
- void addQtSenderToGlobalObject();
-#endif
};
class QWebHitTestResultPrivate {
Modified: trunk/Source/WebKit/qt/ChangeLog (125252 => 125253)
--- trunk/Source/WebKit/qt/ChangeLog 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebKit/qt/ChangeLog 2012-08-10 05:45:33 UTC (rev 125253)
@@ -1,3 +1,20 @@
+2012-08-09 Simon Hausmann <[email protected]>
+
+ [Qt] Remove support for __qt_sender__ in QObject bridge
+ https://bugs.webkit.org/show_bug.cgi?id=93649
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Support for __qt_sender__ has also been removed from QtScript/QJSEngine. The right
+ _javascript_ solution to the problem is Function.prototype.bind.
+
+ * Api/qwebframe.cpp:
+ (QWebFramePrivate::didClearWindowObject):
+ * Api/qwebframe_p.h:
+ (QWebFramePrivate):
+ * tests/qobjectbridge/tst_qobjectbridge.cpp:
+ (tst_QObjectBridge::connectAndDisconnect):
+
2012-08-08 Simon Hausmann <[email protected]>
[Qt] Port internal findMethodIndex method matcher to use JSC C API
Modified: trunk/Source/WebKit/qt/tests/qobjectbridge/tst_qobjectbridge.cpp (125252 => 125253)
--- trunk/Source/WebKit/qt/tests/qobjectbridge/tst_qobjectbridge.cpp 2012-08-10 05:14:13 UTC (rev 125252)
+++ trunk/Source/WebKit/qt/tests/qobjectbridge/tst_qobjectbridge.cpp 2012-08-10 05:45:33 UTC (rev 125253)
@@ -1417,7 +1417,7 @@
QCOMPARE(type, sError);
}
- evalJS("myHandler = function() { window.gotSignal = true; window.signalArgs = arguments; window.slotThisObject = this; window.signalSender = __qt_sender__; }");
+ evalJS("myHandler = function() { window.gotSignal = true; window.signalArgs = arguments; window.slotThisObject = this; }");
QCOMPARE(evalJS("myObject.mySignal.connect(myHandler)"), sUndefined);
@@ -1425,7 +1425,6 @@
evalJS("myObject.mySignal()");
QCOMPARE(evalJS("gotSignal"), sTrue);
QCOMPARE(evalJS("signalArgs.length == 0"), sTrue);
- QCOMPARE(evalJS("signalSender"), evalJS("myObject"));
QCOMPARE(evalJS("slotThisObject == window"), sTrue);
evalJS("gotSignal = false");
@@ -1489,7 +1488,6 @@
QCOMPARE(evalJS("gotSignal"), sTrue);
QCOMPARE(evalJS("signalArgs.length == 0"), sTrue);
QCOMPARE(evalJS("slotThisObject"), evalJS("otherObject"));
- QCOMPARE(evalJS("signalSender"), evalJS("myObject"));
QCOMPARE(evalJS("slotThisObject.name"), QLatin1String("foo"));
QCOMPARE(evalJS("myObject.mySignal.disconnect(otherObject, myHandler)"), sUndefined);
@@ -1500,7 +1498,6 @@
QCOMPARE(evalJS("gotSignal"), sTrue);
QCOMPARE(evalJS("signalArgs.length == 1"), sTrue);
QCOMPARE(evalJS("slotThisObject == yetAnotherObject"), sTrue);
- QCOMPARE(evalJS("signalSender == myObject"), sTrue);
QCOMPARE(evalJS("slotThisObject.name"), QLatin1String("bar"));
QCOMPARE(evalJS("myObject.mySignal2.disconnect(yetAnotherObject, myHandler)"), sUndefined);
@@ -1510,7 +1507,6 @@
QCOMPARE(evalJS("gotSignal"), sTrue);
QCOMPARE(evalJS("signalArgs.length == 1"), sTrue);
QCOMPARE(evalJS("slotThisObject == myObject"), sTrue);
- QCOMPARE(evalJS("signalSender == myObject"), sTrue);
QCOMPARE(evalJS("myObject.mySignal2.disconnect(myObject, myHandler)"), sUndefined);
// connect(obj, string)