SourceBuffer::SourceBuffer(MediaSource* aMediaSource, const nsACString& aType) : DOMEventTargetHelper(aMediaSource->GetParentObject()) , mMediaSource(aMediaSource) , mCurrentAttributes(aType.LowerCaseEqualsLiteral("audio/mpeg") || aType.LowerCaseEqualsLiteral("audio/aac")) , mUpdating(false) , mActive(false) , mType(aType) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMediaSource); mTrackBuffersManager = new TrackBuffersManager(aMediaSource->GetDecoder(), aType); // Now that we know what type we're dealing with, enable dormant as needed. aMediaSource->GetDecoder()->NotifyDormantSupported(Preferences::GetBool("media.decoder.heuristic.dormant.enabled", false)); MSE_DEBUG("Create mTrackBuffersManager=%p", mTrackBuffersManager.get()); ErrorResult dummy; if (mCurrentAttributes.mGenerateTimestamps) { SetMode(SourceBufferAppendMode::Sequence, dummy); } else { SetMode(SourceBufferAppendMode::Segments, dummy); } mMediaSource->GetDecoder()->GetDemuxer()->AttachSourceBuffer( mTrackBuffersManager.get()); }
SourceBuffer::SourceBuffer(MediaSource* aMediaSource, const nsACString& aType) : DOMEventTargetHelper(aMediaSource->GetParentObject()) , mMediaSource(aMediaSource) , mUpdating(false) , mActive(false) , mUpdateID(0) , mType(aType) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMediaSource); mEvictionThreshold = Preferences::GetUint("media.mediasource.eviction_threshold", 100 * (1 << 20)); bool generateTimestamps = false; if (aType.LowerCaseEqualsLiteral("audio/mpeg") || aType.LowerCaseEqualsLiteral("audio/aac")) { generateTimestamps = true; } mAttributes = new SourceBufferAttributes(generateTimestamps); mContentManager = SourceBufferContentManager::CreateManager(mAttributes, aMediaSource->GetDecoder(), aType); MSE_DEBUG("Create mContentManager=%p", mContentManager.get()); ErrorResult dummy; if (mAttributes->mGenerateTimestamps) { SetMode(SourceBufferAppendMode::Sequence, dummy); } else { SetMode(SourceBufferAppendMode::Segments, dummy); } mMediaSource->GetDecoder()->GetDemuxer()->AttachSourceBuffer( static_cast<mozilla::TrackBuffersManager*>(mContentManager.get())); }
nsresult nsUnixSystemProxySettings::GetProxyFromGConf(const nsACString& aScheme, const nsACString& aHost, PRInt32 aPort, nsACString& aResult) { PRBool masterProxySwitch = PR_FALSE; mGConf->GetBool(NS_LITERAL_CSTRING("/system/http_proxy/use_http_proxy"), &masterProxySwitch); if (!IsProxyMode("manual") || !masterProxySwitch) { aResult.AppendLiteral("DIRECT"); return NS_OK; } nsCOMPtr<nsIArray> ignoreList; if (NS_SUCCEEDED(mGConf->GetStringList(NS_LITERAL_CSTRING("/system/http_proxy/ignore_hosts"), getter_AddRefs(ignoreList))) && ignoreList) { PRUint32 len = 0; ignoreList->GetLength(&len); for (PRUint32 i = 0; i < len; ++i) { nsCOMPtr<nsISupportsString> str = do_QueryElementAt(ignoreList, i); if (str) { nsAutoString s; if (NS_SUCCEEDED(str->GetData(s)) && !s.IsEmpty()) { if (GConfIgnoreHost(NS_ConvertUTF16toUTF8(s), aHost)) { aResult.AppendLiteral("DIRECT"); return NS_OK; } } } } } PRBool useHttpProxyForAll = PR_FALSE; // This setting sometimes doesn't exist, don't bail on failure mGConf->GetBool(NS_LITERAL_CSTRING("/system/http_proxy/use_same_proxy"), &useHttpProxyForAll); nsresult rv; if (!useHttpProxyForAll) { rv = SetProxyResultFromGConf("/system/proxy/socks_", "SOCKS", aResult); if (NS_SUCCEEDED(rv)) return rv; } if (aScheme.LowerCaseEqualsLiteral("http") || useHttpProxyForAll) { rv = SetProxyResultFromGConf("/system/http_proxy/", "PROXY", aResult); } else if (aScheme.LowerCaseEqualsLiteral("https")) { rv = SetProxyResultFromGConf("/system/proxy/secure_", "PROXY", aResult); } else if (aScheme.LowerCaseEqualsLiteral("ftp")) { rv = SetProxyResultFromGConf("/system/proxy/ftp_", "PROXY", aResult); } else { rv = NS_ERROR_FAILURE; } if (NS_FAILED(rv)) { aResult.AppendLiteral("DIRECT"); } return NS_OK; }
nsresult nsUnixSystemProxySettings::GetProxyFromGSettings(const nsACString& aScheme, const nsACString& aHost, int32_t aPort, nsACString& aResult) { nsCString proxyMode; nsresult rv = mProxySettings->GetString(NS_LITERAL_CSTRING("mode"), proxyMode); NS_ENSURE_SUCCESS(rv, rv); // return NS_ERROR_FAILURE when no proxy is set if (!proxyMode.EqualsLiteral("manual")) { return NS_ERROR_FAILURE; } nsCOMPtr<nsIArray> ignoreList; if (NS_SUCCEEDED(mProxySettings->GetStringList(NS_LITERAL_CSTRING("ignore-hosts"), getter_AddRefs(ignoreList))) && ignoreList) { uint32_t len = 0; ignoreList->GetLength(&len); for (uint32_t i = 0; i < len; ++i) { nsCOMPtr<nsISupportsCString> str = do_QueryElementAt(ignoreList, i); if (str) { nsCString s; if (NS_SUCCEEDED(str->GetData(s)) && !s.IsEmpty()) { if (HostIgnoredByProxy(s, aHost)) { aResult.AppendLiteral("DIRECT"); return NS_OK; } } } } } if (aScheme.LowerCaseEqualsLiteral("http")) { rv = SetProxyResultFromGSettings("org.gnome.system.proxy.http", "PROXY", aResult); } else if (aScheme.LowerCaseEqualsLiteral("https")) { rv = SetProxyResultFromGSettings("org.gnome.system.proxy.https", "PROXY", aResult); /* Try to use HTTP proxy when HTTPS proxy is not explicitly defined */ if (rv != NS_OK) rv = SetProxyResultFromGSettings("org.gnome.system.proxy.http", "PROXY", aResult); } else if (aScheme.LowerCaseEqualsLiteral("ftp")) { rv = SetProxyResultFromGSettings("org.gnome.system.proxy.ftp", "PROXY", aResult); } else { rv = NS_ERROR_FAILURE; } if (rv != NS_OK) { /* If proxy for scheme is not specified, use SOCKS proxy for all schemes */ rv = SetProxyResultFromGSettings("org.gnome.system.proxy.socks", "SOCKS", aResult); } if (NS_FAILED(rv)) { aResult.AppendLiteral("DIRECT"); } return NS_OK; }
nsresult gfxFontconfigUtils::GetFontList(nsIAtom *aLangGroup, const nsACString& aGenericFamily, nsTArray<nsString>& aListOfFonts) { aListOfFonts.Clear(); nsTArray<nsCString> fonts; nsresult rv = GetFontListInternal(fonts, aLangGroup); if (NS_FAILED(rv)) return rv; for (uint32_t i = 0; i < fonts.Length(); ++i) { aListOfFonts.AppendElement(NS_ConvertUTF8toUTF16(fonts[i])); } aListOfFonts.Sort(); int32_t serif = 0, sansSerif = 0, monospace = 0; // Fontconfig supports 3 generic fonts, "serif", "sans-serif", and // "monospace", slightly different from CSS's 5. if (aGenericFamily.IsEmpty()) serif = sansSerif = monospace = 1; else if (aGenericFamily.LowerCaseEqualsLiteral("serif")) serif = 1; else if (aGenericFamily.LowerCaseEqualsLiteral("sans-serif")) sansSerif = 1; else if (aGenericFamily.LowerCaseEqualsLiteral("monospace")) monospace = 1; else if (aGenericFamily.LowerCaseEqualsLiteral("cursive") || aGenericFamily.LowerCaseEqualsLiteral("fantasy")) serif = sansSerif = 1; else NS_NOTREACHED("unexpected CSS generic font family"); // The first in the list becomes the default in // FontBuilder.readFontSelection() if the preference-selected font is not // available, so put system configured defaults first. if (monospace) aListOfFonts.InsertElementAt(0, NS_LITERAL_STRING("monospace")); if (sansSerif) aListOfFonts.InsertElementAt(0, NS_LITERAL_STRING("sans-serif")); if (serif) aListOfFonts.InsertElementAt(0, NS_LITERAL_STRING("serif")); return NS_OK; }
already_AddRefed<SourceBufferContentManager> SourceBufferContentManager::CreateManager(dom::SourceBufferAttributes* aAttributes, MediaSourceDecoder* aParentDecoder, const nsACString &aType) { nsRefPtr<SourceBufferContentManager> manager; bool useFormatReader = Preferences::GetBool("media.mediasource.format-reader", false); if (useFormatReader) { manager = new TrackBuffersManager(aAttributes, aParentDecoder, aType); } else { manager = new TrackBuffer(aParentDecoder, aType); } // Now that we know what type we're dealing with, enable dormant as needed. #if defined(MP4_READER_DORMANT_HEURISTIC) if (aType.LowerCaseEqualsLiteral("video/mp4") || aType.LowerCaseEqualsLiteral("audio/mp4") || useFormatReader) { aParentDecoder->NotifyDormantSupported(Preferences::GetBool("media.decoder.heuristic.dormant.enabled", false)); } #endif return manager.forget(); }
NS_IMETHODIMP InterceptedJARChannel::SynthesizeHeader(const nsACString& aName, const nsACString& aValue) { if (aName.LowerCaseEqualsLiteral("content-type")) { mContentType = aValue; } return NS_OK; }
NS_IMETHODIMP nsWebNavigationInfo::IsTypeSupported(const nsACString& aType, nsIWebNavigation* aWebNav, uint32_t* aIsTypeSupported) { NS_PRECONDITION(aIsTypeSupported, "null out param?"); // Note to self: aWebNav could be an nsWebBrowser or an nsDocShell here (or // an nsSHistory, but not much we can do with that). So if we start using // it here, we need to be careful to get to the docshell correctly. // For now just report what the Gecko-Content-Viewers category has // to say for itself. *aIsTypeSupported = nsIWebNavigationInfo::UNSUPPORTED; // We want to claim that the type for PDF documents is unsupported, // so that the internal PDF viewer's stream converted will get used. if (aType.LowerCaseEqualsLiteral("application/pdf") && nsContentUtils::IsPDFJSEnabled()) { return NS_OK; } const nsCString& flatType = PromiseFlatCString(aType); nsresult rv = IsTypeSupportedInternal(flatType, aIsTypeSupported); NS_ENSURE_SUCCESS(rv, rv); if (*aIsTypeSupported) { return rv; } // If this request is for a docShell that isn't going to allow plugins, // there's no need to try and find a plugin to handle it. nsCOMPtr<nsIDocShell> docShell(do_QueryInterface(aWebNav)); bool allowed; if (docShell && NS_SUCCEEDED(docShell->GetAllowPlugins(&allowed)) && !allowed) { return NS_OK; } // Try reloading plugins in case they've changed. nsCOMPtr<nsIPluginHost> pluginHost = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); if (pluginHost) { // false will ensure that currently running plugins will not // be shut down rv = pluginHost->ReloadPlugins(); if (NS_SUCCEEDED(rv)) { // OK, we reloaded plugins and there were new ones // (otherwise NS_ERROR_PLUGINS_PLUGINSNOTCHANGED would have // been returned). Try checking whether we can handle the // content now. return IsTypeSupportedInternal(flatType, aIsTypeSupported); } } return NS_OK; }
SourceBuffer::SourceBuffer(MediaSource* aMediaSource, const nsACString& aType) : DOMEventTargetHelper(aMediaSource->GetParentObject()) , mMediaSource(aMediaSource) , mAppendWindowStart(0) , mAppendWindowEnd(PositiveInfinity<double>()) , mApparentTimestampOffset(0) , mAppendMode(SourceBufferAppendMode::Segments) , mUpdating(false) , mActive(false) , mUpdateID(0) , mReportedOffset(0) , mType(aType) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMediaSource); mEvictionThreshold = Preferences::GetUint("media.mediasource.eviction_threshold", 100 * (1 << 20)); mContentManager = SourceBufferContentManager::CreateManager(this, aMediaSource->GetDecoder(), aType); MSE_DEBUG("Create mContentManager=%p", mContentManager.get()); if (aType.LowerCaseEqualsLiteral("audio/mpeg") || aType.LowerCaseEqualsLiteral("audio/aac")) { mGenerateTimestamp = true; } else { mGenerateTimestamp = false; } mIsUsingFormatReader = Preferences::GetBool("media.mediasource.format-reader", false); ErrorResult dummy; if (mGenerateTimestamp) { SetMode(SourceBufferAppendMode::Sequence, dummy); } else { SetMode(SourceBufferAppendMode::Segments, dummy); } if (mIsUsingFormatReader) { mMediaSource->GetDecoder()->GetDemuxer()->AttachSourceBuffer( static_cast<mozilla::TrackBuffersManager*>(mContentManager.get())); } }
NS_IMETHODIMP nsCryptoHash::InitWithString(const nsACString & aAlgorithm) { nsNSSShutDownPreventionLock locker; if (isAlreadyShutDown()) { return NS_ERROR_NOT_AVAILABLE; } if (aAlgorithm.LowerCaseEqualsLiteral("md2")) return Init(nsICryptoHash::MD2); if (aAlgorithm.LowerCaseEqualsLiteral("md5")) return Init(nsICryptoHash::MD5); if (aAlgorithm.LowerCaseEqualsLiteral("sha1")) return Init(nsICryptoHash::SHA1); if (aAlgorithm.LowerCaseEqualsLiteral("sha256")) return Init(nsICryptoHash::SHA256); if (aAlgorithm.LowerCaseEqualsLiteral("sha384")) return Init(nsICryptoHash::SHA384); if (aAlgorithm.LowerCaseEqualsLiteral("sha512")) return Init(nsICryptoHash::SHA512); return NS_ERROR_INVALID_ARG; }
NS_IMETHODIMP nsTextToSubURI::UnEscapeNonAsciiURI(const nsACString & aCharset, const nsACString & aURIFragment, nsAString &_retval) { nsAutoCString unescapedSpec; NS_UnescapeURL(PromiseFlatCString(aURIFragment), esc_AlwaysCopy | esc_OnlyNonASCII, unescapedSpec); // leave the URI as it is if it's not UTF-8 and aCharset is not a ASCII // superset since converting "http:" with such an encoding is always a bad // idea. if (!IsUTF8(unescapedSpec) && (aCharset.LowerCaseEqualsLiteral("utf-16") || aCharset.LowerCaseEqualsLiteral("utf-16be") || aCharset.LowerCaseEqualsLiteral("utf-16le") || aCharset.LowerCaseEqualsLiteral("utf-7") || aCharset.LowerCaseEqualsLiteral("x-imap4-modified-utf7"))){ CopyASCIItoUTF16(aURIFragment, _retval); return NS_OK; } return convertURItoUnicode(PromiseFlatCString(aCharset), unescapedSpec, true, _retval); }
bool EncodingUtils::IsAsciiCompatible(const nsACString& aPreferredName) { // HZ and UTF-7 are no longer in mozilla-central, but keeping them here // just in case for the benefit of comm-central. return !(aPreferredName.LowerCaseEqualsLiteral("utf-16") || aPreferredName.LowerCaseEqualsLiteral("utf-16be") || aPreferredName.LowerCaseEqualsLiteral("utf-16le") || aPreferredName.LowerCaseEqualsLiteral("replacement") || aPreferredName.LowerCaseEqualsLiteral("hz-gb-2312") || aPreferredName.LowerCaseEqualsLiteral("utf-7") || aPreferredName.LowerCaseEqualsLiteral("x-imap4-modified-utf7")); }
NS_IMETHODIMP nsCryptoHash::InitWithString(const nsACString & aAlgorithm) { if (aAlgorithm.LowerCaseEqualsLiteral("md2")) return Init(nsICryptoHash::MD2); if (aAlgorithm.LowerCaseEqualsLiteral("md5")) return Init(nsICryptoHash::MD5); if (aAlgorithm.LowerCaseEqualsLiteral("sha1")) return Init(nsICryptoHash::SHA1); if (aAlgorithm.LowerCaseEqualsLiteral("sha256")) return Init(nsICryptoHash::SHA256); if (aAlgorithm.LowerCaseEqualsLiteral("sha384")) return Init(nsICryptoHash::SHA384); if (aAlgorithm.LowerCaseEqualsLiteral("sha512")) return Init(nsICryptoHash::SHA512); return NS_ERROR_INVALID_ARG; }
already_AddRefed<nsIMIMEInfo> nsOSHelperAppService::GetMIMEInfoFromOS(const nsACString& aMIMEType, const nsACString& aFileExt, bool *aFound) { *aFound = true; const nsCString& flatType = PromiseFlatCString(aMIMEType); const nsCString& flatExt = PromiseFlatCString(aFileExt); nsAutoString fileExtension; /* XXX The Equals is a gross hack to wallpaper over the most common Win32 * extension issues caused by the fix for bug 116938. See bug * 120327, comment 271 for why this is needed. Not even sure we * want to remove this once we have fixed all this stuff to work * right; any info we get from the OS on this type is pretty much * useless.... * We'll do extension-based lookup for this type later in this function. */ if (!aMIMEType.LowerCaseEqualsLiteral(APPLICATION_OCTET_STREAM)) { // (1) try to use the windows mime database to see if there is a mapping to a file extension // (2) try to see if we have some left over 4.x registry info we can peek at... GetExtensionFromWindowsMimeDatabase(aMIMEType, fileExtension); LOG(("Windows mime database: extension '%s'\n", fileExtension.get())); if (fileExtension.IsEmpty()) { GetExtensionFrom4xRegistryInfo(aMIMEType, fileExtension); LOG(("4.x Registry: extension '%s'\n", fileExtension.get())); } } // If we found an extension for the type, do the lookup nsRefPtr<nsMIMEInfoWin> mi; if (!fileExtension.IsEmpty()) mi = GetByExtension(fileExtension, flatType.get()); LOG(("Extension lookup on '%s' found: 0x%p\n", fileExtension.get(), mi.get())); bool hasDefault = false; if (mi) { mi->GetHasDefaultHandler(&hasDefault); // OK. We might have the case that |aFileExt| is a valid extension for the // mimetype we were given. In that case, we do want to append aFileExt // to the mimeinfo that we have. (E.g.: We are asked for video/mpeg and // .mpg, but the primary extension for video/mpeg is .mpeg. But because // .mpg is an extension for video/mpeg content, we want to append it) if (!aFileExt.IsEmpty() && typeFromExtEquals(NS_ConvertUTF8toUTF16(flatExt).get(), flatType.get())) { LOG(("Appending extension '%s' to mimeinfo, because its mimetype is '%s'\n", flatExt.get(), flatType.get())); bool extExist = false; mi->ExtensionExists(aFileExt, &extExist); if (!extExist) mi->AppendExtension(aFileExt); } } if (!mi || !hasDefault) { nsRefPtr<nsMIMEInfoWin> miByExt = GetByExtension(NS_ConvertUTF8toUTF16(aFileExt), flatType.get()); LOG(("Ext. lookup for '%s' found 0x%p\n", flatExt.get(), miByExt.get())); if (!miByExt && mi) return mi.forget(); if (miByExt && !mi) { return miByExt.forget(); } if (!miByExt && !mi) { *aFound = false; mi = new nsMIMEInfoWin(flatType); if (!aFileExt.IsEmpty()) { mi->AppendExtension(aFileExt); } return mi.forget(); } // if we get here, mi has no default app. copy from extension lookup. nsCOMPtr<nsIFile> defaultApp; nsAutoString desc; miByExt->GetDefaultDescription(desc); mi->SetDefaultDescription(desc); } return mi.forget(); }