123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- /* -*- 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 "nsNullPrincipalURI.h"
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/DebugOnly.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/Services.h"
- #include "mozilla/Unused.h"
- #include "mozilla/ipc/URIParams.h"
- #include "nsEscape.h"
- #include "nsCRT.h"
- #include "nsIUUIDGenerator.h"
- using namespace mozilla;
- ////////////////////////////////////////////////////////////////////////////////
- //// nsNullPrincipalURI
- nsNullPrincipalURI::nsNullPrincipalURI()
- : mPath(mPathBytes, ArrayLength(mPathBytes), ArrayLength(mPathBytes) - 1)
- {
- }
- nsNullPrincipalURI::nsNullPrincipalURI(const nsNullPrincipalURI& aOther)
- : mPath(mPathBytes, ArrayLength(mPathBytes), ArrayLength(mPathBytes) - 1)
- {
- mPath.Assign(aOther.mPath);
- }
- nsresult
- nsNullPrincipalURI::Init()
- {
- // FIXME: bug 327161 -- make sure the uuid generator is reseeding-resistant.
- nsCOMPtr<nsIUUIDGenerator> uuidgen = services::GetUUIDGenerator();
- NS_ENSURE_TRUE(uuidgen, NS_ERROR_NOT_AVAILABLE);
- nsID id;
- nsresult rv = uuidgen->GenerateUUIDInPlace(&id);
- NS_ENSURE_SUCCESS(rv, rv);
- MOZ_ASSERT(mPathBytes == mPath.BeginWriting());
- id.ToProvidedString(mPathBytes);
- MOZ_ASSERT(mPath.Length() == NSID_LENGTH - 1);
- MOZ_ASSERT(strlen(mPath.get()) == NSID_LENGTH - 1);
- return NS_OK;
- }
- /* static */
- already_AddRefed<nsNullPrincipalURI>
- nsNullPrincipalURI::Create()
- {
- RefPtr<nsNullPrincipalURI> uri = new nsNullPrincipalURI();
- nsresult rv = uri->Init();
- NS_ENSURE_SUCCESS(rv, nullptr);
- return uri.forget();
- }
- static NS_DEFINE_CID(kNullPrincipalURIImplementationCID,
- NS_NULLPRINCIPALURI_IMPLEMENTATION_CID);
- NS_IMPL_ADDREF(nsNullPrincipalURI)
- NS_IMPL_RELEASE(nsNullPrincipalURI)
- NS_INTERFACE_MAP_BEGIN(nsNullPrincipalURI)
- 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_ENTRY(nsIIPCSerializableURI)
- NS_INTERFACE_MAP_END
- ////////////////////////////////////////////////////////////////////////////////
- //// nsIURI
- NS_IMETHODIMP
- nsNullPrincipalURI::GetAsciiHost(nsACString &_host)
- {
- _host.Truncate();
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetAsciiHostPort(nsACString &_hostport)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetAsciiSpec(nsACString &_spec)
- {
- nsAutoCString buffer;
- // Ignore the return value -- nsNullPrincipalURI::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
- nsNullPrincipalURI::GetHost(nsACString &_host)
- {
- _host.Truncate();
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetHost(const nsACString &aHost)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetHostPort(nsACString &_host)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetHostPort(const nsACString &aHost)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetHostAndPort(const nsACString &aHost)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetOriginCharset(nsACString &_charset)
- {
- _charset.Truncate();
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetPassword(nsACString &_password)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetPassword(const nsACString &aPassword)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetPath(nsACString &_path)
- {
- _path = mPath;
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetPath(const nsACString &aPath)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetFilePath(nsACString &aFilePath)
- {
- aFilePath.Truncate();
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetFilePath(const nsACString &aFilePath)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetQuery(nsACString &aQuery)
- {
- aQuery.Truncate();
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetQuery(const nsACString &aQuery)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetRef(nsACString &_ref)
- {
- _ref.Truncate();
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetRef(const nsACString &aRef)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetPrePath(nsACString &_prePath)
- {
- _prePath = NS_LITERAL_CSTRING(NS_NULLPRINCIPAL_SCHEME ":");
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetPort(int32_t *_port)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetPort(int32_t aPort)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetScheme(nsACString &_scheme)
- {
- _scheme = NS_LITERAL_CSTRING(NS_NULLPRINCIPAL_SCHEME);
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetScheme(const nsACString &aScheme)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetSpec(nsACString &_spec)
- {
- _spec = NS_LITERAL_CSTRING(NS_NULLPRINCIPAL_SCHEME ":") + mPath;
- return NS_OK;
- }
- // result may contain unescaped UTF-8 characters
- NS_IMETHODIMP
- nsNullPrincipalURI::GetSpecIgnoringRef(nsACString &result)
- {
- return GetSpec(result);
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetHasRef(bool *result)
- {
- *result = false;
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetSpec(const nsACString &aSpec)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetUsername(nsACString &_username)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetUsername(const nsACString &aUsername)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::GetUserPass(nsACString &_userPass)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SetUserPass(const nsACString &aUserPass)
- {
- return NS_ERROR_NOT_IMPLEMENTED;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::Clone(nsIURI **_newURI)
- {
- nsCOMPtr<nsIURI> uri = new nsNullPrincipalURI(*this);
- uri.forget(_newURI);
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::CloneIgnoringRef(nsIURI **_newURI)
- {
- // GetRef/SetRef not supported by nsNullPrincipalURI, so
- // CloneIgnoringRef() is the same as Clone().
- return Clone(_newURI);
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::CloneWithNewRef(const nsACString& newRef, nsIURI **_newURI)
- {
- // GetRef/SetRef not supported by nsNullPrincipalURI, so
- // CloneWithNewRef() is the same as Clone().
- return Clone(_newURI);
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::Equals(nsIURI *aOther, bool *_equals)
- {
- *_equals = false;
- RefPtr<nsNullPrincipalURI> otherURI;
- nsresult rv = aOther->QueryInterface(kNullPrincipalURIImplementationCID,
- getter_AddRefs(otherURI));
- if (NS_SUCCEEDED(rv)) {
- *_equals = mPath == otherURI->mPath;
- }
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::EqualsExceptRef(nsIURI *aOther, bool *_equals)
- {
- // GetRef/SetRef not supported by nsNullPrincipalURI, so
- // EqualsExceptRef() is the same as Equals().
- return Equals(aOther, _equals);
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::Resolve(const nsACString &aRelativePath,
- nsACString &_resolvedURI)
- {
- _resolvedURI = aRelativePath;
- return NS_OK;
- }
- NS_IMETHODIMP
- nsNullPrincipalURI::SchemeIs(const char *aScheme, bool *_schemeIs)
- {
- *_schemeIs = (0 == nsCRT::strcasecmp(NS_NULLPRINCIPAL_SCHEME, aScheme));
- return NS_OK;
- }
- ////////////////////////////////////////////////////////////////////////////////
- //// nsIIPCSerializableURI
- void
- nsNullPrincipalURI::Serialize(mozilla::ipc::URIParams &aParams)
- {
- aParams = mozilla::ipc::NullPrincipalURIParams();
- }
- bool
- nsNullPrincipalURI::Deserialize(const mozilla::ipc::URIParams &aParams)
- {
- if (aParams.type() != mozilla::ipc::URIParams::TNullPrincipalURIParams) {
- MOZ_ASSERT_UNREACHABLE("unexpected URIParams type");
- return false;
- }
- nsresult rv = Init();
- NS_ENSURE_SUCCESS(rv, false);
- return true;
- }
- ////////////////////////////////////////////////////////////////////////////////
- //// nsISizeOf
- size_t
- nsNullPrincipalURI::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
- {
- return mPath.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
- }
- size_t
- nsNullPrincipalURI::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const {
- return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
- }
|