Efficacious !!!

on run {}
– Set these variables to suit your system.
– … ‘DownloadFolder’ is the path to your normal folder for downloads
– … ‘PrivateImage’ is the path and filename of the disk image to use for downloads when private browsing is enabled
– … ‘PrivateVolume’ is the name of your private disk image when mounted

set DownloadFolder to "/Users/myusername/Downloads/Safari"
set PrivateImage to "/Users/myusername/EncryptedDownloads.sparseimage"
set PrivateVolume to "EncryptedDownloads"


set doSetDownloadFolder to true
my check_requirements()

display dialog "Set Private Browsing Mode" & return with icon 1 buttons {"Cancel", "Enable", "Disable"}
set clickedButton to button returned of result

-- User canceled, just quit
if clickedButton is "Cancel" then error number -128

-- User wants to enable Private Browsing
if clickedButton is "Enable" then
	if is_disk_mounted(PrivateVolume) is false then
		-- private disk image hasn't already been mounted, so let's do that now
		if mount_disk(PrivateImage) is false then
			-- eek.  Mounting didn't work - let's just enable Private Browsing without changing Safari's download location
			display dialog "Could not attach private volume." & return & return & ¬
				"Private browsing will be enabled, but the download folder will not be changed." with icon 2 buttons {"Cancel", "Continue"}
			set doSetDownloadFolder to false
		else
			-- disk mounted, ready to go
			set doSetDownloadFolder to true
		end if
	else
		-- disk image has already been mounted -- we're OK to set Safari's download location
		set doSetDownloadFolder to true
	end if
	
	-- Check if Private Browsing's already enabled, and set it if we need to
	if is_pb_enabled() = false then set_pb(true)
	
	-- If the image has been mounted ok, then set Safari's download location
	if doSetDownloadFolder is true then set_download_folder("/Volumes/" & PrivateVolume)
end if


-- User wants to disable Private Browsing
if clickedButton is "Disable" then
	-- If Private Browsing's on, turn it off
	if is_pb_enabled() = true then set_pb(false)
	
	-- Set Safari's download folder to the normal location
	set_download_folder(DownloadFolder)
	
	-- If the private image is mounted, unmount it
	if is_disk_mounted(PrivateVolume) then
		unmount_disk(PrivateVolume)
	end if
end if

end run

– Some boiler-plate code to make sure GUI scripting’s available and enabled on this system.
on check_requirements()
tell application “System Events”
get system attribute “sysv”
if result is greater than or equal to 4144 then – Mac OS X 10.3.0
if UI elements enabled is false then
beep
display dialog “GUI Scripting is not enabled” & return & return & “Open System Preferences and check Enable Access for Assistive Devices in the Universal Access preference pane, then run this script again.” with icon stop
if button returned of result is “OK” then
tell application “System Preferences”
activate
set current pane to pane “com.apple.preference.universalaccess”
end tell
else
error number -128
end if
end if
else
beep
display dialog “This computer cannot run this script” & return & return & “The script uses GUI Scripting technology, which requires an upgrade to Mac OS X 10.3 Panther or newer.” with icon caution buttons {“Quit”} default button “Quit”
error number -128
end if
end tell
end check_requirements

– Returns TRUE if Private Browsing is currently enabled, otherwise returns FALSE
on is_pb_enabled()
activate application “Safari”
tell application “System Events” to tell application process “Safari”
set check_value to value of attribute “AXMenuItemMarkChar” of menu item “Private Browsing” of menu 1 of menu bar item “Safari” of menu bar 1
return ((check_value as string) = “3”) as boolean
end tell
end is_pb_enabled

– Sets Private Browsing (On if State=TRUE, Off if State=FALSE)
– Also automatically dismisses the information window Safari shows when enabling Private Browsing
on set_pb(state)
activate application “Safari”
tell application “System Events” to tell application process “Safari”
if state is true then
click menu item “Private Browsing” of menu 1 of menu bar item “Safari” of menu bar 1
click button “OK” of window 1
else
click menu item “Private Browsing” of menu 1 of menu bar item “Safari” of menu bar 1
end if
end tell
end set_pb

– Sets Safari’s download location
– See comment below if the script fails during the setting of the download folder
on set_download_folder(dlFolder)
activate application “Safari”
tell application “System Events” to tell application process “Safari”

	click menu item "Preferences?" of menu 1 of menu bar item "Safari" of menu bar 1
	click button "General" of tool bar 1 of window 1
	tell pop up button 3 of group 1 of group 1 of window "General"
		click
		click menu item "Other?" of menu 1
	end tell
	
	keystroke "g" using {shift down, command down}
	delay 2 -- NOTE:  This value should be increased if the new download location doesn't appear in the Go To Folder dialog
	
	tell window "Go To Folder"
		set value of text field 1 to dlFolder
		click button "Go"
	end tell
	click button "Select" of sheet 1 of window "General"
	click button 1 of window "General"
end tell

end set_download_folder

– Mounts a disk image
on mount_disk(imageFile)
try
do shell script "hdiutil attach " & imageFile
on error number 1
return false
end try
return true
end mount_disk

– Returns TRUE if the volume whose name matches diskName is currently mounted, FALSE otherwise.
on is_disk_mounted(diskName)
tell application “Finder”
set diskMounted to (exists disk (diskName))
end tell
return diskMounted
end is_disk_mounted

– Ejects the volume whose name matches diskName.
on unmount_disk(diskName)
tell application “Finder” to eject the disk diskName
end unmount_disk

What’s the question?

Guess, what does the script?

Just kidding, but if you have a completed solution, please post it in Code Exchange.
And please, use a more comprehensive headline :wink: