summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
authorpinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-06 19:41:37 +0000
committerpinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-06 19:41:37 +0000
commitcd63ef62b897937521c6943b554608b3f9349d27 (patch)
treec79b4ff66eb7d1553095a6389c41f85bca9f2051 /third_party
parent8e80744e557dd436dd174b7f7203b4409b90c6e4 (diff)
downloadchromium_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.h64
-rw-r--r--third_party/mozilla/include/NSWorkspace+Utils.m187
-rw-r--r--third_party/mozilla/include/README.chromium32
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