Bug 1464538 [wpt PR 11173] - [testdriver] Enable manual interaction, a=testonly
[gecko.git] / caps / SystemPrincipal.cpp
blob2e552850a24999e3d24dfe5189fe503c145d8591
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. */
8 #include "nscore.h"
9 #include "SystemPrincipal.h"
10 #include "nsIComponentManager.h"
11 #include "nsIServiceManager.h"
12 #include "nsIURL.h"
13 #include "nsCOMPtr.h"
14 #include "nsReadableUtils.h"
15 #include "nsCRT.h"
16 #include "nsString.h"
17 #include "nsIClassInfoImpl.h"
18 #include "nsIScriptSecurityManager.h"
19 #include "pratom.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());
34 return sp.forget();
37 nsresult SystemPrincipal::GetScriptLocation(nsACString& aStr) {
38 aStr.AssignLiteral(SYSTEM_PRINCIPAL_SPEC);
39 return NS_OK;
42 ///////////////////////////////////////
43 // Methods implementing nsIPrincipal //
44 ///////////////////////////////////////
46 uint32_t SystemPrincipal::GetHashValue() { return NS_PTR_TO_INT32(this); }
48 NS_IMETHODIMP
49 SystemPrincipal::GetURI(nsIURI** aURI) {
50 *aURI = nullptr;
51 return NS_OK;
54 NS_IMETHODIMP
55 SystemPrincipal::GetCsp(nsIContentSecurityPolicy** aCsp) {
56 *aCsp = nullptr;
57 return NS_OK;
60 NS_IMETHODIMP
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;
68 NS_IMETHODIMP
69 SystemPrincipal::EnsureCSP(dom::Document* aDocument,
70 nsIContentSecurityPolicy** aCSP) {
71 // CSP on a system principal makes no sense
72 return NS_ERROR_FAILURE;
75 NS_IMETHODIMP
76 SystemPrincipal::GetPreloadCsp(nsIContentSecurityPolicy** aPreloadCSP) {
77 *aPreloadCSP = nullptr;
78 return NS_OK;
81 NS_IMETHODIMP
82 SystemPrincipal::EnsurePreloadCSP(dom::Document* aDocument,
83 nsIContentSecurityPolicy** aPreloadCSP) {
84 // CSP on a system principal makes no sense
85 return NS_ERROR_FAILURE;
88 NS_IMETHODIMP
89 SystemPrincipal::GetDomain(nsIURI** aDomain) {
90 *aDomain = nullptr;
91 return NS_OK;
94 NS_IMETHODIMP
95 SystemPrincipal::SetDomain(nsIURI* aDomain) { return NS_OK; }
97 NS_IMETHODIMP
98 SystemPrincipal::GetBaseDomain(nsACString& aBaseDomain) {
99 // No base domain for chrome.
100 return NS_OK;
103 NS_IMETHODIMP
104 SystemPrincipal::GetAddonId(nsAString& aAddonId) {
105 aAddonId.Truncate();
106 return NS_OK;
109 //////////////////////////////////////////
110 // Methods implementing nsISerializable //
111 //////////////////////////////////////////
113 NS_IMETHODIMP
114 SystemPrincipal::Read(nsIObjectInputStream* aStream) {
115 // no-op: CID is sufficient to identify the mSystemPrincipal singleton
116 return NS_OK;
119 NS_IMETHODIMP
120 SystemPrincipal::Write(nsIObjectOutputStream* aStream) {
121 // no-op: CID is sufficient to identify the mSystemPrincipal singleton
122 return NS_OK;