Last updated September 2017
Important: These instructions were written for the legacy XMarks extension, and legacy extensions will
no longer be supported in Firefox 57 and later. If you want to continue using this you must switch to the Firefox 52 ESR releases. Those releases will get security updates until May 2018 so they're safe to use until then. XMarks has a
beta WebExtension version that they're working on. When that's done and I move off the ESR releases I'll see if it's possible to recreate my edits in that version.
Set up a WebDAV Server
If
you've already done this and are just upgrading Firefox and XMarks, you
can skip this section. If you're just joining us, read on.
You need a server for XMarks to sync to, and it supports both WebDAV and FTP. They recommend WebDAV so that's what we're using.
I originally set this up on a Windows Server 2003 machine, so the rest of the
instructions in this section are for IIS 6. You can use Apache or
whatever else you want but you're on your own.
This page might help though.
Add
IIS and WebDAV to the server if they're not already installed. Go to
Control Panel > Add or Remove Programs > Add/Remove
Windows Components > Application Server > Internet
Information Services (IIS) > World Wide Web Service and check off
Word Wide Web Service and WebDAV Publishing.
Now go
to Administrative Tools > Internet Information Services (IIS)
Manager, find your web site (Default Web Site or one you created if you
already had it installed) and go into its Properties.
I
personally changed the TCP port to 8082 and made a DNS alias
"FirefoxBookmarks" to the server so I can move it around if need be, but
that's not required.
Go to the Home Directory tab and
make sure Read and Write are checked off. You also want to go to the
folder it shows under Local Path and make sure Everyone has read and
write NTFS permissions on them (right click the folder in Explorer
> Properties > Security.)
Go to the HTTP Headers tab and click MIME Types. Add .json as text/css.
You should be all set on this part. Make sure syncing works with a manually installed and configured copy of
XMarks before continuing.
Pushing Out the Configuration
This
also hasn't changed since my last post, so if you're just upgrading
Firefox and XMarks you can skip this. Otherwise, read on.
Hey, remember the script from
this post?
Yeah, go get that. Change the webDAVURL variable to point to the
server you just set up. You can run it manually on your own computer
until you're sure it's working correctly, but when you roll this out you
want it to be a login script in Active Directory.
These are the settings it creates for you in user.js:
- extensions.xmarks.syncOnShutdown = 1
- extensions.xmarks.syncOnShutdownAsk = false
Remember how I like things to Just Work™? Well part of that is not
risking the server's copy going out of date so they're wondering where
their new bookmarks are, so I force the shutdown sync. It only takes a
second or two, and this way they don't have an unnecessary popup asking
them about it either.
- extensions.xmarks.useOwnServer = true
- extensions.xmarks.url-bookmarks = "[webDAVURL]/[username]-bookmarks.json"
This is where their bookmarks are going to be saved.
- extensions.xmarks.url-passwords = "[webDAVURL]/[username]-passwords.json"
This is where their passwords will be saved if they set it up. I didn't bother trying to make it happen automatically.
- extensions.xmarks.username = "[username]"
Don't know if it's strictly necessary, but we want XMarks to think it's fully configured so it doesn't open the setup window.
We still have the little problem of the password. It isn't
stored in user.js so we can't push it out that way. It isn't required
by WebDAV so we don't even need it, but XMarks thinks it does and will
pop up the setup window without it. Grr.
So it's time to hack XMarks.
Editing XMarks
Go get the XMarks XPI and unpack it as described in the beginning of
this article.
Then prepare it for editing with the instructions at the beginning of
this article. Yes, we must go through all that for signing if we want our edited copy to work with Firefox 48 and later. The edits below are all based on XMarks 4.3.19 so let me know if they stop
working on newer versions and I need to update these instructions.
Open
modules\settings.jsm. Search for "
get passwordNoPrompt(){". Immediately after the brace add:
return "ignore";
This
makes XMarks think it always has a password. However, this still isn't
enough to make it not pop up that "almost done" notification so we have
to take that out too. Open
chrome\content\foxmarks-overlay.js, search for "
NewUserPopup", and delete this whole section:
xm.NewUserPopup(JSON.parse(data));
Now
it's configured and quiet, but XMarks doesn't sync as soon as it starts
up. We want it to do that so that when someone signs in to a new
computer, their bookmarks are there quickly. While still in
chrome\content\foxmarks-overlay.js, search for "
xm.tabs.Changed();" and right after that add:
setTimeout(function(){Xmarks.fms.synchronize(true);},8000);
Be mindful of capitalization here. It's X
marks, not X
Marks.
This
syncs XMarks eight seconds after it starts up. Why don't we just call
XMarks.fms.synchronize() directly instead of using a timeout? I did
this previously but I've found that sometimes it fires before Firefox
has fully loaded the bookmarks, leading XMarks to pop up a conflict
message to the user about having xxx bookmarks on the server and x
bookmarks in the browser. I'm hoping this avoids that.
We're
almost done, but XMarks annoyingly wants to open a tab of release notes
every time it's updated. We don't want to bug our users with this, so since we're editing the code anyway
it's easier to just disable it. Open
modules\service.jsm, search for "
firefox/upgrade", and delete everything from "
Xmarks.OpenInNewTab" before it to "
FoxmarksBuildPostData(num_bookmarks));" after it.
That's
all our changes. You can now package up your edited copy of
XMarks and get it signed with
the rest of the instructions here. Then you can package your signed extension as an MSI using
the rest of the instructions here.
When making a new package in Active Directory, make sure you select the
Advanced deployment method and set it to replace your previous XMarks
packages on the Upgrade tab. That will cause the old version to be
uninstalled before installing this one.
Hey, couldn't I
have just done all this for you and let you download the pre-hacked
MSI? No. XMarks isn't open source, so I can't redistribute it. I can
just give you instructions on how to do it yourself.
Previous versions of this post: