1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
15 * The Original Code is mozilla.org code.
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998
20 * the Initial Developer. All Rights Reserved.
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
38 #include
"nspluginroot.idl"
39 #include
"nsIFactory.idl"
40 #include
"nsIPluginInstanceOwner.idl"
41 #include
"nsIStreamListener.idl"
42 #include
"nsIStringStream.idl"
43 #include
"nsIPluginTag.idl"
46 #include
"nsplugindefs.h"
47 #ifdef MOZILLA_INTERNAL_API
49 #include
"nsNetUtil.h"
51 #include
"prlink.h" // for PRLibrary
56 interface nsIDOMPlugin
;
59 [ptr] native PRLibraryPtr
(PRLibrary
);
60 [ref] native nsIStreamListenerRef
(nsIStreamListener
*);
62 [scriptable
, uuid(2af1c32d
-38dd
-4f72
-b0ab
-24697d836e61
)]
63 interface nsIPluginHost
: nsIFactory
65 [noscript
] void init
();
67 [noscript
] void destroy
();
69 [noscript
] void loadPlugins
();
71 [noscript
] nsIPlugin getPluginFactory
(in string aMimeType
);
73 [noscript
] void instantiateEmbeddedPlugin
(in string aMimeType
, in nsIURI aURL
, in nsIPluginInstanceOwner aOwner
);
75 [noscript
] void instantiateFullPagePlugin
(in string aMimeType
, in nsIURI aURI
, in nsIStreamListenerRef aStreamListener
, in nsIPluginInstanceOwner aOwner
);
78 * Instantiate an embedded plugin for an existing channel. The caller is
79 * responsible for opening the channel. It may or may not be already opened
80 * when this function is called.
82 [noscript
] nsIStreamListener instantiatePluginForChannel
(in nsIChannel aChannel
, in nsIPluginInstanceOwner aOwner
);
84 [noscript
] void setUpPluginInstance
(in string aMimeType
, in nsIURI aURL
, in nsIPluginInstanceOwner aOwner
);
86 // The return code is NS_OK if the plugin is enabled,
87 // NS_ERROR_PLUGIN_DISABLED if the plugin is explicitly disabled, and
88 // NS_ERROR_FAILURE if there is no plugin for this type.
89 [noscript
] void isPluginEnabledForType
(in string aMimeType
);
91 // The return code is NS_OK if the plugin is enabled and NS_ERROR_FAILURE if
92 // the plugin is explicitly disabled or there is no plugin.
93 [noscript
] void isPluginEnabledForExtension
(in string aExtension
, in constCharStarRef aMimeType
);
95 [noscript
] readonly attribute
unsigned long pluginCount
;
97 [noscript
] void getPlugins
(in unsigned long aPluginCount
, out /*array*/ nsIDOMPlugin aPluginArray
);
99 void getPluginTags
(out unsigned long aPluginCount
,
100 [retval, array
, size_is(aPluginCount
)] out nsIPluginTag aResults
);
102 [noscript
] void stopPluginInstance
(in nsIPluginInstance aInstance
);
104 [noscript
] void handleBadPlugin
(in PRLibraryPtr aLibrary
, in nsIPluginInstance instance
);
108 #ifdef MOZILLA_INTERNAL_API
110 * Used for creating the correct input stream for plugins
111 * We can either have raw data (with or without \r\n\r\n) or a path to a file (but it must be native!)
112 * When making an nsIInputStream stream for the plugins POST data, be sure to take into
113 * account that it could be binary and full of nulls, see bug 105417. Also, we need
114 * to make a copy of the buffer because the plugin may have allocated it on the stack.
115 * For an example of this, see Shockwave registration or bug 108966
116 * We malloc only for headers here, buffer for data itself is malloced by ParsePostBufferToFixHeaders()
120 NS_NewPluginPostDataStream
(nsIInputStream
**result
,
122 PRUint32 contentLength
,
123 PRBool isFile
= PR_FALSE
,
124 PRBool headers
= PR_FALSE
)
126 nsresult rv
= NS_ERROR_UNEXPECTED
;
130 if
(!isFile
) { // do raw data case first
131 if
(contentLength
< 1)
134 char *buf
= (char*) data
;
136 // in assumption we got correctly formated headers just passed in
137 if
(!(buf
= (char*)nsMemory
::Alloc
(contentLength
)))
138 return NS_ERROR_OUT_OF_MEMORY
;
139 memcpy
(buf
, data
, contentLength
);
141 nsCOMPtr
<nsIStringInputStream
> sis
= do_CreateInstance
("@mozilla.org/io/string-input-stream;1",&rv
);
142 if
(NS_SUCCEEDED
(rv
)) {
143 sis
->AdoptData
(buf
, contentLength
); // let the string stream manage our data
144 rv
= CallQueryInterface
(sis
, result
);
147 nsMemory
::Free
(buf
); // Cleanup the memory if the data was copied.
149 nsCOMPtr
<nsILocalFile
> file
; // tmp file will be deleted on release of stream
150 nsCOMPtr
<nsIInputStream
> fileStream
;
151 if
(NS_SUCCEEDED
(rv
= NS_NewNativeLocalFile
(nsDependentCString
(data
), PR_FALSE
, getter_AddRefs
(file
))) &&
152 NS_SUCCEEDED
(rv
= NS_NewLocalFileInputStream
(getter_AddRefs
(fileStream
),
156 nsIFileInputStream
::DELETE_ON_CLOSE |
157 nsIFileInputStream
::CLOSE_ON_EOF
))
160 // wrap the file stream with a buffered input stream
161 return NS_NewBufferedInputStream
(result
, fileStream
, 8192);