mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 08:42:13 +00:00
a75561bd62
This is a follow-up to bug 1409249. There are a lot of places where our factory singleton constructors either don't correctly handle their returned references being released by the component manager, or do handle it, but in ways that are not obvious. This patch handles a few places where we can sometimes wind up with dangling singleton pointers, adds some explanatory comments and sanity check assertions, and replaces some uses of manual refcounting with StaticRefPtr and ClearOnShutdown. There are still some places where we may wind up with odd behavior if the first QI for a getService call fails. In those cases, we wind up destroying the first instance of a service that we create, and re-creating a new one later. MozReview-Commit-ID: ANYndvd7aZx --HG-- extra : rebase_source : acfb0611a028fef6b9387eb5d1d9e285782fbc7c
54 lines
1.6 KiB
C++
54 lines
1.6 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef nsJARProtocolHandler_h__
|
|
#define nsJARProtocolHandler_h__
|
|
|
|
#include "mozilla/StaticPtr.h"
|
|
#include "nsIJARProtocolHandler.h"
|
|
#include "nsIProtocolHandler.h"
|
|
#include "nsIJARURI.h"
|
|
#include "nsIZipReader.h"
|
|
#include "nsIMIMEService.h"
|
|
#include "nsWeakReference.h"
|
|
#include "nsCOMPtr.h"
|
|
|
|
class nsJARProtocolHandler final : public nsIJARProtocolHandler
|
|
, public nsSupportsWeakReference
|
|
{
|
|
public:
|
|
NS_DECL_THREADSAFE_ISUPPORTS
|
|
NS_DECL_NSIPROTOCOLHANDLER
|
|
NS_DECL_NSIJARPROTOCOLHANDLER
|
|
|
|
// nsJARProtocolHandler methods:
|
|
nsJARProtocolHandler();
|
|
|
|
static already_AddRefed<nsJARProtocolHandler> GetSingleton();
|
|
|
|
nsresult Init();
|
|
|
|
// returns non addref'ed pointer.
|
|
nsIMIMEService *MimeService();
|
|
nsIZipReaderCache *JarCache() { return mJARCache; }
|
|
protected:
|
|
virtual ~nsJARProtocolHandler();
|
|
|
|
nsCOMPtr<nsIZipReaderCache> mJARCache;
|
|
nsCOMPtr<nsIMIMEService> mMimeService;
|
|
};
|
|
|
|
extern mozilla::StaticRefPtr<nsJARProtocolHandler> gJarHandler;
|
|
|
|
#define NS_JARPROTOCOLHANDLER_CID \
|
|
{ /* 0xc7e410d4-0x85f2-11d3-9f63-006008a6efe9 */ \
|
|
0xc7e410d4, \
|
|
0x85f2, \
|
|
0x11d3, \
|
|
{0x9f, 0x63, 0x00, 0x60, 0x08, 0xa6, 0xef, 0xe9} \
|
|
}
|
|
|
|
#endif // !nsJARProtocolHandler_h__
|