/** * Creates a key for use in the ShouldLoad cache. * Looks like: <uri>!<nsIContentPolicy::LOAD_TYPE> */ nsresult CreateCacheKey_Internal(nsIURI* aContentLocation, nsContentPolicyType aContentType, nsACString& outCacheKey) { if (!aContentLocation) { return NS_ERROR_FAILURE; } bool isDataScheme = false; nsresult rv = aContentLocation->SchemeIs("data", &isDataScheme); NS_ENSURE_SUCCESS(rv, rv); outCacheKey.Truncate(); if (aContentType != nsIContentPolicy::TYPE_SCRIPT && isDataScheme) { // For non-script data: URI, use ("data:", aContentType) as the cache key. outCacheKey.Append(NS_LITERAL_CSTRING("data:")); outCacheKey.AppendInt(aContentType); return NS_OK; } nsAutoCString spec; rv = aContentLocation->GetSpec(spec); NS_ENSURE_SUCCESS(rv, rv); // Don't cache for a URI longer than the cutoff size. if (spec.Length() <= CSP_CACHE_URI_CUTOFF_SIZE) { outCacheKey.Append(spec); outCacheKey.Append(NS_LITERAL_CSTRING("!")); outCacheKey.AppendInt(aContentType); } return NS_OK; }
nsresult ChunkSet::Serialize(nsACString& aChunkStr) { aChunkStr.Truncate(); uint32_t i = 0; while (i < mChunks.Length()) { if (i != 0) { aChunkStr.Append(','); } aChunkStr.AppendInt((int32_t)mChunks[i]); uint32_t first = i; uint32_t last = first; i++; while (i < mChunks.Length() && (mChunks[i] == mChunks[i - 1] + 1 || mChunks[i] == mChunks[i - 1])) { last = i++; } if (last != first) { aChunkStr.Append('-'); aChunkStr.AppendInt((int32_t)mChunks[last]); } } return NS_OK; }
void BuildAlternativeDataInfo(const char *aInfo, int64_t aOffset, nsACString &_retval) { _retval.Truncate(); _retval.AppendInt(kAltDataVersion); _retval.Append(';'); _retval.AppendInt(aOffset); _retval.Append(','); _retval.Append(aInfo); }
void GeckoChildProcessHost::SetChildLogName(const char* varName, const char* origLogName, nsACString &buffer) { // We currently have no portable way to launch child with environment // different than parent. So temporarily change NSPR_LOG_FILE so child // inherits value we want it to have. (NSPR only looks at NSPR_LOG_FILE at // startup, so it's 'safe' to play with the parent's environment this way.) buffer.Assign(varName); #ifdef XP_WIN // On Windows we must expand relative paths because sandboxing rules // bound only to full paths. fopen fowards to NtCreateFile which checks // the path against the sanboxing rules as passed to fopen (left relative). char absPath[MAX_PATH + 2]; if (_fullpath(absPath, origLogName, sizeof(absPath))) { buffer.Append(absPath); } else #endif { buffer.Append(origLogName); } // Append child-specific postfix to name buffer.AppendLiteral(".child-"); buffer.AppendInt(mChildCounter); // Passing temporary to PR_SetEnv is ok here if we keep the temporary // for the time we launch the sub-process. It's copied to the new // environment. PR_SetEnv(buffer.BeginReading()); }
nsresult ChunkSet::Serialize(nsACString& aChunkStr) { aChunkStr.Truncate(); for (const Range& range : mRanges) { if (&range != &mRanges[0]) { aChunkStr.Append(','); } aChunkStr.AppendInt((int32_t)range.Begin()); if (range.Begin() != range.End()) { aChunkStr.Append('-'); aChunkStr.AppendInt((int32_t)range.End()); } } return NS_OK; }
nsresult getStatus(nsACString& desc) { if(!gStatusReportProgress) desc.AssignLiteral("Init"); else { desc.AssignLiteral("Running: There are "); desc.AppendInt(gNumReporters); desc.AppendLiteral(" reporters"); } return NS_OK; }
nsresult nsDOMStorageDBWrapper::CreateQuotaDBKey(nsIPrincipal* aPrincipal, nsACString& aKey) { nsresult rv; nsAutoCString subdomainsDBKey; nsCOMPtr<nsIEffectiveTLDService> eTLDService(do_GetService( NS_EFFECTIVETLDSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIURI> uri; rv = aPrincipal->GetURI(getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(uri, NS_ERROR_UNEXPECTED); nsAutoCString eTLDplusOne; rv = eTLDService->GetBaseDomain(uri, 0, eTLDplusOne); if (NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS == rv) { // XXX bug 357323 - what to do for localhost/file exactly? rv = uri->GetAsciiHost(eTLDplusOne); } NS_ENSURE_SUCCESS(rv, rv); CreateReversedDomain(eTLDplusOne, subdomainsDBKey); uint32_t appId; rv = aPrincipal->GetAppId(&appId); NS_ENSURE_SUCCESS(rv, rv); bool isInBrowserElement; rv = aPrincipal->GetIsInBrowserElement(&isInBrowserElement); NS_ENSURE_SUCCESS(rv, rv); if (appId == nsIScriptSecurityManager::NO_APP_ID && !isInBrowserElement) { aKey.Assign(subdomainsDBKey); return NS_OK; } aKey.Truncate(); aKey.AppendInt(appId); aKey.Append(NS_LITERAL_CSTRING(":") + (isInBrowserElement ? NS_LITERAL_CSTRING("t") : NS_LITERAL_CSTRING("f")) + NS_LITERAL_CSTRING(":") + subdomainsDBKey); return NS_OK; }
void GeckoChildProcessHost::SetChildLogName(const char* varName, const char* origLogName, nsACString &buffer) { // We currently have no portable way to launch child with environment // different than parent. So temporarily change NSPR_LOG_FILE so child // inherits value we want it to have. (NSPR only looks at NSPR_LOG_FILE at // startup, so it's 'safe' to play with the parent's environment this way.) buffer.Assign(varName); buffer.Append(origLogName); // Append child-specific postfix to name buffer.AppendLiteral(".child-"); buffer.AppendInt(mChildCounter); // Passing temporary to PR_SetEnv is ok here if we keep the temporary // for the time we launch the sub-process. It's copied to the new // environment. PR_SetEnv(buffer.BeginReading()); }
NS_IMETHODIMP RustURL::GetHostPort(nsACString & aHostPort) { nsresult rv = (nsresult) rusturl_get_host(mURL.get(), &aHostPort); if (NS_FAILED(rv)) { return rv; } int32_t port; rv = GetPort(&port); if (NS_FAILED(rv)) { return rv; } if (port >= 0) { aHostPort.Append(':'); aHostPort.AppendInt(port); } return NS_OK; }
void GetJarPrefix(uint32_t aAppId, bool aInMozBrowser, nsACString& aJarPrefix) { MOZ_ASSERT(aAppId != nsIScriptSecurityManager::UNKNOWN_APP_ID); if (aAppId == nsIScriptSecurityManager::UNKNOWN_APP_ID) { aAppId = nsIScriptSecurityManager::NO_APP_ID; } aJarPrefix.Truncate(); // Fallback. if (aAppId == nsIScriptSecurityManager::NO_APP_ID && !aInMozBrowser) { return; } // aJarPrefix = appId + "+" + { 't', 'f' } + "+"; aJarPrefix.AppendInt(aAppId); aJarPrefix.Append('+'); aJarPrefix.Append(aInMozBrowser ? 't' : 'f'); aJarPrefix.Append('+'); return; }
nsresult nsDOMStorageDBWrapper::CreateScopeDBKey(nsIPrincipal* aPrincipal, nsACString& aKey) { nsCOMPtr<nsIURI> uri; nsresult rv = aPrincipal->GetURI(getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(uri, NS_ERROR_UNEXPECTED); nsAutoCString domainScope; rv = uri->GetAsciiHost(domainScope); NS_ENSURE_SUCCESS(rv, rv); if (domainScope.IsEmpty()) { // About pages have an empty host but a valid path. Since they are handled // internally by our own redirector, we can trust them and use path as key. // if file:/// protocol, let's make the exact directory the domain bool isScheme = false; if ((NS_SUCCEEDED(uri->SchemeIs("about", &isScheme)) && isScheme) || (NS_SUCCEEDED(uri->SchemeIs("moz-safe-about", &isScheme)) && isScheme)) { rv = uri->GetPath(domainScope); NS_ENSURE_SUCCESS(rv, rv); // While the host is always canonicalized to lowercase, the path is not, // thus need to force the casing. ToLowerCase(domainScope); } else if (NS_SUCCEEDED(uri->SchemeIs("file", &isScheme)) && isScheme) { nsCOMPtr<nsIURL> url = do_QueryInterface(uri, &rv); NS_ENSURE_SUCCESS(rv, rv); rv = url->GetDirectory(domainScope); NS_ENSURE_SUCCESS(rv, rv); } } nsAutoCString key; rv = CreateReversedDomain(domainScope, key); NS_ENSURE_SUCCESS(rv, rv); nsAutoCString scheme; rv = uri->GetScheme(scheme); NS_ENSURE_SUCCESS(rv, rv); key.Append(NS_LITERAL_CSTRING(":") + scheme); int32_t port = NS_GetRealPort(uri); if (port != -1) { key.Append(nsPrintfCString(":%d", port)); } uint32_t appId; rv = aPrincipal->GetAppId(&appId); NS_ENSURE_SUCCESS(rv, rv); bool isInBrowserElement; rv = aPrincipal->GetIsInBrowserElement(&isInBrowserElement); NS_ENSURE_SUCCESS(rv, rv); if (appId == nsIScriptSecurityManager::NO_APP_ID && !isInBrowserElement) { aKey.Assign(key); return NS_OK; } aKey.Truncate(); aKey.AppendInt(appId); aKey.Append(NS_LITERAL_CSTRING(":") + (isInBrowserElement ? NS_LITERAL_CSTRING("t") : NS_LITERAL_CSTRING("f")) + NS_LITERAL_CSTRING(":") + key); return NS_OK; }