java/java-and-plugins.html test failing
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Mar 2012 04:39:37 +0000 (04:39 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Mar 2012 04:39:37 +0000 (04:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=81188
<rdar://problem/11048657>

Reviewed by Sam Weinig.

Source/WebKit/mac:

When we're marshaling JSObjects that wrap plug-in objects, make sure to check that the
current plug-in instance is the same as the plug-in instance the object came from and don't
pass the unwrapped object ID if that is the case.

* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::getObjectID):
(WebKit::NetscapePluginInstanceProxy::addValueToArray):
(WebKit::NetscapePluginInstanceProxy::marshalValues):
* Plugins/Hosted/ProxyInstance.h:
(ProxyInstance):
(WebKit::ProxyInstance::instanceProxy):

Source/WebKit2:

When we're marshaling NPObjects that wrap plug-in objects, make sure to check that the
current plug-in instance is the same as the plug-in instance the object came from and don't
pass the unwrapped object ID if that is the case.

* Shared/Plugins/NPRemoteObjectMap.cpp:
(WebKit::remoteNPObjectID):
(WebKit::NPRemoteObjectMap::npVariantToNPVariantData):

LayoutTests:

Remove part of this test that tested trying to call a java method on an NPObject; on Snow Leopard
and newer the Java plug-in is also a NPAPI plug-in so the two removed tests would fail.

* java/java-and-plugins-expected.txt:
* java/java-and-plugins.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@110820 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/java/java-and-plugins-expected.txt
LayoutTests/java/java-and-plugins.html
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm
Source/WebKit/mac/Plugins/Hosted/ProxyInstance.h
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp

index de5aab6..b73ccdd 100644 (file)
@@ -1,3 +1,17 @@
+2012-03-14  Anders Carlsson  <andersca@apple.com>
+
+        java/java-and-plugins.html test failing
+        https://bugs.webkit.org/show_bug.cgi?id=81188
+        <rdar://problem/11048657>
+
+        Reviewed by Sam Weinig.
+
+        Remove part of this test that tested trying to call a java method on an NPObject; on Snow Leopard
+        and newer the Java plug-in is also a NPAPI plug-in so the two removed tests would fail.
+
+        * java/java-and-plugins-expected.txt:
+        * java/java-and-plugins.html:
+
 2012-03-14  Jessie Berlin  <jberlin@apple.com>
 
         Mac rebaseline after r110667.
index 6882241..0d30eb0 100644 (file)
@@ -10,8 +10,6 @@ PASS document.plg.testHasMethod(document.javaTest.getSelf(), "getSelf") is true
 PASS document.plg.testHasMethod(document.javaTest.getSelf(), "doesNotExist") is false
 PASS document.javaTest.getAndForgetRememberedObject().objectPointer is document.plg.testObject.objectPointer
 PASS typeof document.javaTest.testGetMember(document.plg, "testDOMAccess") is "function"
-PASS tryCall(document.javaTest.getSelf, plg.testObject) is "TypeError: Attempt to invoke non-plug-in method on plug-in object."
-PASS tryCall(plg.testObject.throwException, document.javaTest) is "TypeError: Attempt to invoke non-Java method on Java object."
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7ed69bf..3bcfd8b 100644 (file)
@@ -33,21 +33,6 @@ shouldBe('document.javaTest.getAndForgetRememberedObject().objectPointer', 'docu
 
 shouldBe('typeof document.javaTest.testGetMember(document.plg, "testDOMAccess")', '"function"');
 
-// Try calling a plug-in method with a Java object as this, and vice versa.
-// These should throw an exception.
-function tryCall(func, thisObj)
-{
-    var exception = "NO EXCEPTION";
-    try {
-        func.call(thisObj);
-    } catch (e) {
-        exception = e;
-    }
-    return String(exception);
-}
-shouldBe('tryCall(document.javaTest.getSelf, plg.testObject)', '"TypeError: Attempt to invoke non-plug-in method on plug-in object."');
-shouldBe('tryCall(plg.testObject.throwException, document.javaTest)', '"TypeError: Attempt to invoke non-Java method on Java object."');
-
 </script>
 <script src="../fast/js/resources/js-test-post.js"></script>
 </body>
index 2d8cd0a..05094e5 100644 (file)
@@ -1,3 +1,23 @@
+2012-03-14  Anders Carlsson  <andersca@apple.com>
+
+        java/java-and-plugins.html test failing
+        https://bugs.webkit.org/show_bug.cgi?id=81188
+        <rdar://problem/11048657>
+
+        Reviewed by Sam Weinig.
+
+        When we're marshaling JSObjects that wrap plug-in objects, make sure to check that the
+        current plug-in instance is the same as the plug-in instance the object came from and don't
+        pass the unwrapped object ID if that is the case.
+        
+        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+        (WebKit::getObjectID):
+        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
+        (WebKit::NetscapePluginInstanceProxy::marshalValues):
+        * Plugins/Hosted/ProxyInstance.h:
+        (ProxyInstance):
+        (WebKit::ProxyInstance::instanceProxy):
+
 2012-03-14  Michael Saboff  <msaboff@apple.com>
 
         REGRESSION(r110383): ASSERTION failures in JSCell::finishCreation causing multiple tests to "crash" on the Lion Intel Debug Bots
index 609ccf0..eb86a2e 100644 (file)
@@ -1252,6 +1252,23 @@ bool NetscapePluginInstanceProxy::enumerate(uint32_t objectID, data_t& resultDat
     return true;
 }
 
+static bool getObjectID(NetscapePluginInstanceProxy* pluginInstanceProxy, JSObject* object, uint64_t& objectID)
+{
+    if (object->classInfo() != &ProxyRuntimeObject::s_info)
+        return false;
+
+    ProxyRuntimeObject* runtimeObject = static_cast<ProxyRuntimeObject*>(object);
+    ProxyInstance* instance = runtimeObject->getInternalProxyInstance();
+    if (!instance)
+        return false;
+
+    if (instance->instanceProxy() != pluginInstanceProxy)
+        return false;
+
+    objectID = instance->objectID();
+    return true;
+}
+    
 void NetscapePluginInstanceProxy::addValueToArray(NSMutableArray *array, ExecState* exec, JSValue value)
 {
     JSLock lock(SilenceAssertionsOnly);
@@ -1269,12 +1286,10 @@ void NetscapePluginInstanceProxy::addValueToArray(NSMutableArray *array, ExecSta
         [array addObject:[NSNumber numberWithInt:NullValueType]];
     else if (value.isObject()) {
         JSObject* object = asObject(value);
-        if (object->classInfo() == &ProxyRuntimeObject::s_info) {
-            ProxyRuntimeObject* runtimeObject = static_cast<ProxyRuntimeObject*>(object);
-            if (ProxyInstance* instance = runtimeObject->getInternalProxyInstance()) {
-                [array addObject:[NSNumber numberWithInt:NPObjectValueType]];
-                [array addObject:[NSNumber numberWithInt:instance->objectID()]];
-            }
+        uint64_t objectID;
+        if (getObjectID(this, object, objectID)) {
+            [array addObject:[NSNumber numberWithInt:NPObjectValueType]];
+            [array addObject:[NSNumber numberWithInt:objectID]];
         } else {
             [array addObject:[NSNumber numberWithInt:JSObjectValueType]];
             [array addObject:[NSNumber numberWithInt:m_localObjects.idForObject(exec->globalData(), object)]];
index 65f3a51..b999fa9 100644 (file)
@@ -52,6 +52,9 @@ public:
     JSC::JSValue fieldValue(JSC::ExecState*, const JSC::Bindings::Field*) const;
     void setFieldValue(JSC::ExecState*, const JSC::Bindings::Field*, JSC::JSValue) const;
     
+
+    NetscapePluginInstanceProxy* instanceProxy() { return m_instanceProxy; }
+
     void invalidate();
     
     uint32_t objectID() const { return m_objectID; }
index 6c96a2b..0f36889 100644 (file)
@@ -1,3 +1,19 @@
+2012-03-14  Anders Carlsson  <andersca@apple.com>
+
+        java/java-and-plugins.html test failing
+        https://bugs.webkit.org/show_bug.cgi?id=81188
+        <rdar://problem/11048657>
+
+        Reviewed by Sam Weinig.
+
+        When we're marshaling NPObjects that wrap plug-in objects, make sure to check that the
+        current plug-in instance is the same as the plug-in instance the object came from and don't
+        pass the unwrapped object ID if that is the case.
+
+        * Shared/Plugins/NPRemoteObjectMap.cpp:
+        (WebKit::remoteNPObjectID):
+        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
+
 2012-03-14  Matt Falkenhagen  <falken@chromium.org>
 
         Allow per-script font settings to be specified in layout tests
index 3f584ae..7641af5 100644 (file)
@@ -88,6 +88,18 @@ void NPRemoteObjectMap::unregisterNPObject(uint64_t npObjectID)
     m_registeredNPObjects.remove(npObjectID);
 }
 
+static uint64_t remoteNPObjectID(Plugin* plugin, NPObject* npObject)
+{
+    if (!NPObjectProxy::isNPObjectProxy(npObject))
+        return 0;
+
+    NPObjectProxy* npObjectProxy = NPObjectProxy::toNPObjectProxy(npObject);
+    if (npObjectProxy->plugin() != plugin)
+        return 0;
+
+    return npObjectProxy->npObjectID();
+}
+
 NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& variant, Plugin* plugin)
 {
     switch (variant.type) {
@@ -111,14 +123,11 @@ NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& varia
 
     case NPVariantType_Object: {
         NPObject* npObject = variant.value.objectValue;
-        if (NPObjectProxy::isNPObjectProxy(npObject)) {
-            NPObjectProxy* npObjectProxy = NPObjectProxy::toNPObjectProxy(npObject);
-
-            uint64_t npObjectID = npObjectProxy->npObjectID();
 
+        if (uint64_t npObjectID = remoteNPObjectID(plugin, npObject)) {
             // FIXME: Under some circumstances, this might leak the NPObjectProxy object. 
             // Figure out how to avoid that.
-            retainNPObject(npObjectProxy);
+            retainNPObject(npObject);
             return NPVariantData::makeRemoteNPObjectID(npObjectID);
         }