Closed
Bug 237283
Opened 21 years ago
Closed 21 years ago
make x-remote aware of profiles, specific programs and usersnames
Categories
(Core Graveyard :: X-remote, defect)
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: blizzard, Assigned: blizzard)
References
Details
Attachments
(1 file, 4 obsolete files)
45.62 KB,
patch
|
bryner
:
review+
bryner
:
superreview+
asa
:
approval1.7+
|
Details | Diff | Splinter Review |
This is the bug that will make it possible to use xremote with thunderbird,
firebird and "stock" mozilla. Also, it should be possible to specify profiles,
programs and usernames on the command line for mozilla-xremote-client. Code to
follow.
Assignee | ||
Comment 1•21 years ago
|
||
This patch implements much of what's required, minus the actual profile name
being stuffed onto the window.
Assignee | ||
Comment 2•21 years ago
|
||
This patch patches the forked code that firebird uses, too.
Assignee | ||
Comment 3•21 years ago
|
||
This patch should be enough to use. Looking for reviews. Includes profile
support.
Attachment #143734 -
Attachment is obsolete: true
Attachment #143735 -
Attachment is obsolete: true
Assignee | ||
Comment 4•21 years ago
|
||
Still need to add support for profile switching and add more command line
handling to the mozilla client.
Assignee | ||
Comment 5•21 years ago
|
||
This patch has better support for profile switching and adds real command line
handling to the mozilla binary(ies) proper.
Attachment #143741 -
Attachment is obsolete: true
Assignee | ||
Updated•21 years ago
|
Attachment #143973 -
Flags: review?(bryner)
Comment 6•21 years ago
|
||
Comment on attachment 143973 [details] [diff] [review]
patch that includes better profile support and command line handling
>--- xpfe/bootstrap/nsAppRunner.cpp 8 Mar 2004 23:48:39 -0000 1.410
>+++ xpfe/bootstrap/nsAppRunner.cpp 15 Mar 2004 20:04:18 -0000
@@ -1416,43 +1416,108 @@
+ const char *remote = NULL;
+ const char *profile = NULL;
+ const char *program = NULL;
+ const char *username = NULL;
I've seen NULL cause weird compile problems on some platforms when used in C++.
Probably safer to use 0 or nsnull.
>+
>+ // Get the remote argument and advance past it.
>+ i++;
>+ remote = argv[i];
remote = argv[++i] might be slightly more efficient. Same comment applies to
the other cases below where this pattern occurs.
>+ else if (PL_strcasecmp(argv[i], "-b") == 0) {
>+ // someone used the -b <browser> flag - save the contents
I'd prefer if this was -a <application>. We certainly have non-browser XUL
apps that could accept URLs, for example Thunderbird could
>+ // Same with the program name
>+ if (!program) {
>+ program = MOZ_APP_NAME;
>+ }
>+
Hm, could this just be argv[0] or did you want it to be a 'pretty name' of the
app?
>+ // was there a window not running?
"not a window running" would sound better to me
All of those nsAppRunner.cpp comments apply to the toolkit/xre version as well,
obviously.
>--- xpfe/components/xremote/src/XRemoteService.cpp 10 Feb 2004 00:18:51 -0000 1.33
>+++ xpfe/components/xremote/src/XRemoteService.cpp 15 Mar 2004 20:04:18 -0000
>@@ -99,7 +103,7 @@
> XRemoteService::Observe(nsISupports *aSubject, const char *aTopic,
> const PRUnichar *aData)
> {
>- if (!nsCRT::strcmp(aTopic, "quit-application")) {
>+ if (strcmp(aTopic, "quit-application")) {
Er, did you mean to reverse the test here? This will call Shutdown() if aTopic
is _not_ quit-application.
>@@ -384,8 +388,13 @@
> return NS_ERROR_FAILURE;
> }
>
>+
>+ nsCAutoString profile;
>+ GetProfileName(profile);
>+
> nsresult rv;
>- rv = widgetHelper->EnableXRemoteCommands(mainWidget);
>+ rv = widgetHelper->EnableXRemoteCommands(mainWidget, profile.get(),
>+ mProgram.get());
Fix the hard tabs. There are tons of them in the rest of the patch; I'm not
going to mark them all.
>@@ -999,6 +1012,24 @@
> return NS_ERROR_FAILURE;
>
> return mediator->GetMostRecentWindow(aType, _retval);
>+}
>+
>+void
>+XRemoteService::GetProfileName(nsACString &aProfile)
>+{
>+ // Get the current profile name and save it.
>+ nsresult rv;
>+ nsCOMPtr<nsIProfile> profileMgr;
>+ profileMgr = do_GetService(NS_PROFILE_CONTRACTID, &rv);
>+ if (NS_FAILED(rv) || !profileMgr)
do_GetService will never return a success code and a null pointer, or a
non-null pointer and a failure code. Pick one.
>+ return;
>+
>+ PRUnichar *name;
>+ rv = profileMgr->GetCurrentProfile(&name);
>+ if (NS_FAILED(rv) || !name)
Same comment as above, for GetCurrentProfile().
>+ return;
>+
>+ aProfile = NS_LossyConvertUCS2toASCII(nsDependentString(name));
You can avoid some overhead here if you do:
LossyCopyUTF16toASCII(name, aProfile);
>--- xpfe/components/xremote/src/XRemoteService.h 21 Nov 2003 00:09:45 -0000 1.8
>+++ xpfe/components/xremote/src/XRemoteService.h 15 Mar 2004 20:04:18 -0000
>@@ -104,4 +107,6 @@
> // have we been started up from the main loop yet?
> PRBool mRunning;
>
>+ // Name of our program
>+ nsCAutoString mProgram;
As a member variable, we generally use nsCString rather than nsCAutoString.
>--- widget/public/nsIXRemoteClient.idl 20 Oct 2000 05:09:06 -0000 1.1
>+++ widget/public/nsIXRemoteClient.idl 15 Mar 2004 20:04:19 -0000
>@@ -31,8 +31,34 @@
> /**
> * Sends a command to a running instance. If it returns false then
> * there is no running instance.
>+ *
>+ * @param aProgram This is the preferred program that we want to use
>+ * for this particular command.
>+ *
>+ * @param aNoProgramFallback This boolean attribute tells the client
>+ * code that if the preferred program isn't found that it should
>+ * fall not send the command to another server.
s/fall/fail/
>--- widget/src/xremoteclient/XRemoteClient.cpp 21 Nov 2003 00:09:45 -0000 1.13
>+++ widget/src/xremoteclient/XRemoteClient.cpp 15 Mar 2004 20:04:19 -0000
>+ // Check to see if it has the user atom on that window. If there
>+ // is then we need to make sure that it matches what we have.
>+ const char *username = PR_GetEnv("LOGNAME");
>+ if (aUsername) {
>+ username = aUsername;
>+ }
const char *username;
if (aUsername) {
username = aUserName;
} else {
username = PR_GetEnv("LOGNAME");
}
(avoid the call to PR_GetEnv if the username is specified, which the compiler
can't optimize away because it doesn't know the side-effects)
>+ // Check to see if there's a profile name on this window. If
>+ // there is, then we need to make sure it matches what someone
>+ // passed in.
>+ if (aProfile) {
>+ status = XGetWindowProperty(mDisplay, w, mMozProfileAtom,
>+ 0, (65536 / sizeof(long)),
>+ False, XA_STRING,
>+ &type, &format, &nitems, &bytesafter,
>+ &data_return);
>+
>+ // If there's a username compare it with what we have
s/username/profile name/
>--- widget/src/xremoteclient/mozilla-xremote-client.cpp 12 Dec 2003 23:02:11 -0000 1.2
>+++ widget/src/xremoteclient/mozilla-xremote-client.cpp 15 Mar 2004 20:04:19 -0000
>@@ -34,18 +34,52 @@
> * ***** END LICENSE BLOCK ***** */
>
> #include <stdio.h>
>+#include <stdlib.h>
>+#include <plgetopt.h>
> #include "XRemoteClient.h"
>
>+void print_usage(void);
>+
Make this |static|.
> int main(int argc, char **argv)
> {
> nsresult rv;
> XRemoteClient client;
>+ char *browser = NULL;
>+ char *profile = NULL;
>+ char *username = NULL;
>+ char *command = NULL;
Same comments as above about NULL in c++, and s/browser/program/.
r=bryner with all of that fixed.
Attachment #143973 -
Flags: review?(bryner) → review+
Assignee | ||
Comment 7•21 years ago
|
||
This should resolve bryner's issues and also includes fixes for gtk 1.2.
Attachment #143973 -
Attachment is obsolete: true
Assignee | ||
Updated•21 years ago
|
Attachment #144593 -
Flags: review?(bryner)
Assignee | ||
Updated•21 years ago
|
Attachment #144593 -
Flags: superreview?(bryner)
Comment 8•21 years ago
|
||
Comment on attachment 144593 [details] [diff] [review]
patch that includes gtk 1.2 support and bryner fixes
Looks good. One other thing I noticed, around where I had you change it to not
call PR_GetEnv("LOGNAME") if aUsername is specified. Go ahead and pull that
whole thing out above the loop, it doesn't need to do that for each window it
checks.
Attachment #144593 -
Flags: superreview?(bryner)
Attachment #144593 -
Flags: superreview+
Attachment #144593 -
Flags: review?(bryner)
Attachment #144593 -
Flags: review+
Comment 9•21 years ago
|
||
Comment on attachment 144593 [details] [diff] [review]
patch that includes gtk 1.2 support and bryner fixes
oof, this is going to midair horribly with bug 237745 and the single-profile
stuff in the new toolkit (see
http://bugzilla.mozilla.org/attachment.cgi?id=144252&action=view)
What timeframe is this landing in? Immediately is ok, I can work this into my
new profile stuff. If this is going to wait for 1.8a, we might have problems.
Assignee | ||
Comment 10•21 years ago
|
||
I'm not sure if it will have a big impact or not. We don't actually try and
figure out what profile is in use until someone starts up the xremote service,
which is after profiles are currently started up. The xremote startup does
happen in the appshell. Do we need to delay it more until someone attaches it
to a window? What's the long-term profile strategy? Do I need to just rip this
code right out of here?
Assignee | ||
Updated•21 years ago
|
Attachment #144593 -
Flags: approval1.7?
Comment 11•21 years ago
|
||
Comment on attachment 144593 [details] [diff] [review]
patch that includes gtk 1.2 support and bryner fixes
a=asa (on behalf of drivers) for checkin to 1.7
Attachment #144593 -
Flags: approval1.7? → approval1.7+
Assignee | ||
Comment 12•21 years ago
|
||
Checked in.
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
![]() |
||
Comment 13•21 years ago
|
||
It looks like this checkin caused bug 240166 and bug 240174
![]() |
||
Comment 14•21 years ago
|
||
Also caused crash bug 240238
Comment 15•21 years ago
|
||
Just a thought, is the MOZ_APP_NAME macro definition in the stuff checked into
trunk? If MOZ_APP_NAME is not defined, then the macro becomes "" and the
application does not behave well. I personally have tested it only with the
firefox & thunderbird duo, but I suspect mozilla needs it to be defined too.
Assignee | ||
Comment 16•21 years ago
|
||
If MOZ_APP_NAME isn't defined, it won't build. :) Mozilla does define this -
it's just 'mozilla'.
Comment 17•21 years ago
|
||
if I read this correctly it should now be possible to give optional application
names, usernames and profiles with mozilla -remote or mozilla-xremote-client.
But I see the following now:
- mozilla is running
- a simple mozilla-xremote-client 'ping()' is failing:
/opt/mozilla/lib/mozilla-xremote-client: Error: Failed to send command: No error
string reported..
it's a gtk2 build dated a few hours ago
I have to recheck because I remember it worked one time.
Comment 18•21 years ago
|
||
sorry for the noise but there seems to be a hickup in my system. I can't
reproducte it anymore.
Comment 19•21 years ago
|
||
*** Bug 242296 has been marked as a duplicate of this bug. ***
Comment 20•21 years ago
|
||
Is there any documentation for this?
I know about this page http://www.mozilla.org/unix/remote.html, but what about
the new features that where added (profiles, usernames)?
Comment 21•21 years ago
|
||
*** Bug 243391 has been marked as a duplicate of this bug. ***
Updated•6 years ago
|
Product: Core → Core Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•