mirror of
				https://codeberg.org/claui/mobile-config-firefox.git
				synced 2025-11-04 04:25:55 +00:00 
			
		
		
		
	install userChrome.css using autoconfig instead of schell scripts (MR 2)
Firefox can run an autoconfig Javascript on startup, which can be used to install and update userChrome.css, both when creating a new profile and using a pre-existing one. This removes the need for a wrapper script and related complications (changes to $PATH, different processing for new and pre-existing profiles...) Co-Authored-By: Oliver Smith <ollieparanoid@postmarketos.org>
This commit is contained in:
		
							parent
							
								
									08e2288138
								
							
						
					
					
						commit
						712b850c3b
					
				
					 5 changed files with 39 additions and 46 deletions
				
			
		
							
								
								
									
										6
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -27,13 +27,11 @@ install: all
 | 
			
		|||
		"$(DESTDIR)/etc/firefox/policies/policies.json"
 | 
			
		||||
	install -Dm644 src/prefs.js \
 | 
			
		||||
		"$(DESTDIR)/$(FIREFOX_DIR)/defaults/pref/mobile-config.js"
 | 
			
		||||
	install -Dm644 src/mobile-config-autoconfig.js \
 | 
			
		||||
		"$(DESTDIR)/$(FIREFOX_DIR)/mobile-config-autoconfig.js"
 | 
			
		||||
	install -Dm644 "out/home.html" \
 | 
			
		||||
		"$(DESTDIR)/usr/share/mobile-config-firefox/home.html"
 | 
			
		||||
	install -Dm644 "out/userChrome.css" \
 | 
			
		||||
		"$(DESTDIR)/etc/mobile-config-firefox/userChrome.css"
 | 
			
		||||
	install -Dm755 "src/mobile-config-firefox.sh" \
 | 
			
		||||
		"$(DESTDIR)/usr/mobile-config/bin/firefox"
 | 
			
		||||
	install -Dm755 "src/mobile-config-path.sh" \
 | 
			
		||||
		"$(DESTDIR)/etc/profile.d/mobile-config-path.sh"
 | 
			
		||||
 | 
			
		||||
.PHONY: all clean install
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								src/mobile-config-autoconfig.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/mobile-config-autoconfig.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
// Copyright 2020 Arnaud Ferraris, Oliver Smith
 | 
			
		||||
// SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
// This is a Firefox autoconfig file:
 | 
			
		||||
// https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig
 | 
			
		||||
 | 
			
		||||
// Import custom userChrome.css on startup or new profile creation
 | 
			
		||||
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 | 
			
		||||
Cu.import("resource://gre/modules/Services.jsm");
 | 
			
		||||
Cu.import("resource://gre/modules/FileUtils.jsm");
 | 
			
		||||
 | 
			
		||||
// Create <profile>/chrome/ directory if not already present
 | 
			
		||||
var chromeDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
 | 
			
		||||
chromeDir.append("chrome");
 | 
			
		||||
if (!chromeDir.exists()) {
 | 
			
		||||
  chromeDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create nsIFile objects for userChrome.css in <profile>/chrome/ and in /etc/
 | 
			
		||||
var chromeFile = chromeDir.clone();
 | 
			
		||||
chromeFile.append("userChrome.css");
 | 
			
		||||
var defaultChrome = new FileUtils.File("/etc/mobile-config-firefox/userChrome.css");
 | 
			
		||||
 | 
			
		||||
// Remove the existing userChrome.css if older than the installed one
 | 
			
		||||
if (chromeFile.exists() && defaultChrome.exists() &&
 | 
			
		||||
    chromeFile.lastModifiedTime < defaultChrome.lastModifiedTime) {
 | 
			
		||||
  chromeFile.remove(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Copy userChrome.css to <profile>/chrome/
 | 
			
		||||
if (!chromeFile.exists()) {
 | 
			
		||||
  defaultChrome.copyTo(chromeDir, "userChrome.css");
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,39 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# Copyright 2020 Oliver Smith
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
# Create chrome/userChrome.css symlink in a firefox profile dir
 | 
			
		||||
# $1: path to profile dir, e.g. "/home/user/.mozilla/firefox/asdf.default"
 | 
			
		||||
prepare_profile() {
 | 
			
		||||
	mkdir -p "$1/chrome"
 | 
			
		||||
	if ! [ -e "$1/chrome/userChrome.css" ]; then
 | 
			
		||||
		ln -sv /etc/mobile-config-firefox/userChrome.css \
 | 
			
		||||
			"$1/chrome/userChrome.css"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ -e ~/.mozilla/firefox/profiles.ini ]; then
 | 
			
		||||
	# Firefox was started without this wrapper and created profiles.ini.
 | 
			
		||||
	# Add the userChrome.css symlink to all existing profiles, then let
 | 
			
		||||
	# firefox run with the default profile.
 | 
			
		||||
 | 
			
		||||
	for profiledir in ~/.mozilla/firefox/*/; do
 | 
			
		||||
		if ! [ -e "$profiledir/prefs.js" ]; then
 | 
			
		||||
			continue
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		prepare_profile "$profiledir"
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	exec /usr/bin/firefox "$@"
 | 
			
		||||
else
 | 
			
		||||
	# Firefox was not started without this wrapper. Create a profile dir
 | 
			
		||||
	# called "firefox.default" if it does not exist yet, and add the
 | 
			
		||||
	# userChrome.css symlink. Let firefox use this profile. It will not
 | 
			
		||||
	# create the profiles.ini file.
 | 
			
		||||
 | 
			
		||||
	profiledir=~/.mozilla/firefox/firefox.default
 | 
			
		||||
	prepare_profile "$profiledir"
 | 
			
		||||
 | 
			
		||||
	exec /usr/bin/firefox --profile "$profiledir" "$@"
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
export PATH="/usr/local/bin:/usr/mobile-config/bin:$PATH"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,10 @@
 | 
			
		|||
// Copyright 2020 Oliver Smith, Martijn Braam
 | 
			
		||||
// SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
// Set up autoconfig (we use it to copy/update userChrome.css into profile dir)
 | 
			
		||||
pref('general.config.filename', "mobile-config-autoconfig.js");
 | 
			
		||||
pref('general.config.obscure_value', 0);
 | 
			
		||||
 | 
			
		||||
// Select a mobile user agent for firefox (same as tor browser on android)
 | 
			
		||||
pref('general.useragent.override', 'Mozilla/5.0 (Android 6.0; Mobile; rv:68.0) Gecko/20100101 Firefox/68.0');
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue