16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync/* ***** BEGIN LICENSE BLOCK *****
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Version: MPL 1.1/GPL 2.0/LGPL 2.1
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * The contents of this file are subject to the Mozilla Public License Version
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * 1.1 (the "License"); you may not use this file except in compliance with
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * the License. You may obtain a copy of the License at
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * http://www.mozilla.org/MPL/
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Software distributed under the License is distributed on an "AS IS" basis,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * for the specific language governing rights and limitations under the
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * License.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * The Original Code is the Python XPCOM language bindings.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * The Initial Developer of the Original Code is
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * ActiveState Tool Corp.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Portions created by the Initial Developer are Copyright (C) 2000
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * the Initial Developer. All Rights Reserved.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Contributor(s):
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Mark Hammond <MarkH@ActiveState.com> (original author)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Alternatively, the contents of this file may be used under the terms of
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * either the GNU General Public License Version 2 or later (the "GPL"), or
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * in which case the provisions of the GPL or the LGPL are applicable instead
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * of those above. If you wish to allow use of your version of this file only
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * under the terms of either the GPL or the LGPL, and not to allow others to
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * use your version of this file under the terms of the MPL, indicate your
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * decision by deleting the provisions above and replace them with the notice
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * and other provisions required by the GPL or the LGPL. If you do not delete
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * the provisions above, a recipient may use your version of this file under
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * the terms of any one of the MPL, the GPL or the LGPL.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * ***** END LICENSE BLOCK ***** */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// NOTE: This is a TEST interface, not a DEMO interface :-)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// We try to get as many data-types etc exposed, meaning this
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// doesnt really make a good demo of a "simple component"
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync#include "nsISupports.idl"
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync#include "nsIVariant.idl"
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync[scriptable, uuid(1ECAED4F-E4D5-4ee7-ABF0-7D72AE1441D7)]
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncinterface nsIPythonTestInterface : nsISupports
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync{
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Some constants for us to test - one for every type supported by xpidl
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync const short One = 1;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync const long Two = 2;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync const long MinusOne = -1;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync const long BigLong = 0x7FFFFFFF;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync const long BiggerLong = 0xFFFFFFFF;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync const unsigned long BigULong = 0xFFFFFFFF;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Declare every type supported as an attribute.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute boolean boolean_value; // PRBool
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute octet octet_value; // PRUint8
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute short short_value; // PRInt16
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute unsigned short ushort_value; // PRUint16
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute long long_value; // PRInt32
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute unsigned long ulong_value; // PRUint32
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute long long long_long_value; // PRInt64
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute unsigned long long ulong_long_value; // PRUint64
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute float float_value; // float
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute double double_value; // double
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute char char_value; // char
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute wchar wchar_value; // PRUnichar
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute string string_value; // char *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute wstring wstring_value; // PRUnichar*
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute AString astring_value; // nsAString &
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute ACString acstring_value; // nsACString &
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute AUTF8String utf8string_value; // nsAUTF8String &
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute nsIIDRef iid_value; // an IID
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute nsIPythonTestInterface interface_value; // A specific interface
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute nsISupports isupports_value; // A generic interface
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Declare every type supported as a method with an "in", "in/out" and "out" params
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync boolean do_boolean(in boolean p1, inout boolean p2, out boolean p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync octet do_octet(in octet p1, inout octet p2, out octet p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync short do_short(in short p1, inout short p2, out short p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync unsigned short do_unsigned_short(in unsigned short p1, inout unsigned short p2, out unsigned short p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync long do_long(in long p1, inout long p2, out long p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync unsigned long do_unsigned_long(in unsigned long p1, inout unsigned long p2, out unsigned long p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync long long do_long_long(in long long p1, inout long long p2, out long long p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync unsigned long long do_unsigned_long_long(in unsigned long long p1, inout unsigned long long p2, out unsigned long long p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync float do_float(in float p1, inout float p2, out float p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync double do_double(in double p1, inout double p2, out double p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync char do_char(in char p1, inout char p2, out char p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync wchar do_wchar(in wchar p1, inout wchar p2, out wchar p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync string do_string(in string p1, inout string p2, out string p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync wstring do_wstring(in wstring p1, inout wstring p2, out wstring p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync nsIIDRef do_nsIIDRef(in nsIIDRef p1, inout nsIIDRef p2, out nsIIDRef p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync nsIPythonTestInterface do_nsIPythonTestInterface(in nsIPythonTestInterface p1, inout nsIPythonTestInterface p2, out nsIPythonTestInterface p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync nsISupports do_nsISupports(in nsISupports p1, inout nsISupports p2, out nsISupports p3);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void do_nsISupportsIs(in nsIIDRef iid, [iid_is(iid),retval] out nsQIResult result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// Do I really need these??
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// void do_nsISupportsIs2(inout nsIIDRef iid, [iid_is(iid)] inout nsQIResult result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// void do_nsISupportsIs3(out nsIIDRef iid, [iid_is(iid)] inout nsQIResult result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// void do_nsISupportsIs4(out nsIIDRef iid, [iid_is(iid)] out nsQIResult result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync};
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// Another interface - we use another interface purely for testing purposes -
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// We ensure that the entire interface hierarcy is available correctly.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync[scriptable, uuid(B38D1538-FE92-42c3-831F-285242EDEEA4)]
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncinterface nsIPythonTestInterfaceExtra : nsIPythonTestInterface
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync{
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // These were copied from the XPCOM test 'xpctest.idl'
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // (and a few extras added)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void MultiplyEachItemInIntegerArray(
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync in PRInt32 val,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout PRInt32 valueArray);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void MultiplyEachItemInIntegerArrayAndAppend(
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync in PRInt32 val,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout PRInt32 valueArray);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Note that this method shares a single "size_is" between 2 params!
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CompareStringArrays([array, size_is(count)] in string arr1,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] in string arr2,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync in unsigned long count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [retval] out short result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleStringArray(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout string valueArray);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void ReverseStringArray(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout string valueArray);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // One count, one inout array.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleString(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)] inout string str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // One in count and in array, plus out count and out array
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleString2(in PRUint32 in_count, [size_is(in_count)] in string in_str,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync out PRUint32 out_count, [size_is(out_count)] out string out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // As per DoubleString2, but out string also marked retval
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleString3(in PRUint32 in_count, [size_is(in_count)] in string in_str,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync out PRUint32 out_count, [size_is(out_count), retval] out string out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // One in array, one out array, one share inout count.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleString4([size_is(count)] in string in_str, inout PRUint32 count, [size_is(count)] out string out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // UpString defines the count as only "in" - meaning the result must be the same size
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void UpString(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)] inout string str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // UpString2 defines count as only "in", and a string as only "out"
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void UpString2(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)] in string in_str,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)]out string out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CopyUTF8String(in AUTF8String in_str, out AUTF8String out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CopyUTF8String2(in AUTF8String in_str, out AUTF8String out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test we can get an "out" array with an "in" size (and the size is not used anywhere as a size for an in!)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetFixedString(in PRUint32 count, [size_is(count)]out string out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleWideString(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)] inout wstring str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleWideString2(in PRUint32 in_count, [size_is(in_count)] in wstring in_str,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync out PRUint32 out_count, [size_is(out_count)] out wstring out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleWideString3(in PRUint32 in_count, [size_is(in_count)] in wstring in_str,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync out PRUint32 out_count, [size_is(out_count), retval] out wstring out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void DoubleWideString4([size_is(count)] in wstring in_str, inout PRUint32 count, [size_is(count)] out wstring out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // UpWideString defines the count as only "in" - meaning the result must be the same size
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void UpWideString(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)] inout wstring str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // UpWideString2 defines count as only "in", and a string as only "out"
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void UpWideString2(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)] in wstring in_str,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [size_is(count)]out wstring out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test we can get an "out" array with an "in" size (and the size is not used anywhere as a size for an in!)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetFixedWideString(in PRUint32 count, [size_is(count)]out string out_str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetStrings(out PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [retval, array, size_is(count)] out string str);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void UpOctetArray(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout PRUint8 data);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void UpOctetArray2(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout PRUint8 data);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Arrays of interfaces
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CheckInterfaceArray(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] in nsISupports data,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [retval] out PRBool all_non_null);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CopyInterfaceArray(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] in nsISupports data,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(out_count)] out nsISupports out_data,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync out PRUint32 out_count);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetInterfaceArray(out PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] out nsISupports data);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void ExtendInterfaceArray(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout nsISupports data);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Arrays of IIDs
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CheckIIDArray(in PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] in nsIIDRef data,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [retval] out PRBool all_mine);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetIIDArray(out PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] out nsIIDRef data);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void ExtendIIDArray(inout PRUint32 count,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [array, size_is(count)] inout nsIIDRef data);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // More specific tests.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test our count param can be shared as an "in" param.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void SumArrays(in PRUint32 count, [array, size_is(count)]in PRInt32 array1, [array, size_is(count)]in PRInt32 array2, [retval]out PRInt32 result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test our count param can be shared as an "out" param.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetArrays(out PRUint32 count, [array, size_is(count)]out PRInt32 array1, [array, size_is(count)]out PRInt32 array2);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test we can get an "out" array with an "in" size (and the size is not used anywhere as a size for an in!)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetFixedArray(in PRUint32 count, [array, size_is(count)]out PRInt32 array1);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test our "in" count param can be shared as one "in", plus one "out" param.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CopyArray(in PRUint32 count, [array, size_is(count)]in PRInt32 array1, [array, size_is(count)]out PRInt32 array2);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test our "in-out" count param can be shared as one "in", plus one "out" param.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void CopyAndDoubleArray(inout PRUint32 count, [array, size_is(count)]in PRInt32 array1, [array, size_is(count)]out PRInt32 array2);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync // Test our "in-out" count param can be shared as one "in", plus one "in-out" param.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void AppendArray(inout PRUint32 count, [array, size_is(count)]in PRInt32 array1, [array, size_is(count)]inout PRInt32 array2);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void AppendVariant(in nsIVariant variant, inout nsIVariant result);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync nsIVariant CopyVariant(in nsIVariant variant);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync nsIVariant SumVariants(in PRUint32 incount, [array, size_is(incount)]in nsIVariant variants);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync};
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// DOM String support is a "recent" (01/2001) addition to XPCOM. These test
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync// have their own interface for no real good reason ;-)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync[scriptable, uuid(657ae651-a973-4818-8c06-f4b948b3d758)]
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncinterface nsIPythonTestInterfaceDOMStrings : nsIPythonTestInterfaceExtra
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync{
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DOMString GetDOMStringResult(in PRInt32 length);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void GetDOMStringOut(in PRInt32 length, [retval] out DOMString s);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync PRUint32 GetDOMStringLength(in DOMString s);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync PRUint32 GetDOMStringRefLength(in DOMStringRef s);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync PRUint32 GetDOMStringPtrLength(in DOMStringPtr s);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync void ConcatDOMStrings(in DOMString s1, in DOMString s2, out DOMString ret);
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync attribute DOMString domstring_value;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync readonly attribute DOMString domstring_value_ro;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync};