diff options
author | pinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-06 19:41:37 +0000 |
---|---|---|
committer | pinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-06 19:41:37 +0000 |
commit | cd63ef62b897937521c6943b554608b3f9349d27 (patch) | |
tree | c79b4ff66eb7d1553095a6389c41f85bca9f2051 /third_party | |
parent | 8e80744e557dd436dd174b7f7203b4409b90c6e4 (diff) | |
download | chromium_src-cd63ef62b897937521c6943b554608b3f9349d27.zip chromium_src-cd63ef62b897937521c6943b554608b3f9349d27.tar.gz chromium_src-cd63ef62b897937521c6943b554608b3f9349d27.tar.bz2 |
Implement most of the "basics" pref panel on Mac, including code to set the default browser. Fix up some related comments around the code.
Review URL: http://codereview.chromium.org/113032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15445 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/mozilla/include/NSWorkspace+Utils.h | 64 | ||||
-rw-r--r-- | third_party/mozilla/include/NSWorkspace+Utils.m | 187 | ||||
-rw-r--r-- | third_party/mozilla/include/README.chromium | 32 |
3 files changed, 269 insertions, 14 deletions
diff --git a/third_party/mozilla/include/NSWorkspace+Utils.h b/third_party/mozilla/include/NSWorkspace+Utils.h new file mode 100644 index 0000000..2ef1d10 --- /dev/null +++ b/third_party/mozilla/include/NSWorkspace+Utils.h @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2002 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Simon Fraser <smfr@smfr.org> + * Josh Aas <josh@mozilla.com> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#import <AppKit/AppKit.h> + +@interface NSWorkspace(CaminoDefaultBrowserAdditions) + +- (NSArray*)installedBrowserIdentifiers; // sort order not specified +- (NSString*)defaultBrowserIdentifier; +- (NSURL*)defaultBrowserURL; + +- (NSArray*)installedFeedViewerIdentifiers; +- (NSString*)defaultFeedViewerIdentifier; +- (NSURL*)defaultFeedViewerURL; + +- (void)setDefaultBrowserWithIdentifier:(NSString*)bundleID; +- (void)setDefaultFeedViewerWithIdentifier:(NSString*)bundleID; + +- (NSURL*)urlOfApplicationWithIdentifier:(NSString*)bundleID; +- (NSString*)identifierForBundle:(NSURL*)inBundleURL; +- (NSString*)displayNameForFile:(NSURL*)inFileURL; + +// OS feature checks ++ (NSString*)osVersionString; ++ (BOOL)isLeopardOrHigher; + +@end + diff --git a/third_party/mozilla/include/NSWorkspace+Utils.m b/third_party/mozilla/include/NSWorkspace+Utils.m new file mode 100644 index 0000000..e3d052c --- /dev/null +++ b/third_party/mozilla/include/NSWorkspace+Utils.m @@ -0,0 +1,187 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2002 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Simon Fraser <smfr@smfr.org> + * Josh Aas <josh@mozilla.com> + * Nick Kreeger <nick.kreeger@park.edu> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#import "NSWorkspace+Utils.h" + +@implementation NSWorkspace(CaminoDefaultBrowserAdditions) + +- (NSArray*)installedBrowserIdentifiers +{ + NSArray* apps = [(NSArray*)LSCopyAllHandlersForURLScheme(CFSTR("https")) autorelease]; + + // add the default if it isn't there + NSString* defaultHandler = [self defaultBrowserIdentifier]; + if (defaultHandler && ([apps indexOfObject:defaultHandler] == NSNotFound)) + apps = [apps arrayByAddingObject:defaultHandler]; + + return apps; +} + +- (NSArray*)installedFeedViewerIdentifiers +{ + NSArray* apps = [(NSArray*)LSCopyAllHandlersForURLScheme(CFSTR("feed")) autorelease]; + + // add the default if it isn't there + NSString* defaultHandler = [self defaultFeedViewerIdentifier]; + if (defaultHandler && ([apps indexOfObject:defaultHandler] == NSNotFound)) + apps = [apps arrayByAddingObject:defaultHandler]; + + return apps; +} + +- (NSString*)defaultBrowserIdentifier +{ + NSString* defaultBundleId = [(NSString*)LSCopyDefaultHandlerForURLScheme(CFSTR("http")) autorelease]; + // Sometimes LaunchServices likes to pretend there's no default browser. + // If that happens, we'll assume it's probably Safari. + if (!defaultBundleId) + defaultBundleId = @"com.apple.safari"; + return defaultBundleId; +} + +- (NSString*)defaultFeedViewerIdentifier +{ + return [(NSString*)LSCopyDefaultHandlerForURLScheme(CFSTR("feed")) autorelease]; +} + +- (NSURL*)defaultBrowserURL +{ + NSString* defaultBundleId = [self defaultBrowserIdentifier]; + if (defaultBundleId) + return [self urlOfApplicationWithIdentifier:defaultBundleId]; + return nil; +} + +- (NSURL*)defaultFeedViewerURL +{ + NSString* defaultBundleId = [self defaultFeedViewerIdentifier]; + if (defaultBundleId) + return [self urlOfApplicationWithIdentifier:defaultBundleId]; + return nil; +} + +- (void)setDefaultBrowserWithIdentifier:(NSString*)bundleID +{ + LSSetDefaultHandlerForURLScheme(CFSTR("http"), (CFStringRef)bundleID); + LSSetDefaultHandlerForURLScheme(CFSTR("https"), (CFStringRef)bundleID); + LSSetDefaultRoleHandlerForContentType(kUTTypeHTML, kLSRolesViewer, (CFStringRef)bundleID); + LSSetDefaultRoleHandlerForContentType(kUTTypeURL, kLSRolesViewer, (CFStringRef)bundleID); +} + +- (void)setDefaultFeedViewerWithIdentifier:(NSString*)bundleID +{ + LSSetDefaultHandlerForURLScheme(CFSTR("feed"), (CFStringRef)bundleID); +} + +- (NSURL*)urlOfApplicationWithIdentifier:(NSString*)bundleID +{ + if (!bundleID) + return nil; + NSURL* appURL = nil; + if (LSFindApplicationForInfo(kLSUnknownCreator, (CFStringRef)bundleID, NULL, NULL, (CFURLRef*)&appURL) == noErr) + return [appURL autorelease]; + + return nil; +} + +- (NSString*)identifierForBundle:(NSURL*)inBundleURL +{ + if (!inBundleURL) return nil; + + NSBundle* tmpBundle = [NSBundle bundleWithPath:[[inBundleURL path] stringByStandardizingPath]]; + if (tmpBundle) + { + NSString* tmpBundleID = [tmpBundle bundleIdentifier]; + if (tmpBundleID && ([tmpBundleID length] > 0)) { + return tmpBundleID; + } + } + return nil; +} + +- (NSString*)displayNameForFile:(NSURL*)inFileURL +{ + NSString *name; + LSCopyDisplayNameForURL((CFURLRef)inFileURL, (CFStringRef *)&name); + return [name autorelease]; +} + +// +// +osVersionString +// +// Returns the system version string from +// /System/Library/CoreServices/SystemVersion.plist +// (as recommended by Apple). +// ++ (NSString*)osVersionString +{ + NSDictionary* versionInfo = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]; + return [versionInfo objectForKey:@"ProductVersion"]; +} + +// +// +systemVersion +// +// Returns the host's OS version as returned by the 'sysv' gestalt selector, +// 10.x.y = 0x000010xy +// ++ (long)systemVersion +{ + static long sSystemVersion = 0; + if (!sSystemVersion) + Gestalt(gestaltSystemVersion, &sSystemVersion); + return sSystemVersion; +} + +// +// +isLeopardOrHigher +// +// returns YES if we're on 10.5 or better +// ++ (BOOL)isLeopardOrHigher +{ +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 + return YES; +#else + return [self systemVersion] >= 0x1050; +#endif +} + +@end diff --git a/third_party/mozilla/include/README.chromium b/third_party/mozilla/include/README.chromium index 7e0df37..d01fa6c 100644 --- a/third_party/mozilla/include/README.chromium +++ b/third_party/mozilla/include/README.chromium @@ -4,16 +4,16 @@ for the new Java Plugin APIs. Definitions of frozen interfaces are copied from Gecko SDK http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/1.8.0.4/sdk/gecko-sdk-win32-msvc-1.8.0.4.zip -nscore.h
-nsError.h
-nsID.h
-nsISupports.h
-nsISupportsBase.h
-nsrootidl.h
-prcpucfg.h
-prlong.h
-prtime.h
-prtypes.h
+nscore.h +nsError.h +nsID.h +nsISupports.h +nsISupportsBase.h +nsrootidl.h +prcpucfg.h +prlong.h +prtime.h +prtypes.h xpcom-config.h The prtypes.h file was modified to include "base/basictypes.h" instead of @@ -26,8 +26,12 @@ Definitions of remaining interfaces are auto generated during compilation of Mozilla source code. For convenience, these are copied from: http://publicsvn.songbirdnest.com/browser/trunk/dependencies/win32/mozilla/debug/include/plugin?rev=1 -nsICookieStorage.h
-nsIPluginManager.h
-nsIPluginManager2.h
-nsplugindefs.h
+nsICookieStorage.h +nsIPluginManager.h +nsIPluginManager2.h +nsplugindefs.h nspluginroot.h + +The following files come from mozilla/camino and are not part of the Gecko SDK: + +NSWorkspace+Utils.h/m |