diff options
Diffstat (limited to '')
-rw-r--r-- | caps/NullPrincipalURI.cpp | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/caps/NullPrincipalURI.cpp b/caps/NullPrincipalURI.cpp new file mode 100644 index 0000000000..02176f1ea3 --- /dev/null +++ b/caps/NullPrincipalURI.cpp @@ -0,0 +1,302 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: sw=2 ts=2 sts=2 expandtab + * 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/. */ + +#include "NullPrincipalURI.h" + +#include "mozilla/DebugOnly.h" +#include "mozilla/MemoryReporting.h" + +#include "mozilla/ipc/URIParams.h" + +#include "nsEscape.h" +#include "nsCRT.h" + +#include "mozilla/GkRustUtils.h" + +using namespace mozilla; + +//////////////////////////////////////////////////////////////////////////////// +//// NullPrincipalURI + +NullPrincipalURI::NullPrincipalURI() { + GkRustUtils::GenerateUUID(mPath); + MOZ_ASSERT(mPath.Length() == NSID_LENGTH - 1); + MOZ_ASSERT(strlen(mPath.get()) == NSID_LENGTH - 1); +} + +NullPrincipalURI::NullPrincipalURI(const NullPrincipalURI& aOther) { + mPath.Assign(aOther.mPath); +} + +static NS_DEFINE_CID(kNullPrincipalURIImplementationCID, + NS_NULLPRINCIPALURI_IMPLEMENTATION_CID); + +NS_IMPL_ADDREF(NullPrincipalURI) +NS_IMPL_RELEASE(NullPrincipalURI) + +NS_INTERFACE_MAP_BEGIN(NullPrincipalURI) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIURI) + if (aIID.Equals(kNullPrincipalURIImplementationCID)) + foundInterface = static_cast<nsIURI*>(this); + else + NS_INTERFACE_MAP_ENTRY(nsIURI) + NS_INTERFACE_MAP_ENTRY(nsISizeOf) +NS_INTERFACE_MAP_END + +//////////////////////////////////////////////////////////////////////////////// +//// nsIURI + +NS_IMETHODIMP +NullPrincipalURI::GetAsciiHost(nsACString& _host) { + _host.Truncate(); + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::GetAsciiHostPort(nsACString& _hostport) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetAsciiSpec(nsACString& _spec) { + nsAutoCString buffer; + // Ignore the return value -- NullPrincipalURI::GetSpec() is infallible. + Unused << GetSpec(buffer); + // This uses the infallible version of |NS_EscapeURL| as |GetSpec| is + // already infallible. + NS_EscapeURL(buffer, esc_OnlyNonASCII | esc_AlwaysCopy, _spec); + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::GetHost(nsACString& _host) { + _host.Truncate(); + return NS_OK; +} + +nsresult NullPrincipalURI::SetHost(const nsACString& aHost) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetHostPort(nsACString& _host) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetHostPort(const nsACString& aHost) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetPassword(nsACString& _password) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetPassword(const nsACString& aPassword) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetPathQueryRef(nsACString& _path) { + _path = mPath; + return NS_OK; +} + +nsresult NullPrincipalURI::SetPathQueryRef(const nsACString& aPath) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetFilePath(nsACString& aFilePath) { + aFilePath.Truncate(); + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetFilePath(const nsACString& aFilePath) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetQuery(nsACString& aQuery) { + aQuery.Truncate(); + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetQuery(const nsACString& aQuery) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetQueryWithEncoding(const nsACString& aQuery, + const Encoding* aEncoding) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetRef(nsACString& _ref) { + _ref.Truncate(); + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetRef(const nsACString& aRef) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetPrePath(nsACString& _prePath) { + _prePath = nsLiteralCString(NS_NULLPRINCIPAL_SCHEME ":"); + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::GetPort(int32_t* _port) { return NS_ERROR_NOT_IMPLEMENTED; } + +nsresult NullPrincipalURI::SetPort(int32_t aPort) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetScheme(nsACString& _scheme) { + _scheme = nsLiteralCString(NS_NULLPRINCIPAL_SCHEME); + return NS_OK; +} + +nsresult NullPrincipalURI::SetScheme(const nsACString& aScheme) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetSpec(nsACString& _spec) { + _spec = nsLiteralCString(NS_NULLPRINCIPAL_SCHEME ":") + mPath; + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +NullPrincipalURI::GetSpecIgnoringRef(nsACString& _result) { + return GetSpec(_result); +} + +NS_IMETHODIMP +NullPrincipalURI::GetHasRef(bool* _result) { + *_result = false; + return NS_OK; +} + +nsresult NullPrincipalURI::SetSpecInternal(const nsACString& aSpec) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetUsername(nsACString& _username) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetUsername(const nsACString& aUsername) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +NullPrincipalURI::GetUserPass(nsACString& _userPass) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::SetUserPass(const nsACString& aUserPass) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +nsresult NullPrincipalURI::Clone(nsIURI** _newURI) { + nsCOMPtr<nsIURI> uri = new NullPrincipalURI(*this); + uri.forget(_newURI); + return NS_OK; +} + +NS_IMPL_ISUPPORTS(NullPrincipalURI::Mutator, nsIURISetters, nsIURIMutator) + +NS_IMETHODIMP +NullPrincipalURI::Mutate(nsIURIMutator** aMutator) { + RefPtr<NullPrincipalURI::Mutator> mutator = new NullPrincipalURI::Mutator(); + nsresult rv = mutator->InitFromURI(this); + if (NS_FAILED(rv)) { + return rv; + } + mutator.forget(aMutator); + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::Equals(nsIURI* aOther, bool* _equals) { + *_equals = false; + RefPtr<NullPrincipalURI> otherURI; + nsresult rv = aOther->QueryInterface(kNullPrincipalURIImplementationCID, + getter_AddRefs(otherURI)); + if (NS_SUCCEEDED(rv)) { + *_equals = mPath == otherURI->mPath; + } + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::EqualsExceptRef(nsIURI* aOther, bool* _equals) { + // GetRef/SetRef not supported by NullPrincipalURI, so + // EqualsExceptRef() is the same as Equals(). + return Equals(aOther, _equals); +} + +NS_IMETHODIMP +NullPrincipalURI::Resolve(const nsACString& aRelativePath, + nsACString& _resolvedURI) { + _resolvedURI = aRelativePath; + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::SchemeIs(const char* aScheme, bool* _schemeIs) { + *_schemeIs = (0 == nsCRT::strcasecmp(NS_NULLPRINCIPAL_SCHEME, aScheme)); + return NS_OK; +} + +NS_IMETHODIMP +NullPrincipalURI::GetDisplaySpec(nsACString& aUnicodeSpec) { + return GetSpec(aUnicodeSpec); +} + +NS_IMETHODIMP +NullPrincipalURI::GetDisplayHostPort(nsACString& aUnicodeHostPort) { + return GetHostPort(aUnicodeHostPort); +} + +NS_IMETHODIMP +NullPrincipalURI::GetDisplayHost(nsACString& aUnicodeHost) { + return GetHost(aUnicodeHost); +} + +NS_IMETHODIMP +NullPrincipalURI::GetDisplayPrePath(nsACString& aPrePath) { + return GetPrePath(aPrePath); +} + +void NullPrincipalURI::Serialize(mozilla::ipc::URIParams& aParams) { + aParams = mozilla::ipc::NullPrincipalURIParams(); +} + +bool NullPrincipalURI::Deserialize(const mozilla::ipc::URIParams& aParams) { + if (aParams.type() != mozilla::ipc::URIParams::TNullPrincipalURIParams) { + MOZ_ASSERT_UNREACHABLE("unexpected URIParams type"); + return false; + } + return true; +} + +//////////////////////////////////////////////////////////////////////////////// +//// nsISizeOf + +size_t NullPrincipalURI::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const { + return mPath.SizeOfExcludingThisIfUnshared(aMallocSizeOf); +} + +size_t NullPrincipalURI::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const { + return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); +} |