1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 /* The privileged system principal. */
9 #include "SystemPrincipal.h"
10 #include "nsIComponentManager.h"
11 #include "nsIServiceManager.h"
14 #include "nsReadableUtils.h"
17 #include "nsIClassInfoImpl.h"
18 #include "nsIScriptSecurityManager.h"
21 using namespace mozilla
;
23 NS_IMPL_CLASSINFO(SystemPrincipal
, nullptr,
24 nsIClassInfo::SINGLETON
| nsIClassInfo::MAIN_THREAD_ONLY
,
25 NS_SYSTEMPRINCIPAL_CID
)
26 NS_IMPL_QUERY_INTERFACE_CI(SystemPrincipal
, nsIPrincipal
, nsISerializable
)
27 NS_IMPL_CI_INTERFACE_GETTER(SystemPrincipal
, nsIPrincipal
, nsISerializable
)
29 #define SYSTEM_PRINCIPAL_SPEC "[System Principal]"
31 already_AddRefed
<SystemPrincipal
> SystemPrincipal::Create() {
32 RefPtr
<SystemPrincipal
> sp
= new SystemPrincipal();
33 sp
->FinishInit(NS_LITERAL_CSTRING(SYSTEM_PRINCIPAL_SPEC
), OriginAttributes());
37 nsresult
SystemPrincipal::GetScriptLocation(nsACString
& aStr
) {
38 aStr
.AssignLiteral(SYSTEM_PRINCIPAL_SPEC
);
42 ///////////////////////////////////////
43 // Methods implementing nsIPrincipal //
44 ///////////////////////////////////////
46 uint32_t SystemPrincipal::GetHashValue() { return NS_PTR_TO_INT32(this); }
49 SystemPrincipal::GetURI(nsIURI
** aURI
) {
55 SystemPrincipal::GetCsp(nsIContentSecurityPolicy
** aCsp
) {
61 SystemPrincipal::SetCsp(nsIContentSecurityPolicy
* aCsp
) {
62 // Never destroy an existing CSP on the principal.
63 // This method should only be called in rare cases.
65 return NS_ERROR_FAILURE
;
69 SystemPrincipal::EnsureCSP(dom::Document
* aDocument
,
70 nsIContentSecurityPolicy
** aCSP
) {
71 // CSP on a system principal makes no sense
72 return NS_ERROR_FAILURE
;
76 SystemPrincipal::GetPreloadCsp(nsIContentSecurityPolicy
** aPreloadCSP
) {
77 *aPreloadCSP
= nullptr;
82 SystemPrincipal::EnsurePreloadCSP(dom::Document
* aDocument
,
83 nsIContentSecurityPolicy
** aPreloadCSP
) {
84 // CSP on a system principal makes no sense
85 return NS_ERROR_FAILURE
;
89 SystemPrincipal::GetDomain(nsIURI
** aDomain
) {
95 SystemPrincipal::SetDomain(nsIURI
* aDomain
) { return NS_OK
; }
98 SystemPrincipal::GetBaseDomain(nsACString
& aBaseDomain
) {
99 // No base domain for chrome.
104 SystemPrincipal::GetAddonId(nsAString
& aAddonId
) {
109 //////////////////////////////////////////
110 // Methods implementing nsISerializable //
111 //////////////////////////////////////////
114 SystemPrincipal::Read(nsIObjectInputStream
* aStream
) {
115 // no-op: CID is sufficient to identify the mSystemPrincipal singleton
120 SystemPrincipal::Write(nsIObjectOutputStream
* aStream
) {
121 // no-op: CID is sufficient to identify the mSystemPrincipal singleton