Reviewed by Geoff.
authortomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 30 Mar 2006 23:30:27 +0000 (23:30 +0000)
committertomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 30 Mar 2006 23:30:27 +0000 (23:30 +0000)
        * DumpRenderTree/DumpRenderTree.m:
        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
        Add "objCPlugin", "objCPluginFunction" properties to the window.  objCPlugin simulates
        an Objective C object exposed to JS; objCPluginFunction simulates an Objective C method
        exposed to JS as a callable object.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Added ObjCPlugin.[hm], ObjCPluginFunction.[hm].

        * DumpRenderTree/ObjCPlugin.h: Added.
        * DumpRenderTree/ObjCPlugin.m: Added.
        * DumpRenderTree/ObjCPluginFunction.h: Added.
        * DumpRenderTree/ObjCPluginFunction.m: Added.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        Added a new method, "removeDefaultMethod", which removes the default method from the
        plugin object's class.  The effect is that the plugin object is mutated from a callable
        function to a simple object.
        (pluginInvoke):
        Handle "removeDefaultMethod".
        (pluginInvokeDefault):
        Made the default method actually do something (return 1).

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

WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/DumpRenderTree.m
WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj
WebKitTools/DumpRenderTree/ObjCPlugin.h [new file with mode: 0644]
WebKitTools/DumpRenderTree/ObjCPlugin.m [new file with mode: 0644]
WebKitTools/DumpRenderTree/ObjCPluginFunction.h [new file with mode: 0644]
WebKitTools/DumpRenderTree/ObjCPluginFunction.m [new file with mode: 0644]
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c

index cb2483613566c2cdd5d1564655cb564907e8e549..103748db25dc3e4d3d64892813e2294c6a81b35d 100644 (file)
@@ -1,3 +1,30 @@
+2006-03-30  Tim Omernick  <timo@apple.com>
+
+        Reviewed by Geoff.
+
+        * DumpRenderTree/DumpRenderTree.m:
+        (-[WaitUntilDoneDelegate webView:windowScriptObjectAvailable:]):
+        Add "objCPlugin", "objCPluginFunction" properties to the window.  objCPlugin simulates
+        an Objective C object exposed to JS; objCPluginFunction simulates an Objective C method
+        exposed to JS as a callable object.
+
+        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+        Added ObjCPlugin.[hm], ObjCPluginFunction.[hm].
+
+        * DumpRenderTree/ObjCPlugin.h: Added.
+        * DumpRenderTree/ObjCPlugin.m: Added.
+        * DumpRenderTree/ObjCPluginFunction.h: Added.
+        * DumpRenderTree/ObjCPluginFunction.m: Added.
+
+        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
+        Added a new method, "removeDefaultMethod", which removes the default method from the
+        plugin object's class.  The effect is that the plugin object is mutated from a callable
+        function to a simple object.
+        (pluginInvoke):
+        Handle "removeDefaultMethod".
+        (pluginInvokeDefault):
+        Made the default method actually do something (return 1).
+
 2006-03-30  Eric Seidel  <eseidel@apple.com>
 
         Reviewed by ggaren.
index 4d3bb4ce0cffeb91fe4a068fd63fc3be5a9a46fd..62373d9bbb04d94a85d651afec9fc4ad9034c876 100644 (file)
@@ -55,6 +55,8 @@
 #import "AppleScriptController.h"
 #import "EventSendingController.h"
 #import "EditingDelegate.h"
+#import "ObjCPlugin.h"
+#import "ObjCPluginFunction.h"
 
 @interface DumpRenderTreeWindow : NSWindow
 @end
@@ -468,16 +470,28 @@ static void dump(void)
     LayoutTestController *ltc = [[LayoutTestController alloc] init];
     [obj setValue:ltc forKey:@"layoutTestController"];
     [ltc release];
+    
     EventSendingController *esc = [[EventSendingController alloc] init];
     [obj setValue:esc forKey:@"eventSender"];
     [esc release];
+    
     TextInputController *tic = [[TextInputController alloc] initWithWebView:sender];
     [obj setValue:tic forKey:@"textInputController"];
     [tic release];
+    
     AppleScriptController *asc = [[AppleScriptController alloc] initWithWebView:sender];
     [obj setValue:asc forKey:@"appleScriptController"];
     [asc release];
+    
     [obj setValue:navigationController forKey:@"navigationController"];
+    
+    ObjCPlugin *plugin = [[ObjCPlugin alloc] init];
+    [obj setValue:plugin forKey:@"objCPlugin"];
+    [plugin release];
+    
+    ObjCPluginFunction *pluginFunction = [[ObjCPluginFunction alloc] init];
+    [obj setValue:pluginFunction forKey:@"objCPluginFunction"];
+    [pluginFunction release];
 }
 
 - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message
index b77c2a2cba27dcb89f8df5a39e21ee8521216286..8145b56dac167e21e44beeb3db472059e663e204 100644 (file)
                141BF453096A45EB00E0753C /* PluginObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 141BF447096A45C800E0753C /* PluginObject.h */; };
                14A6FB8A0971CAE5008B014F /* NavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A6FB880971CAE5008B014F /* NavigationController.h */; };
                14A6FB8B0971CAE5008B014F /* NavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 14A6FB890971CAE5008B014F /* NavigationController.m */; };
+               22181BD109DC8C4B008342E8 /* ObjCPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 22181BCD09DC8C4B008342E8 /* ObjCPlugin.h */; };
+               22181BD209DC8C4B008342E8 /* ObjCPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 22181BCE09DC8C4B008342E8 /* ObjCPlugin.m */; };
+               22181BD309DC8C4B008342E8 /* ObjCPluginFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 22181BCF09DC8C4B008342E8 /* ObjCPluginFunction.h */; };
+               22181BD409DC8C4B008342E8 /* ObjCPluginFunction.m in Sources */ = {isa = PBXBuildFile; fileRef = 22181BD009DC8C4B008342E8 /* ObjCPluginFunction.m */; };
                9340994C08540CAE007F3BC8 /* DumpRenderTreePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = 32A70AAB03705E1F00C91783 /* DumpRenderTreePrefix.h */; };
                9340994E08540CAE007F3BC8 /* DumpRenderTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* DumpRenderTree.m */; settings = {ATTRIBUTES = (); }; };
                9340995108540CAE007F3BC8 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9335435F03D75502008635CE /* WebKit.framework */; };
                141BF448096A45C800E0753C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; };
                14A6FB880971CAE5008B014F /* NavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigationController.h; sourceTree = "<group>"; };
                14A6FB890971CAE5008B014F /* NavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NavigationController.m; sourceTree = "<group>"; };
+               22181BCD09DC8C4B008342E8 /* ObjCPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ObjCPlugin.h; sourceTree = "<group>"; };
+               22181BCE09DC8C4B008342E8 /* ObjCPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ObjCPlugin.m; sourceTree = "<group>"; };
+               22181BCF09DC8C4B008342E8 /* ObjCPluginFunction.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ObjCPluginFunction.h; sourceTree = "<group>"; };
+               22181BD009DC8C4B008342E8 /* ObjCPluginFunction.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ObjCPluginFunction.m; sourceTree = "<group>"; };
                32A70AAB03705E1F00C91783 /* DumpRenderTreePrefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DumpRenderTreePrefix.h; sourceTree = "<group>"; };
                9335435F03D75502008635CE /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
                9340995408540CAF007F3BC8 /* DumpRenderTree */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = DumpRenderTree; sourceTree = BUILT_PRODUCTS_DIR; };
                                B5A7525808AF4A3600138E45 /* ImageDiff.m */,
                                14A6FB880971CAE5008B014F /* NavigationController.h */,
                                14A6FB890971CAE5008B014F /* NavigationController.m */,
+                               22181BCD09DC8C4B008342E8 /* ObjCPlugin.h */,
+                               22181BCE09DC8C4B008342E8 /* ObjCPlugin.m */,
+                               22181BCF09DC8C4B008342E8 /* ObjCPluginFunction.h */,
+                               22181BD009DC8C4B008342E8 /* ObjCPluginFunction.m */,
                                A803FF6409CAACC1009B2A37 /* Frameworks */,
                                9340995508540CAF007F3BC8 /* Products */,
                        );
                                14A6FB8A0971CAE5008B014F /* NavigationController.h in Headers */,
                                E1330800099624DA00AC0A91 /* AppleScriptController.h in Headers */,
                                A803FFF509CAAFE0009B2A37 /* EditingDelegate.h in Headers */,
+                               22181BD109DC8C4B008342E8 /* ObjCPlugin.h in Headers */,
+                               22181BD309DC8C4B008342E8 /* ObjCPluginFunction.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                14A6FB8B0971CAE5008B014F /* NavigationController.m in Sources */,
                                E1330801099624DA00AC0A91 /* AppleScriptController.m in Sources */,
                                A803FFF609CAAFE0009B2A37 /* EditingDelegate.m in Sources */,
+                               22181BD209DC8C4B008342E8 /* ObjCPlugin.m in Sources */,
+                               22181BD409DC8C4B008342E8 /* ObjCPluginFunction.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
diff --git a/WebKitTools/DumpRenderTree/ObjCPlugin.h b/WebKitTools/DumpRenderTree/ObjCPlugin.h
new file mode 100644 (file)
index 0000000..40af117
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2005 Ben La Monica <ben.lamonica@gmail.com>.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface ObjCPlugin : NSObject
+{
+}
+
+@end
diff --git a/WebKitTools/DumpRenderTree/ObjCPlugin.m b/WebKitTools/DumpRenderTree/ObjCPlugin.m
new file mode 100644 (file)
index 0000000..b729ecb
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2005 Ben La Monica <ben.lamonica@gmail.com>.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+#import "ObjCPlugin.h"
+
+
+@implementation ObjCPlugin
+
+@end
diff --git a/WebKitTools/DumpRenderTree/ObjCPluginFunction.h b/WebKitTools/DumpRenderTree/ObjCPluginFunction.h
new file mode 100644 (file)
index 0000000..782744e
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2005 Ben La Monica <ben.lamonica@gmail.com>.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface ObjCPluginFunction : NSObject
+{
+}
+
+@end
diff --git a/WebKitTools/DumpRenderTree/ObjCPluginFunction.m b/WebKitTools/DumpRenderTree/ObjCPluginFunction.m
new file mode 100644 (file)
index 0000000..3cfd889
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+
+#import "ObjCPluginFunction.h"
+
+
+@implementation ObjCPluginFunction
+
+- (id)invokeDefaultMethodWithArguments:(NSArray *)args
+{
+    return @"test";
+}
+
+@end
index 9bbf16df9325841430fe21aafa1007c34e6e74c7..fb14438d79647651ee58080c64c6b86027915fb2 100644 (file)
@@ -75,12 +75,15 @@ static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
 
 #define ID_TEST_CALLBACK_METHOD     0
 #define ID_TEST_GETURL              1
-#define NUM_METHOD_IDENTIFIERS      2
+#define ID_REMOVE_DEFAULT_METHOD    2
+
+#define NUM_METHOD_IDENTIFIERS      3
 
 static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
 static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
     "testCallback",
-    "getURL"
+    "getURL",
+    "removeDefaultMethod",
 };
 
 static NPUTF8* createCStringFromNPVariant(const NPVariant *variant)
@@ -159,6 +162,10 @@ static bool pluginInvoke(NPObject *header, NPIdentifier name, const NPVariant *a
             VOID_TO_NPVARIANT(*result);
             return true;
         }
+    } else if (name == pluginMethodIdentifiers[ID_REMOVE_DEFAULT_METHOD]) {
+        pluginClass.invokeDefault = 0;
+        VOID_TO_NPVARIANT(*result);
+        return true;
     }
 
     return false;
@@ -166,7 +173,8 @@ static bool pluginInvoke(NPObject *header, NPIdentifier name, const NPVariant *a
 
 static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result)
 {
-    return false;
+    INT32_TO_NPVARIANT(1, *result);
+    return true;
 }
 
 static void pluginInvalidate(NPObject *obj)