Коротко суть проблемы — никакое сочетание опций командной строки не позволяет добиться в Firefox следующего поведения:
- Если указанный профиль еще не запущен, он запускается, и в нём открывается ссылка.
- Если указанный профиль уже запущен, в нём открывается ссылка. Именно в указанном профиле, а не в первой попавшейся запущенной копии FF.
Я полагал, раз это не фиксят (и даже костылей никаких нет для обхода проблемы), значит там надо переворотить прилично кода, и проблема, возможно, лежит на уровне архитектуры одного из компонет. Оказалось — решение составляет пять срочек кода. Пять!
В общем, вот патч:
diff -r 89b5fccb0514 toolkit/xre/nsAppRunner.cpp
--- a/toolkit/xre/nsAppRunner.cpp Thu Jul 14 12:20:34 2011 -0400
+++ b/toolkit/xre/nsAppRunner.cpp Sat Jul 23 03:14:32 2011 +0700
@@ -461,6 +461,8 @@
if (strimatch(aArg, arg)) {
if (aRemArg)
RemoveArg(curarg);
+ else
+ ++curarg;
if (!aParam) {
ar = ARG_FOUND;
break;
@@ -1408,10 +1410,17 @@
nsresult rv;
ArgResult ar;
+ const char *profile = 0;
nsCAutoString program(gAppData->name);
ToLowerCase(program);
const char *username = getenv("LOGNAME");
+ ar = CheckArg("p", PR_FALSE, &profile, PR_FALSE);
+ if (ar == ARG_BAD) {
+ PR_fprintf(PR_STDERR, "Error: argument -p requires a profile name\n");
+ return REMOTE_ARG_BAD;
+ }
+
const char *temp = nsnull;
ar = CheckArg("a", PR_TRUE, &temp);
if (ar == ARG_BAD) {
@@ -1434,7 +1443,7 @@
nsXPIDLCString response;
PRBool success = PR_FALSE;
- rv = client.SendCommandLine(program.get(), username, nsnull,
+ rv = client.SendCommandLine(program.get(), username, profile,
gArgc, gArgv, aDesktopStartupID,
getter_Copies(response), &success);
// did the command fail?
Может я чего-то не учел, и есть какие-то технические причины, почему это не было сделано ранее? Хотя я не вижу ни одной причины. Похоже, просто не дописали код, и так его и бросили. Протестируйте, пожалуйста. И кто-нибудь, может быть, отправит это в апстрим? Я бы отправил, но у меня сейчас времени нет на общение с этими милыми ребятами, что там любят в комментариях к багрепортам писать, что багов нет, это фантастика.
Алсо, у меня в блоге чуть больше инфы и скриншот патченного браузера в качестве пруфпика. ;)