I'm planning to rev nsIIOService in preparation for marking it frozen by Mozilla 1.2. See http://bugzilla.mozilla.org/show_bug.cgi?id=157131.
Unfortunately, nsIIOService has been the dumping ground in necko for miscellaneous functions. I'm hoping to eliminate some of the cruft. I'm planning on dropping the following methods: GetParserForScheme - this function is unused outside necko, but more importantly it exposes nsIURLParser, which is more or less a necko implementation detail. not all protocols register a nsIURLParser, and as a result the default nsIURLParser implementation is often used. the default nsIURLParser implementation is therefore not guaranteed compatible with the nsIURI implementation returned from nsIProtocolHandler::NewURI. Eliminating this API therefore closes the potential security risk of this API (e.g., two components may parse the same URL string differently leading to broken security checks). ExtractUrlPart - this function is commonly used to "efficiently" parse an arbitrary URL string without the overhead of calling nsIProtocolHandler::NewURI. this function depends on the result returned from GetParserForScheme and therefore suffers the same potential security risk. the performance benefits (i'll assert that these are minor) do not outweigh the potential security risk levied by this interface on unsuspecting components (especially those developed externally without the review of mozilla developers well aware of such security issues). ResolveRelativePath - this is only used internally by necko to implement the JAR protocol handler. there is no need to expose this utility function on nsIIOService. I'm also proposing a change to this method: void initFileFromURLSpec(in nsIFile file, in AUTF8String url); This method should be modified to return a nsIFile instead of expecting one to be preallocated by the caller. This interface breaks the abstraction of the nsIFile interface since it requires a caller to know apriori that the URL corresponds to a local file. dougt suggested the following signature instead: nsIFile getFileFromURLSpec(in AUTF8String url); A little LXR'ing should confirm that this isn't going to cause too much trouble for existing mozilla components. I'll also be rev'ing the IID, CID, and ContractID along with these changes. That should minimize crashes resulting from plugins and other external components leveraging the current "unfrozen" nsIIOService interface. They just won't work ;-) Darin