NS_IMETHODIMP nsMessengerBootstrap::OpenMessengerWindowWithUri(const char *windowType, const char * aFolderURI, nsMsgKey aMessageKey) { bool standAloneMsgWindow = false; nsAutoCString chromeUrl("chrome://messenger/content/"); if (windowType && !strcmp(windowType, "mail:messageWindow")) { chromeUrl.Append("messageWindow.xul"); standAloneMsgWindow = true; } nsresult rv; nsCOMPtr<nsIMutableArray> argsArray(do_CreateInstance(NS_ARRAY_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); // create scriptable versions of our strings that we can store in our nsISupportsArray.... if (aFolderURI) { if (standAloneMsgWindow) { nsCOMPtr <nsIMsgFolder> folder; rv = GetExistingFolder(nsDependentCString(aFolderURI), getter_AddRefs(folder)); NS_ENSURE_SUCCESS(rv, rv); nsAutoCString msgUri; folder->GetBaseMessageURI(msgUri); nsCOMPtr<nsISupportsCString> scriptableMsgURI (do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID)); NS_ENSURE_TRUE(scriptableMsgURI, NS_ERROR_FAILURE); msgUri.Append('#'); msgUri.AppendInt(aMessageKey, 10); scriptableMsgURI->SetData(msgUri); argsArray->AppendElement(scriptableMsgURI, false); } nsCOMPtr<nsISupportsCString> scriptableFolderURI (do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID)); NS_ENSURE_TRUE(scriptableFolderURI, NS_ERROR_FAILURE); scriptableFolderURI->SetData(nsDependentCString(aFolderURI)); argsArray->AppendElement(scriptableFolderURI, false); if (!standAloneMsgWindow) { nsCOMPtr<nsISupportsPRUint32> scriptableMessageKey (do_CreateInstance(NS_SUPPORTS_PRUINT32_CONTRACTID)); NS_ENSURE_TRUE(scriptableMessageKey, NS_ERROR_FAILURE); scriptableMessageKey->SetData(aMessageKey); argsArray->AppendElement(scriptableMessageKey, false); } } nsCOMPtr<nsIWindowWatcher> wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); // we need to use the "mailnews.reuse_thread_window2" pref // to determine if we should open a new window, or use an existing one. nsCOMPtr<nsIDOMWindow> newWindow; return wwatch->OpenWindow(0, chromeUrl.get(), "_blank", "chrome,all,dialog=no", argsArray, getter_AddRefs(newWindow)); }
void Process::execCommand(const String command, bool mergeOutput) { // Make path to cmd.exe String shellPath = makeShellPath(); // Create parameter array for cmd.exe String quotedCommand = String("\"") + command + '\"'; // TODO: Should escape List<String> argsArray(3); argsArray.addBack("cmd.exe"); argsArray.addBack("/c"); argsArray.addBack(quotedCommand); List<String> envArray(0); internalExec(shellPath, argsArray, envArray, mergeOutput); }
bool InterposeCall(JSContext* cx, JS::HandleObject target, const JS::CallArgs& args, bool* done) { *done = false; XPCWrappedNativeScope* scope = ObjectScope(CurrentGlobalOrNull(cx)); MOZ_ASSERT(scope->HasInterposition()); nsCOMPtr<nsIAddonInterposition> interp = scope->GetInterposition(); RootedObject unwrappedTarget(cx, UncheckedUnwrap(target)); XPCWrappedNativeScope* targetScope = ObjectScope(unwrappedTarget); bool hasInterpostion = targetScope->HasCallInterposition(); if (!hasInterpostion) return true; // If there is a call interpostion, we don't want to propogate the // call to Base: *done = true; JSAddonId* addonId = AddonIdOfObject(target); RootedValue addonIdValue(cx, StringValue(StringOfAddonId(addonId))); RootedValue targetValue(cx, ObjectValue(*target)); RootedValue thisValue(cx, args.thisv()); RootedObject argsArray(cx, ConvertArgsToArray(cx, args)); if (!argsArray) return false; RootedValue argsVal(cx, ObjectValue(*argsArray)); RootedValue returnVal(cx); nsresult rv = interp->InterposeCall(addonIdValue, targetValue, thisValue, argsVal, args.rval()); if (NS_FAILED(rv)) { xpc::Throw(cx, rv); return false; } return true; }