void ImportOutlookMailImpl::ReportError( PRInt32 errorNum, nsString& name, nsString *pStream) { if (!pStream) return; // load the error string nsIStringBundle *pBundle = nsOutlookStringBundle::GetStringBundleProxy(); PRUnichar *pFmt = nsOutlookStringBundle::GetStringByID( errorNum); PRUnichar *pText = nsTextFormatter::smprintf( pFmt, name.get()); pStream->Append( pText); nsTextFormatter::smprintf_free( pText); nsOutlookStringBundle::FreeString( pFmt); AddLinebreak( pStream); NS_IF_RELEASE( pBundle); }
bool XPCShellEnvironment::EvaluateString(const nsString& aString, nsString* aResult) { XPCShellEnvironment* env = Environment(mCx); XPCShellEnvironment::AutoContextPusher pusher(env); JSAutoRequest ar(mCx); JS_ClearPendingException(mCx); JSObject* global = GetGlobalObject(); JSAutoEnterCompartment ac; if (!ac.enter(mCx, global)) { NS_ERROR("Failed to enter compartment!"); return false; } JSScript* script = JS_CompileUCScriptForPrincipals(mCx, global, GetPrincipal(), aString.get(), aString.Length(), "typein", 0); if (!script) { return false; } if (!ShouldCompileOnly()) { if (aResult) { aResult->Truncate(); } jsval result; JSBool ok = JS_ExecuteScript(mCx, global, script, &result); if (ok && result != JSVAL_VOID) { JSErrorReporter old = JS_SetErrorReporter(mCx, NULL); JSString* str = JS_ValueToString(mCx, result); nsDependentJSString depStr; if (str) depStr.init(mCx, str); JS_SetErrorReporter(mCx, old); if (!depStr.IsEmpty() && aResult) { aResult->Assign(depStr); } } } return true; }
void ImportEudoraMailImpl::ReportSuccess( nsString& name, PRInt32 count, nsString *pStream) { if (!pStream) return; // load the success string nsIStringBundle *pBundle = nsEudoraStringBundle::GetStringBundleProxy(); PRUnichar *pFmt = nsEudoraStringBundle::GetStringByID( EUDORAIMPORT_MAILBOX_SUCCESS, pBundle); PRUnichar *pText = nsTextFormatter::smprintf( pFmt, name.get(), count); pStream->Append( pText); nsTextFormatter::smprintf_free( pText); nsEudoraStringBundle::FreeString( pFmt); AddLinebreak( pStream); NS_IF_RELEASE( pBundle); }
void ImportOutlookAddressImpl::ReportSuccess( nsString& name, nsString *pStream) { if (!pStream) return; // load the success string nsIStringBundle *pBundle = nsOutlookStringBundle::GetStringBundleProxy(); PRUnichar *pFmt = nsOutlookStringBundle::GetStringByID( OUTLOOKIMPORT_ADDRESS_SUCCESS, pBundle); PRUnichar *pText = nsTextFormatter::smprintf( pFmt, name.get()); pStream->Append( pText); nsTextFormatter::smprintf_free( pText); nsOutlookStringBundle::FreeString( pFmt); ImportOutlookMailImpl::AddLinebreak( pStream); NS_IF_RELEASE( pBundle); }
void ImportVCardAddressImpl::ReportError( const char *errorName, nsString& name, nsString *pStream, nsIStringBundle* pBundle) { if (!pStream) return; // load the error string PRUnichar *pFmt = nsImportStringBundle::GetStringByName(errorName, pBundle); PRUnichar *pText = nsTextFormatter::smprintf(pFmt, name.get()); pStream->Append(pText); nsTextFormatter::smprintf_free(pText); NS_Free(pFmt); pStream->Append(PRUnichar('\n')); }
// helper to show a msg on the status bar // curled from nsObjectFrame.cpp ... void ShowStatus(nsPresContext* aPresContext, nsString& aStatusMsg) { nsCOMPtr<nsIDocShellTreeItem> docShellItem(aPresContext->GetDocShell()); if (docShellItem) { nsCOMPtr<nsIDocShellTreeOwner> treeOwner; docShellItem->GetTreeOwner(getter_AddRefs(treeOwner)); if (treeOwner) { nsCOMPtr<nsIWebBrowserChrome> browserChrome(do_GetInterface(treeOwner)); if (browserChrome) { browserChrome->SetStatus(nsIWebBrowserChrome::STATUS_LINK, aStatusMsg.get()); } } } }
bool JetpackChild::RecvEvalScript(const nsString& code) { JSAutoRequest request(mCx); JSObject *global = JS_GetGlobalObject(mCx); JSAutoEnterCompartment ac; if (!ac.enter(mCx, global)) return false; jsval ignored; (void) JS_EvaluateUCScript(mCx, global, code.get(), code.Length(), "", 1, &ignored); return true; }
gluezilla_setString (Handle *instance, nsString & ret) { Widget *widget = reinterpret_cast<Widget *> (instance); nsCOMPtr<nsIDOMWindow> domWindow; widget->browserWindow->webBrowser->GetContentDOMWindow( getter_AddRefs (domWindow) ); nsCOMPtr<nsIDOMDocument> domDoc; domWindow->GetDocument (getter_AddRefs(domDoc)); nsCOMPtr<nsIDOMNode> node; domDoc->GetFirstChild (getter_AddRefs (node)); node->GetLocalName (ret); const PRUnichar * s = (PRUnichar *)ret.get (); }
nsresult Conv_FE_06_WithReverse(const nsString& aSrc, nsString& aDst) { PRUnichar *aSrcUnichars = (PRUnichar *)aSrc.get(); PRBool foundArabic = PR_FALSE; PRUint32 i, endArabic, beginArabic, size; beginArabic = 0; size = aSrc.Length(); aDst.Truncate(); for (endArabic=0;endArabic<size;endArabic++) { if (aSrcUnichars[endArabic] == 0x0000) break; // no need to convert char after the NULL while( (IS_FE_CHAR(aSrcUnichars[endArabic]))|| (IS_ARABIC_CHAR(aSrcUnichars[endArabic]))|| (IS_ARABIC_DIGIT(aSrcUnichars[endArabic]))|| (aSrcUnichars[endArabic]==0x0020)) { if(! foundArabic ) { beginArabic=endArabic; foundArabic= PR_TRUE; } endArabic++; } if(foundArabic) { endArabic--; for (i=endArabic; i>=beginArabic; i--) { if(IS_FE_CHAR(aSrcUnichars[i])) { //ahmed for the bug of lamalf aDst += PresentationToOriginal(aSrcUnichars[i], 0); if (PresentationToOriginal(aSrcUnichars[i], 1)) { // Two characters, we have to resize the buffer :( aDst += PresentationToOriginal(aSrcUnichars[i], 1); } // if expands to 2 char } else { // do we need to check the following if ? if((IS_ARABIC_CHAR(aSrcUnichars[i]))|| (IS_ARABIC_DIGIT(aSrcUnichars[i]))|| (aSrcUnichars[i]==0x0020)) aDst += aSrcUnichars[i]; } } } else { aDst += aSrcUnichars[endArabic]; } foundArabic=PR_FALSE; }// for : loop the buffer return NS_OK; }
static void splitString(nsString& aSource, nsString& aTarget) { aTarget.Truncate() ; PRInt32 offset = aSource.FindChar('\n') ; if (offset >= 0) { const PRUnichar *source = aSource.get() + offset + 1 ; while (*source) { if (*source == '\n' || *source == '\r') { aTarget.Append(PRUnichar(' ')) ; } else { aTarget.Append(*source) ; } ++ source ; } aSource.SetLength(offset); } }
void ImportAddressImpl::ReportSuccess(nsString& name, nsString *pStream, nsIStringBundle* pBundle) { if (!pStream) return; // load the success string PRUnichar *pFmt = nsImportStringBundle::GetStringByID(TEXTIMPORT_ADDRESS_SUCCESS, pBundle); PRUnichar *pText = nsTextFormatter::smprintf(pFmt, name.get()); pStream->Append(pText); nsTextFormatter::smprintf_free(pText); NS_Free(pFmt); pStream->Append(PRUnichar('\n')); }
bool XPCShellEnvironment::EvaluateString(const nsString& aString, nsString* aResult) { XPCShellEnvironment* env = Environment(mCx); nsCxPusher pusher; pusher.Push(env->GetContext()); JSAutoRequest ar(mCx); JS_ClearPendingException(mCx); JS::Rooted<JSObject*> global(mCx, GetGlobalObject()); JSAutoCompartment ac(mCx, global); JSScript* script = JS_CompileUCScriptForPrincipals(mCx, global, GetPrincipal(), aString.get(), aString.Length(), "typein", 0); if (!script) { return false; } if (!ShouldCompileOnly()) { if (aResult) { aResult->Truncate(); } JS::Rooted<JS::Value> result(mCx); JSBool ok = JS_ExecuteScript(mCx, global, script, result.address()); if (ok && result != JSVAL_VOID) { JSErrorReporter old = JS_SetErrorReporter(mCx, NULL); JSString* str = JS_ValueToString(mCx, result); nsDependentJSString depStr; if (str) depStr.init(mCx, str); JS_SetErrorReporter(mCx, old); if (!depStr.IsEmpty() && aResult) { aResult->Assign(depStr); } } } return true; }
void ErrorReporter::ReportUnexpected(const char *aMessage, const nsString &aParam, const nsString &aValue) { if (!ShouldReportErrors()) return; nsAutoString qparam; nsStyleUtil::AppendEscapedCSSIdent(aParam, qparam); const char16_t *params[2] = { qparam.get(), aValue.get() }; nsAutoString str; sStringBundle->FormatStringFromName(NS_ConvertASCIItoUTF16(aMessage).get(), params, ArrayLength(params), getter_Copies(str)); AddToError(str); }
nsresult nsMsgPrintEngine::FireThatLoadOperation(const nsString& uri) { nsresult rv; nsCString uriCStr; LossyCopyUTF16toASCII(uri, uriCStr); nsCOMPtr <nsIMsgMessageService> messageService; // if this is a data: url, skip it, because // we've already got something we can print // and we know it is not a message. // // if this an about:blank url, skip it, because // ... // // if this is an addbook: url, skip it, because // we know that isn't a message. // // if this is a message part (or .eml file on disk) // skip it, because we don't want to print the parent message // we want to print the part. // example: imap://sspitzer@nsmail-1:143/fetch%3EUID%3E/INBOX%3E180958?part=1.1.2&type=application/x-message-display&filename=test" if (!StringBeginsWith(uriCStr, NS_LITERAL_CSTRING(DATA_URL_PREFIX)) && !StringBeginsWith(uriCStr, NS_LITERAL_CSTRING(ADDBOOK_URL_PREFIX)) && !uriCStr.EqualsLiteral("about:blank") && uriCStr.Find(NS_LITERAL_CSTRING("type=application/x-message-display")) == -1) { rv = GetMessageServiceFromURI(uriCStr, getter_AddRefs(messageService)); } if (NS_SUCCEEDED(rv) && messageService) rv = messageService->DisplayMessageForPrinting(uriCStr.get(), mDocShell, nsnull, nsnull, nsnull); //If it's not something we know about, then just load try loading it directly. else { nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell)); if (webNav) rv = webNav->LoadURI(uri.get(), // URI string nsIWebNavigation::LOAD_FLAGS_NONE, // Load flags nsnull, // Referring URI nsnull, // Post data nsnull); // Extra headers } return rv; }
NS_GFX_(bool) NS_HexToRGB(const nsString& aColorSpec, nscolor* aResult) { const PRUnichar* buffer = aColorSpec.get(); int nameLen = aColorSpec.Length(); if ((nameLen == 3) || (nameLen == 6)) { // Make sure the digits are legal for (int i = 0; i < nameLen; i++) { PRUnichar ch = buffer[i]; if (((ch >= '0') && (ch <= '9')) || ((ch >= 'a') && (ch <= 'f')) || ((ch >= 'A') && (ch <= 'F'))) { // Legal character continue; } // Whoops. Illegal character. return false; } // Convert the ascii to binary int dpc = ((3 == nameLen) ? 1 : 2); // Translate components from hex to binary int r = ComponentValue(buffer, nameLen, 0, dpc); int g = ComponentValue(buffer, nameLen, 1, dpc); int b = ComponentValue(buffer, nameLen, 2, dpc); if (dpc == 1) { // Scale single digit component to an 8 bit value. Replicate the // single digit to compute the new value. r = (r << 4) | r; g = (g << 4) | g; b = (b << 4) | b; } NS_ASSERTION((r >= 0) && (r <= 255), "bad r"); NS_ASSERTION((g >= 0) && (g <= 255), "bad g"); NS_ASSERTION((b >= 0) && (b <= 255), "bad b"); *aResult = NS_RGB(r, g, b); return true; } // Improperly formatted color value return false; }
// We store the records in files in the system temp dir. static nsresult GetGMPStorageDir(nsIFile** aTempDir, const nsString& aOrigin) { if (NS_WARN_IF(!aTempDir)) { return NS_ERROR_INVALID_ARG; } // Directory service is main thread only... nsRefPtr<GetTempDirTask> task = new GetTempDirTask(); nsCOMPtr<nsIThread> mainThread = do_GetMainThread(); mozilla::SyncRunnable::DispatchToThread(mainThread, task); nsCOMPtr<nsIFile> tmpFile; nsresult rv = NS_NewLocalFile(task->mPath, false, getter_AddRefs(tmpFile)); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } rv = tmpFile->AppendNative(nsDependentCString("mozilla-gmp-storage")); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } // TODO: When aOrigin is the same node-id as the GMP sees in the child // process (a UUID or somesuch), we can just append it un-hashed here. // This should reduce the chance of hash collsions exposing data. nsAutoString nodeIdHash; nodeIdHash.AppendInt(HashString(static_cast<const char16_t*>(aOrigin.get()))); rv = tmpFile->Append(nodeIdHash); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } rv = tmpFile->Create(nsIFile::DIRECTORY_TYPE, 0700); if (rv != NS_ERROR_FILE_ALREADY_EXISTS && NS_WARN_IF(NS_FAILED(rv))) { return rv; } tmpFile.forget(aTempDir); return NS_OK; }
// XXX i18n helper routines void nsIsIndexFrame::URLEncode(const nsString& aString, nsIUnicodeEncoder* encoder, nsString& oString) { char* inBuf = nsnull; if(encoder) inBuf = UnicodeToNewBytes(aString.get(), aString.Length(), encoder); if(nsnull == inBuf) inBuf = ToNewCString(aString); // convert to CRLF breaks char* convertedBuf = nsLinebreakConverter::ConvertLineBreaks(inBuf, nsLinebreakConverter::eLinebreakAny, nsLinebreakConverter::eLinebreakNet); delete [] inBuf; char* outBuf = nsEscape(convertedBuf, url_XPAlphas); oString.AssignASCII(outBuf); nsMemory::Free(outBuf); nsMemory::Free(convertedBuf); }
nsresult nsAddbookProtocolHandler::GenerateXMLOutputChannel( nsString &aOutput, nsIAddbookUrl *addbookUrl, nsIURI *aURI, nsIChannel **_retval) { nsIChannel *channel; nsresult rv; nsCOMPtr<nsIStringInputStream> inStr(do_CreateInstance("@mozilla.org/io/string-input-stream;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); NS_ConvertUTF16toUTF8 utf8String(aOutput.get()); rv = inStr->SetData(utf8String.get(), utf8String.Length()); rv = NS_NewInputStreamChannel(&channel, aURI, inStr, NS_LITERAL_CSTRING("text/xml")); NS_ENSURE_SUCCESS(rv, rv); *_retval = channel; return rv; }
// static already_AddRefed<nsStringBuffer> nsCSSValue::BufferFromString(const nsString& aValue) { nsStringBuffer* buffer = nsStringBuffer::FromString(aValue); if (buffer) { buffer->AddRef(); return buffer; } PRUnichar length = aValue.Length(); // NOTE: Alloc prouduces a new, already-addref'd (refcnt = 1) buffer. buffer = nsStringBuffer::Alloc((length + 1) * sizeof(PRUnichar)); if (NS_LIKELY(buffer != 0)) { PRUnichar* data = static_cast<PRUnichar*>(buffer->Data()); nsCharTraits<PRUnichar>::copy(data, aValue.get(), length); // Null-terminate. data[length] = 0; } return buffer; }
void HttpChannelChild::OnStatus(const nsresult& status, const nsString& statusArg) { LOG(("HttpChannelChild::OnStatus [this=%p status=%x]\n", this, status)); if (mCanceled) return; // cache the progress sink so we don't have to query for it each time. if (!mProgressSink) GetCallback(mProgressSink); AutoEventEnqueuer ensureSerialDispatch(this); // block socket status event after Cancel or OnStopRequest has been called. if (mProgressSink && NS_SUCCEEDED(mStatus) && mIsPending && !(mLoadFlags & LOAD_BACKGROUND)) { mProgressSink->OnStatus(this, nsnull, status, statusArg.get()); } }
JSBool TestShellCommandParent::RunCallback(const nsString& aResponse) { NS_ENSURE_TRUE(*mCallback.ToJSValPtr() != JSVAL_NULL && mCx, JS_FALSE); JSAutoRequest ar(mCx); NS_ENSURE_TRUE(mCallback.ToJSObject(), JS_FALSE); JSAutoCompartment ac(mCx, mCallback.ToJSObject()); JS::Rooted<JSObject*> global(mCx, JS::CurrentGlobalOrNull(mCx)); JSString* str = JS_NewUCStringCopyN(mCx, aResponse.get(), aResponse.Length()); NS_ENSURE_TRUE(str, JS_FALSE); JS::Rooted<JS::Value> strVal(mCx, JS::StringValue(str)); JS::Rooted<JS::Value> rval(mCx); JSBool ok = JS_CallFunctionValue(mCx, global, mCallback, 1, strVal.address(), rval.address()); NS_ENSURE_TRUE(ok, JS_FALSE); return JS_TRUE; }
bool XPCShellEnvironment::EvaluateString(const nsString& aString, nsString* aResult) { AutoSafeJSContext cx; JS::Rooted<JSObject*> global(cx, GetGlobalObject()); JSAutoCompartment ac(cx, global); JS::CompileOptions options(cx); options.setFileAndLine("typein", 0) .setPrincipals(GetPrincipal()); JSScript* script = JS_CompileUCScript(cx, global, aString.get(), aString.Length(), options); if (!script) { return false; } if (aResult) { aResult->Truncate(); } JS::Rooted<JS::Value> result(cx); bool ok = JS_ExecuteScript(cx, global, script, result.address()); if (ok && result != JSVAL_VOID) { JSErrorReporter old = JS_SetErrorReporter(cx, nullptr); JSString* str = JS::ToString(cx, result); nsDependentJSString depStr; if (str) depStr.init(cx, str); JS_SetErrorReporter(cx, old); if (!depStr.IsEmpty() && aResult) { aResult->Assign(depStr); } } return true; }
bool XPCShellEnvironment::EvaluateString(const nsString& aString, nsString* aResult) { AutoSafeJSContext cx; JS::Rooted<JSObject*> global(cx, GetGlobalObject()); JSAutoCompartment ac(cx, global); JS::CompileOptions options(cx); options.setFileAndLine("typein", 0); JS::Rooted<JSScript*> script(cx); if (!JS_CompileUCScript(cx, aString.get(), aString.Length(), options, &script)) { return false; } if (aResult) { aResult->Truncate(); } JS::Rooted<JS::Value> result(cx); bool ok = JS_ExecuteScript(cx, script, &result); if (ok && !result.isUndefined()) { JSErrorReporter old = JS_SetErrorReporter(JS_GetRuntime(cx), nullptr); JSString* str = JS::ToString(cx, result); nsAutoJSString autoStr; if (str) autoStr.init(cx, str); JS_SetErrorReporter(JS_GetRuntime(cx), old); if (!autoStr.IsEmpty() && aResult) { aResult->Assign(autoStr); } } return true; }
bool XPCShellEnvironment::EvaluateString(const nsString& aString, nsString* aResult) { AutoEntryScript aes(GetGlobalObject(), "ipc XPCShellEnvironment::EvaluateString"); JSContext* cx = aes.cx(); JS::CompileOptions options(cx); options.setFileAndLine("typein", 0); JS::Rooted<JSScript*> script(cx); if (!JS_CompileUCScript(cx, aString.get(), aString.Length(), options, &script)) { return false; } if (aResult) { aResult->Truncate(); } JS::Rooted<JS::Value> result(cx); bool ok = JS_ExecuteScript(cx, script, &result); if (ok && !result.isUndefined()) { JS::WarningReporter old = JS::SetWarningReporter(cx, nullptr); JSString* str = JS::ToString(cx, result); nsAutoJSString autoStr; if (str) autoStr.init(cx, str); JS::SetWarningReporter(cx, old); if (!autoStr.IsEmpty() && aResult) { aResult->Assign(autoStr); } } return true; }
bool TestShellCommandParent::RunCallback(const nsString& aResponse) { NS_ENSURE_TRUE(mCallback.isObject(), false); // We're about to run script via JS_CallFunctionValue, so we need an // AutoEntryScript. This is just for testing and not in any spec. dom::AutoEntryScript aes(&mCallback.toObject(), "TestShellCommand"); JSContext* cx = aes.cx(); JS::Rooted<JSObject*> global(cx, JS::CurrentGlobalOrNull(cx)); JSString* str = JS_NewUCStringCopyN(cx, aResponse.get(), aResponse.Length()); NS_ENSURE_TRUE(str, false); JS::Rooted<JS::Value> strVal(cx, JS::StringValue(str)); JS::Rooted<JS::Value> rval(cx); JS::Rooted<JS::Value> callback(cx, mCallback); bool ok = JS_CallFunctionValue(cx, global, callback, JS::HandleValueArray(strVal), &rval); NS_ENSURE_TRUE(ok, false); return true; }
bool TestShellCommandParent::RunCallback(const nsString& aResponse) { NS_ENSURE_TRUE(!mCallback.get().isNull() && mCx, false); // We're pulling a cx off the heap, so make sure it's stack-top. AutoCxPusher pusher(mCx); NS_ENSURE_TRUE(mCallback.ToJSObject(), false); JSAutoCompartment ac(mCx, mCallback.ToJSObject()); JS::Rooted<JSObject*> global(mCx, JS::CurrentGlobalOrNull(mCx)); JSString* str = JS_NewUCStringCopyN(mCx, aResponse.get(), aResponse.Length()); NS_ENSURE_TRUE(str, false); JS::Rooted<JS::Value> strVal(mCx, JS::StringValue(str)); JS::Rooted<JS::Value> rval(mCx); JS::Rooted<JS::Value> callback(mCx, mCallback); bool ok = JS_CallFunctionValue(mCx, global, callback, strVal, &rval); NS_ENSURE_TRUE(ok, false); return true; }
nsresult Conv_FE_06(const nsString& aSrc, nsString& aDst) { PRUnichar *aSrcUnichars = (PRUnichar *)aSrc.get(); PRUint32 i, size = aSrc.Length(); aDst.Truncate(); for (i=0;i<size;i++) { // i : Source if (aSrcUnichars[i] == 0x0000) break; // no need to convert char after the NULL if (IS_FE_CHAR(aSrcUnichars[i])) { //ahmed for lamalf PRUnichar ch = (PresentationToOriginal(aSrcUnichars[i], 1)); if(ch) aDst += ch; ch=(PresentationToOriginal(aSrcUnichars[i], 0)); if(ch) aDst += ch; else //if it is 00, just output what we have in FExx aDst += aSrcUnichars[i]; } else { aDst += aSrcUnichars[i]; // copy it even if it is not in FE range } }// for : loop the buffer return NS_OK; }
JSBool TestShellCommandParent::RunCallback(const nsString& aResponse) { NS_ENSURE_TRUE(*mCallback.ToJSValPtr() != JSVAL_NULL && mCx, JS_FALSE); JSAutoRequest ar(mCx); JSObject* global = JS_GetGlobalObject(mCx); NS_ENSURE_TRUE(global, JS_FALSE); JSAutoCompartment ac(mCx, global); JSString* str = JS_NewUCStringCopyN(mCx, aResponse.get(), aResponse.Length()); NS_ENSURE_TRUE(str, JS_FALSE); jsval argv[] = { STRING_TO_JSVAL(str) }; unsigned argc = ArrayLength(argv); jsval rval; JSBool ok = JS_CallFunctionValue(mCx, global, mCallback, argc, argv, &rval); NS_ENSURE_TRUE(ok, JS_FALSE); return JS_TRUE; }
// static already_AddRefed<nsStringBuffer> nsCSSValue::BufferFromString(const nsString& aValue) { nsStringBuffer* buffer = nsStringBuffer::FromString(aValue); if (buffer) { buffer->AddRef(); return buffer; } PRUnichar length = aValue.Length(); // NOTE: Alloc prouduces a new, already-addref'd (refcnt = 1) buffer. // NOTE: String buffer allocation is currently fallible. buffer = nsStringBuffer::Alloc((length + 1) * sizeof(PRUnichar)); if (NS_UNLIKELY(!buffer)) { NS_RUNTIMEABORT("out of memory"); } PRUnichar* data = static_cast<PRUnichar*>(buffer->Data()); nsCharTraits<PRUnichar>::copy(data, aValue.get(), length); // Null-terminate. data[length] = 0; return buffer; }
void SetTaskbarGroupId(const nsString& aId) { typedef HRESULT (WINAPI * SetCurrentProcessExplicitAppUserModelIDPtr)(PCWSTR AppID); SetCurrentProcessExplicitAppUserModelIDPtr funcAppUserModelID = nsnull; HMODULE hDLL = ::LoadLibraryW(kShellLibraryName); funcAppUserModelID = (SetCurrentProcessExplicitAppUserModelIDPtr) GetProcAddress(hDLL, "SetCurrentProcessExplicitAppUserModelID"); if (!funcAppUserModelID) { ::FreeLibrary(hDLL); return; } if (FAILED(funcAppUserModelID(aId.get()))) { NS_WARNING("SetCurrentProcessExplicitAppUserModelID failed for child process."); } if (hDLL) ::FreeLibrary(hDLL); }