зеркало из https://github.com/mozilla/pjs.git
Making SSR using preferences instead of an explict api.
This commit is contained in:
Родитель
16f85452f3
Коммит
c6c64e07b6
|
@ -63,7 +63,6 @@ REQUIRES = \
|
|||
$(NULL)
|
||||
|
||||
CPPSRCS = nsSSRSupport.cpp
|
||||
XPIDLSRCS = nsISSRSupport.idl
|
||||
|
||||
EXTRA_DSO_LDOPTS += $(MOZ_COMPONENT_LIBS)
|
||||
|
||||
|
|
|
@ -40,25 +40,30 @@
|
|||
#include "nsCOMPtr.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIGenericFactory.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch2.h"
|
||||
#include "nsICategoryManager.h"
|
||||
|
||||
#include "string.h"
|
||||
#include "nsNetUtil.h"
|
||||
|
||||
#include "nsISSRSupport.h"
|
||||
#include "nsIStyleSheetService.h"
|
||||
|
||||
|
||||
// TODO make the SSR persistent.
|
||||
// auto reload SSR in C.
|
||||
// TODO auto reload SSR in C.
|
||||
|
||||
class nsSSRSupport : public nsISSRSupport
|
||||
class nsSSRSupport : public nsIObserver
|
||||
{
|
||||
public:
|
||||
nsSSRSupport();
|
||||
virtual ~nsSSRSupport();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSISSRSUPPORT
|
||||
NS_DECL_NSIOBSERVER
|
||||
|
||||
nsresult SetSSREnabled(PRBool aSsrEnabled);
|
||||
nsresult SetSiteSSREnabled(PRBool aSiteSSREnabled);
|
||||
|
||||
nsCOMPtr<nsIStyleSheetService> m_sss;
|
||||
|
||||
|
@ -76,16 +81,9 @@ nsSSRSupport::~nsSSRSupport()
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsSSRSupport, nsISSRSupport)
|
||||
NS_IMPL_ISUPPORTS1(nsSSRSupport, nsIObserver)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSSRSupport::GetSSREnabled(PRBool *aSsrEnabled)
|
||||
{
|
||||
*aSsrEnabled = mUsingSSR;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsresult
|
||||
nsSSRSupport::SetSSREnabled(PRBool aSsrEnabled)
|
||||
{
|
||||
if (!m_sss)
|
||||
|
@ -102,14 +100,8 @@ nsSSRSupport::SetSSREnabled(PRBool aSsrEnabled)
|
|||
return m_sss->UnregisterSheet(uri, nsIStyleSheetService::AGENT_SHEET);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSSRSupport::GetSiteSSREnabled(PRBool *aSiteSSREnabled)
|
||||
{
|
||||
*aSiteSSREnabled = mUsingSiteSSR;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled)
|
||||
nsresult
|
||||
nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled)
|
||||
{
|
||||
if (!m_sss)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
@ -125,6 +117,49 @@ NS_IMETHODIMP nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled)
|
|||
return m_sss->UnregisterSheet(uri, nsIStyleSheetService::AGENT_SHEET);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSSRSupport::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
if (!strcmp(aTopic,"xpcom-startup"))
|
||||
{
|
||||
nsCOMPtr<nsIPrefBranch2> prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
prefBranch->AddObserver("ssr.", this, PR_FALSE);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (!strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID))
|
||||
{
|
||||
nsCOMPtr<nsIPrefBranch> prefBranch = do_QueryInterface(aSubject);
|
||||
nsXPIDLCString cstr;
|
||||
|
||||
const char* pref = NS_ConvertUCS2toUTF8(aData).get();
|
||||
|
||||
if (!strcmp(pref, "ssr.enabled"))
|
||||
{
|
||||
PRBool enabled;
|
||||
prefBranch->GetIntPref(pref, &enabled);
|
||||
|
||||
SetSSREnabled(enabled);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (!strcmp(pref, "ssr.site.enabled"))
|
||||
{
|
||||
PRBool enabled;
|
||||
prefBranch->GetIntPref(pref, &enabled);
|
||||
|
||||
SetSiteSSREnabled(enabled);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// XPCOM REGISTRATION BELOW
|
||||
|
@ -139,12 +174,74 @@ NS_IMETHODIMP nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled)
|
|||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSSRSupport)
|
||||
|
||||
|
||||
static NS_METHOD SSRRegistration(nsIComponentManager *aCompMgr,
|
||||
nsIFile *aPath,
|
||||
const char *registryLocation,
|
||||
const char *componentType,
|
||||
const nsModuleComponentInfo *info)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIServiceManager> servman = do_QueryInterface((nsISupports*)aCompMgr, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
|
||||
nsCOMPtr<nsICategoryManager> catman;
|
||||
servman->GetServiceByContractID(NS_CATEGORYMANAGER_CONTRACTID,
|
||||
NS_GET_IID(nsICategoryManager),
|
||||
getter_AddRefs(catman));
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
char* previous = nsnull;
|
||||
rv = catman->AddCategoryEntry("xpcom-startup",
|
||||
"SSR",
|
||||
SSRSupport_ContractID,
|
||||
PR_TRUE,
|
||||
PR_TRUE,
|
||||
&previous);
|
||||
if (previous)
|
||||
nsMemory::Free(previous);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
static NS_METHOD SSRUnregistration(nsIComponentManager *aCompMgr,
|
||||
nsIFile *aPath,
|
||||
const char *registryLocation,
|
||||
const nsModuleComponentInfo *info)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIServiceManager> servman = do_QueryInterface((nsISupports*)aCompMgr, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCOMPtr<nsICategoryManager> catman;
|
||||
servman->GetServiceByContractID(NS_CATEGORYMANAGER_CONTRACTID,
|
||||
NS_GET_IID(nsICategoryManager),
|
||||
getter_AddRefs(catman));
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
rv = catman->DeleteCategoryEntry("xpcom-startup",
|
||||
"SSR",
|
||||
PR_TRUE);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
static const nsModuleComponentInfo components[] =
|
||||
{
|
||||
{ "SoftKeyBoardService",
|
||||
SSRSupport_CID,
|
||||
SSRSupport_ContractID,
|
||||
nsSSRSupportConstructor,
|
||||
SSRRegistration,
|
||||
SSRUnregistration
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче