michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- michael@0: * vim: sw=2 ts=2 sts=2 expandtab michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "nsNullPrincipalURI.h" michael@0: michael@0: #include "mozilla/MemoryReporting.h" michael@0: michael@0: #include "nsNetUtil.h" michael@0: #include "nsEscape.h" michael@0: #include "nsCRT.h" michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: //// nsNullPrincipalURI michael@0: michael@0: nsNullPrincipalURI::nsNullPrincipalURI(const nsCString &aSpec) michael@0: { michael@0: int32_t dividerPosition = aSpec.FindChar(':'); michael@0: NS_ASSERTION(dividerPosition != -1, "Malformed URI!"); michael@0: michael@0: int32_t n = aSpec.Left(mScheme, dividerPosition); michael@0: NS_ASSERTION(n == dividerPosition, "Storing the scheme failed!"); michael@0: michael@0: int32_t count = aSpec.Length() - dividerPosition - 1; michael@0: n = aSpec.Mid(mPath, dividerPosition + 1, count); michael@0: NS_ASSERTION(n == count, "Storing the path failed!"); michael@0: michael@0: ToLowerCase(mScheme); michael@0: } michael@0: michael@0: static NS_DEFINE_CID(kNullPrincipalURIImplementationCID, michael@0: NS_NULLPRINCIPALURI_IMPLEMENTATION_CID); michael@0: michael@0: NS_IMPL_ADDREF(nsNullPrincipalURI) michael@0: NS_IMPL_RELEASE(nsNullPrincipalURI) michael@0: michael@0: NS_INTERFACE_MAP_BEGIN(nsNullPrincipalURI) michael@0: NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIURI) michael@0: if (aIID.Equals(kNullPrincipalURIImplementationCID)) michael@0: foundInterface = static_cast(this); michael@0: else michael@0: NS_INTERFACE_MAP_ENTRY(nsIURI) michael@0: NS_INTERFACE_MAP_ENTRY(nsISizeOf) michael@0: NS_INTERFACE_MAP_END michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: //// nsIURI michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetAsciiHost(nsACString &_host) michael@0: { michael@0: _host.Truncate(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetAsciiSpec(nsACString &_spec) michael@0: { michael@0: nsAutoCString buffer; michael@0: (void)GetSpec(buffer); michael@0: NS_EscapeURL(buffer, esc_OnlyNonASCII | esc_AlwaysCopy, _spec); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetHost(nsACString &_host) michael@0: { michael@0: _host.Truncate(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetHost(const nsACString &aHost) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetHostPort(nsACString &_host) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetHostPort(const nsACString &aHost) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetOriginCharset(nsACString &_charset) michael@0: { michael@0: _charset.Truncate(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetPassword(nsACString &_password) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetPassword(const nsACString &aPassword) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetPath(nsACString &_path) michael@0: { michael@0: _path = mPath; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetPath(const nsACString &aPath) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetRef(nsACString &_ref) michael@0: { michael@0: _ref.Truncate(); michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetRef(const nsACString &aRef) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetPrePath(nsACString &_prePath) michael@0: { michael@0: _prePath = mScheme + NS_LITERAL_CSTRING(":"); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetPort(int32_t *_port) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetPort(int32_t aPort) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetScheme(nsACString &_scheme) michael@0: { michael@0: _scheme = mScheme; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetScheme(const nsACString &aScheme) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetSpec(nsACString &_spec) michael@0: { michael@0: _spec = mScheme + NS_LITERAL_CSTRING(":") + mPath; michael@0: return NS_OK; michael@0: } michael@0: michael@0: // result may contain unescaped UTF-8 characters michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetSpecIgnoringRef(nsACString &result) michael@0: { michael@0: return GetSpec(result); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetHasRef(bool *result) michael@0: { michael@0: *result = false; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetSpec(const nsACString &aSpec) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetUsername(nsACString &_username) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetUsername(const nsACString &aUsername) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::GetUserPass(nsACString &_userPass) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SetUserPass(const nsACString &aUserPass) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::Clone(nsIURI **_newURI) michael@0: { michael@0: nsCOMPtr uri = michael@0: new nsNullPrincipalURI(mScheme + NS_LITERAL_CSTRING(":") + mPath); michael@0: uri.forget(_newURI); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::CloneIgnoringRef(nsIURI **_newURI) michael@0: { michael@0: // GetRef/SetRef not supported by nsNullPrincipalURI, so michael@0: // CloneIgnoringRef() is the same as Clone(). michael@0: return Clone(_newURI); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::Equals(nsIURI *aOther, bool *_equals) michael@0: { michael@0: *_equals = false; michael@0: nsNullPrincipalURI *otherURI; michael@0: nsresult rv = aOther->QueryInterface(kNullPrincipalURIImplementationCID, michael@0: (void **)&otherURI); michael@0: if (NS_SUCCEEDED(rv)) { michael@0: *_equals = (mScheme == otherURI->mScheme && mPath == otherURI->mPath); michael@0: NS_RELEASE(otherURI); michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::EqualsExceptRef(nsIURI *aOther, bool *_equals) michael@0: { michael@0: // GetRef/SetRef not supported by nsNullPrincipalURI, so michael@0: // EqualsExceptRef() is the same as Equals(). michael@0: return Equals(aOther, _equals); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::Resolve(const nsACString &aRelativePath, michael@0: nsACString &_resolvedURI) michael@0: { michael@0: _resolvedURI = aRelativePath; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsNullPrincipalURI::SchemeIs(const char *aScheme, bool *_schemeIs) michael@0: { michael@0: *_schemeIs = (0 == nsCRT::strcasecmp(mScheme.get(), aScheme)); michael@0: return NS_OK; michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: //// nsISizeOf michael@0: michael@0: size_t michael@0: nsNullPrincipalURI::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const michael@0: { michael@0: return mScheme.SizeOfExcludingThisIfUnshared(aMallocSizeOf) + michael@0: mPath.SizeOfExcludingThisIfUnshared(aMallocSizeOf); michael@0: } michael@0: michael@0: size_t michael@0: nsNullPrincipalURI::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const { michael@0: return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); michael@0: } michael@0: