--------------------------------------------------------------------------------
--
--      
--        Licensed to the Apache Software Foundation (ASF) under one or more
--        contributor license agreements.  See the NOTICE file distributed with
--        this work for additional information regarding copyright ownership.
--        The ASF licenses this file to You under the Apache License, Version 2.0
--        (the "License"); you may not use this file except in compliance with
--        the License.  You may obtain a copy of the License at
--      
--            http://www.apache.org/licenses/LICENSE-2.0
--      
--        Unless required by applicable law or agreed to in writing, software
--        distributed under the License is distributed on an "AS IS" BASIS,
--        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--        See the License for the specific language governing permissions and
--        limitations under the License.
--
--------------------------------------------------------------------------------

-- Note, this only works on OSX 10.4 and up
-- Returns the name of the default browser, e.g. "Safari", "Firefox", "Camino"; or "" if not known
set p to POSIX path of (path to preferences) & "com.apple.LaunchServices.plist"
tell application "System Events" to tell property list item "LSHandlerRoleAll" of (property list item 1 of property list item "LSHandlers" of property list file p whose value contains "http") to if exists then
	set v to value -- now v is, for example, "com.apple.safari"
	-- "application file id v" returns a file; so we are setting, for example,
	-- "n" to "Safari.app" and "e" to "app"
	tell application "Finder" to set {name:n, name extension:e} to application file id v
	-- strip off the ".app" extension
	tell (count e) + 1 to return n's text 1 thru -(1 mod it + it)
end if

-- if we get here, we couldn't find an "http" handler, so we don't know the default browser
""
