nsElement = do_QueryInterface(docElement);
if (!nsElement)
return;
// scrollHeight always gets the wanted height but scrollWidth may not if the page contains
// non-scrollable elements (eg ), therefor we find the slientWidth and adds the max x
// offset if the window has a horizontal scroller. For more see bug 155956 and
// http://developer.mozilla.org/en/docs/DOM:element.scrollWidth
// http://developer.mozilla.org/en/docs/DOM:element.clientWidth
Index: src/application/nsStaticComponents.cpp
===================================================================
RCS file: /cvsroot/mozilla/camino/src/application/nsStaticComponents.cpp,v
retrieving revision 1.33
diff -u -8 -r1.33 nsStaticComponents.cpp
--- src/application/nsStaticComponents.cpp 2 Feb 2009 18:32:01 -0000 1.33
+++ src/application/nsStaticComponents.cpp 23 Feb 2010 03:07:23 -0000
@@ -70,32 +70,29 @@
MODULE(nsRDFModule) \
MODULE(nsParserModule) \
MODULE(nsGfxModule) \
MODULE(nsIconDecoderModule) \
MODULE(nsImageLib2Module) \
MODULE(nsPluginModule) \
MODULE(nsWidgetMacModule) \
MODULE(nsLayoutModule) \
- MODULE(nsMorkModule) \
MODULE(docshell_provider) \
MODULE(embedcomponents) \
MODULE(Browser_Embedding_Module) \
MODULE(nsTransactionManagerModule) \
MODULE(application) \
MODULE(nsCookieModule) \
- MODULE(nsXMLExtrasModule) \
MODULE(nsUniversalCharDetModule) \
- MODULE(nsTypeAheadFind) \
MODULE(nsPermissionsModule) \
MODULE(nsComposerModule) \
- MODULE(xpAutoComplete) \
MODULE(mozSpellCheckerModule) \
MODULE(mozStorageModule) \
MODULE(nsAuthModule) \
+ MODULE(nsPlacesModule) \
MODULE(BOOT) \
MODULE(NSS) \
/* end of list */
#else // _BUILD_STATIC_BIN
#define MODULES \
MODULE(CmXULAppInfoModule) \
/* end of list */
#endif // _BUILD_STATIC_BIN
Index: src/application/AppComponents.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/application/AppComponents.mm,v
retrieving revision 1.19
diff -u -8 -r1.19 AppComponents.mm
--- src/application/AppComponents.mm 29 Jan 2009 04:05:44 -0000 1.19
+++ src/application/AppComponents.mm 23 Feb 2010 03:07:23 -0000
@@ -45,22 +45,16 @@
#import "ProgressDlgController.h"
#import "nsAboutBookmarks.h"
#import "CHStringBundleOverride.h"
#import "ContentDispatchChooser.h"
#import "SafeBrowsingAboutModule.h"
#include "nsIGenericFactory.h"
-#include "nsSimpleGlobalHistory.h"
-
-// for some bizarre reason this is in nsDocShellCID.h
-#define NS_GLOBALHISTORY2_CONTRACTID \
- "@mozilla.org/browser/global-history;2"
-
// {0ffd3880-7a1a-11d6-a384-975d1d5f86fc}
#define NS_SECURITYDIALOGS_CID \
{0x0ffd3880, 0x7a1a, 0x11d6,{0xa3, 0x84, 0x97, 0x5d, 0x1d, 0x5f, 0x86, 0xfc}}
#define NS_PROMPTSERVICE_CID \
{0xa2112d6a, 0x0e28, 0x421f, {0xb4, 0x6a, 0x25, 0xc0, 0xb3, 0x8, 0xcb, 0xd0}}
// {7F47B9CB-7091-11DA-B9A4-00039386357A}
@@ -109,53 +103,16 @@
NS_ADDREF(inst);
inst->SetDisplayFactory([ProgressDlgController sharedDownloadController]);
nsresult rv = inst->QueryInterface(aIID, aResult);
NS_RELEASE(inst);
return rv;
}
-// we have to provide a custom constructor to work around a component manager
-// bug (see bug 276956) that can cause more than one instance of nsSimpleGlobalHistory
-// to be created (for each of the 2 services it implements). So we enforce its
-// singleton nature here.
-static nsresult
-nsSimpleGlobalHistoryConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult)
-{
- static nsSimpleGlobalHistory* sGlobalHistorySingleton;
-
- *aResult = NULL;
- if (aOuter)
- return NS_ERROR_NO_AGGREGATION;
-
- nsresult rv;
- if (!sGlobalHistorySingleton)
- {
- NS_NEWXPCOM(sGlobalHistorySingleton, nsSimpleGlobalHistory);
- if (!sGlobalHistorySingleton)
- return NS_ERROR_OUT_OF_MEMORY;
-
- // hold a ref to it. it will never go away
- NS_ADDREF(sGlobalHistorySingleton);
-
- // if Init fails we'll do this over and over again. Probably not an issue
- rv = sGlobalHistorySingleton->Init();
- if (NS_FAILED(rv))
- {
- NS_RELEASE(sGlobalHistorySingleton);
- sGlobalHistorySingleton = NULL;
- return rv;
- }
- }
-
- // the QI does the AddRef
- return sGlobalHistorySingleton->QueryInterface(aIID, aResult);
-}
-
// used by MainController to register the components in which we want to override
// with the Gecko embed layer.
static const nsModuleComponentInfo gAppComponents[] = {
{
"PSM Security Warnings",
NS_SECURITYDIALOGS_CID,
NS_SECURITYWARNINGDIALOGS_CONTRACTID,
@@ -229,28 +186,16 @@
},
{
"Cookie Service",
NS_COOKIEPROMPTSERVICE_CID,
NS_COOKIEPROMPTSERVICE_CONTRACTID,
CocoaPromptServiceConstructor
},
{
- "Global History",
- NS_SIMPLEGLOBALHISTORY_CID,
- NS_GLOBALHISTORY2_CONTRACTID,
- nsSimpleGlobalHistoryConstructor
- },
- {
- "Global History",
- NS_SIMPLEGLOBALHISTORY_CID,
- NS_GLOBALHISTORY_AUTOCOMPLETE_CONTRACTID,
- nsSimpleGlobalHistoryConstructor
- },
- {
"About Bookmarks Module",
NS_ABOUT_BOOKMARKS_MODULE_CID,
NS_ABOUT_MODULE_CONTRACTID_PREFIX "bookmarks",
nsAboutBookmarks::CreateBookmarks,
},
{
"About Bookmarks Module",
NS_ABOUT_BOOKMARKS_MODULE_CID,
Index: src/browser/BrowserWindowController.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/browser/BrowserWindowController.mm,v
retrieving revision 1.422
diff -u -8 -r1.422 BrowserWindowController.mm
--- src/browser/BrowserWindowController.mm 21 Feb 2010 22:56:25 -0000 1.422
+++ src/browser/BrowserWindowController.mm 23 Feb 2010 03:07:35 -0000
@@ -98,17 +98,16 @@
#include "GeckoUtils.h"
#include "nsString.h"
#include "nsServiceManagerUtils.h"
#include "nsIWebNavigation.h"
#include "nsISHistory.h"
#include "nsIHistoryEntry.h"
-#include "nsIHistoryItems.h"
#include "nsIDOMDocument.h"
#include "nsIDOMNSHTMLDocument.h"
#include "nsIDOMElement.h"
#include "nsIDOMEvent.h"
#include "nsIContextMenuListener.h"
#include "nsIDOMWindow.h"
#include "nsIDOMPopupBlockedEvent.h"
#include "nsIDOMHTMLImageElement.h"
@@ -868,23 +867,16 @@
mClosingWindow = YES;
[self autosaveWindowFrame];
// ensure that the URL auto-complete popup is closed before the mork
// database is shut down, or we crash
[mURLBar clearResults];
- if (mDataOwner)
- {
- nsCOMPtr history(do_QueryInterface(mDataOwner->mGlobalHistory));
- if (history)
- history->Flush();
- }
-
delete mDataOwner;
mDataOwner = NULL;
nsCOMPtr pref(do_GetService(NS_PREF_CONTRACTID));
if (pref)
pref->UnregisterCallback(kGeckoPrefAlwaysShowTabBar, TabBarVisiblePrefChangedCallback, self);
// Tell the BrowserTabView the window is closed
@@ -4850,26 +4842,24 @@
getter_AddRefs(computedStyle));
if (!computedStyle) {
return NO;
}
nsCOMPtr cssValue;
computedStyle->GetPropertyCSSValue(NS_LITERAL_STRING("background-image"),
getter_AddRefs(cssValue));
- nsCOMPtr primitiveValue;
- primitiveValue = do_QueryInterface(cssValue);
- if (!primitiveValue) {
+ if (!cssValue) {
return NO;
}
nsAutoString bgStringValue;
- primitiveValue->GetStringValue(bgStringValue);
+ cssValue->GetCssText(bgStringValue);
return [[NSString stringWith_nsAString:bgStringValue]
- hasPrefix:@"chrome://flashblock/content/"];
+ hasPrefix:@"url(\"chrome://flashblock/"];
}
//
// -unblockFlashFromCurrentDomain:
//
// Context menu action for adding the current domain to the Flashblock whitelist.
//
- (IBAction)unblockFlashFromCurrentDomain:(id)sender
Index: src/embedding/CHBrowserService.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/embedding/CHBrowserService.mm,v
retrieving revision 1.39
diff -u -8 -r1.39 CHBrowserService.mm
--- src/embedding/CHBrowserService.mm 2 Jun 2009 03:58:12 -0000 1.39
+++ src/embedding/CHBrowserService.mm 23 Feb 2010 03:07:35 -0000
@@ -194,19 +194,20 @@
}
/* static */
void CHBrowserService::ShutDown()
{
NS_ASSERTION(sCanTerminate, "Should be able to terminate here!");
nsCOMPtr observerService = do_GetService("@mozilla.org/observer-service;1");
- if (observerService)
+ if (observerService) {
observerService->NotifyObservers(nsnull, "profile-change-net-teardown", nsnull);
-
+ observerService->NotifyObservers(nsnull, "quit-application", nsnull);
+ }
// phase 2 notifcation (we really are about to terminate)
[[NSNotificationCenter defaultCenter] postNotificationName:XPCOMShutDownNotificationName object:nil];
NS_IF_RELEASE(sSingleton);
NS_TermEmbedding();
#if DEBUG
NSLog(@"Shutting down embedding.");
#endif
@@ -268,60 +269,64 @@
StNullJSContextScope hack(&rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr browserChrome(do_QueryInterface(parent));
return browserChrome->CreateChromeWindow(parent, chromeFlags, _retval);
}
-// void show( in nsIHelperAppLauncher aLauncher, in nsISupports aContext, in unsigned long aReason );
+// void show(in nsIHelperAppLauncher aLauncher, in nsISupports aContext, in unsigned long aReason);
NS_IMETHODIMP
CHBrowserService::Show(nsIHelperAppLauncher* inLauncher, nsISupports* inContext, PRUint32 aReason)
{
PRBool downloadWithoutDialog = PR_FALSE;
- // Check for pref to download to defined downloads directory
+ // Check for pref to download to defined downloads directory.
nsCOMPtr prefService (do_GetService(NS_PREF_CONTRACTID));
if (prefService)
prefService->GetBoolPref(kGeckoPrefDownloadToDefaultLocation, &downloadWithoutDialog);
nsCOMPtr downloadFile;
if (downloadWithoutDialog)
{
- NS_GetSpecialDirectory(NS_MAC_DEFAULT_DOWNLOAD_DIR, getter_AddRefs(downloadFile));
-
+ // This respects the gecko pref we set in the Download prefpane, so there's
+ // no need to change it.
+ nsCOMPtr targetFile;
+ inLauncher->GetTargetFile(getter_AddRefs(targetFile));
+ targetFile->GetParent(getter_AddRefs(downloadFile));
nsAutoString leafName;
inLauncher->GetSuggestedFileName(leafName);
if (leafName.IsEmpty())
{
nsCOMPtr sourceURI;
inLauncher->GetSource(getter_AddRefs(sourceURI));
if (sourceURI)
{
- // we know this doesn't have a leaf name, because nsExternalAppHandler::SetUpTempFile would have
- // got it already.
+ // We know this doesn't have a leaf name, because
+ // nsExternalAppHandler::SetUpTempFile would have got it already.
nsCAutoString hostName;
sourceURI->GetHost(hostName);
leafName = NS_ConvertUTF8toUTF16(hostName);
leafName.Append(NS_LITERAL_STRING(" download"));
}
else
{
leafName.Assign(NS_LITERAL_STRING("Camino download"));
}
}
downloadFile->Append(leafName);
- // this will make an empty file, that persists until the download is done, "holding"
- // a file system location for the final file. Note that if you change this, be
- // sure to fix nsDownloadListener::DownloadDone not to delete some random file.
+ // This will make an empty file that persists until the download is done,
+ // "holding" a file system location for the final file. Note that if you
+ // change this, be sure to fix nsDownloadListener::DownloadDone not to
+ // delete some random file.
downloadFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0600);
- }
-
+ }
+
return inLauncher->SaveToDisk(downloadFile, PR_FALSE);
}
NS_IMETHODIMP
CHBrowserService::PromptForSaveToFile(nsIHelperAppLauncher* aLauncher,
nsISupports *aWindowContext, const PRUnichar *aDefaultFile, const PRUnichar *aSuggestedFileExtension, PRBool aForcePrompt, nsILocalFile **_retval)
{
NSString* filename = [NSString stringWithPRUnichars:aDefaultFile];
Index: src/embedding/CHBrowserView.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/embedding/CHBrowserView.mm,v
retrieving revision 1.124
diff -u -8 -r1.124 CHBrowserView.mm
--- src/embedding/CHBrowserView.mm 21 Feb 2010 22:56:29 -0000 1.124
+++ src/embedding/CHBrowserView.mm 23 Feb 2010 03:07:40 -0000
@@ -92,17 +92,17 @@
#include "SaveHeaderSniffer.h"
#include "nsIWebPageDescriptor.h"
// Find in page
#include "nsIWebBrowserFind.h"
#include "nsISelection.h"
// Focus accessors
-#include "nsIFocusController.h"
+#include "nsFocusManager.h"
#include "nsIDOMElement.h"
// Focus tests
#include "nsIDOMHTMLInputElement.h"
#include "nsIDOMHTMLTextAreaElement.h"
#include "nsIDOMHTMLEmbedElement.h"
#include "nsIDOMHTMLObjectElement.h"
#include "nsIDOMHTMLAppletElement.h"
@@ -161,17 +161,16 @@
- (float)textZoom;
- (float)pageZoom;
- (void)incrementTextZoom:(float)increment min:(float)min max:(float)max;
- (void)incrementPageZoom:(float)increment min:(float)min max:(float)max;
- (nsIDocShell*)docShell; // does NOT addref
- (NSString*)selectedText;
- (already_AddRefed)focussedDOMWindow;
- (already_AddRefed)focusedDOMElement;
-- (already_AddRefed)focusController;
- (already_AddRefed)secureBrowserUI;
- (NSString*)locationFromDOMWindow:(nsIDOMWindow*)inDOMWindow;
- (void)ensurePrintSettings;
- (void)savePrintSettings;
- (BOOL)isPasswordFieldFocused;
- (void)collapseSelection;
@end
@@ -689,40 +688,26 @@
// Hook up the widget hierarchy with us as the parent
nsCOMPtr baseWin = do_QueryInterface(_webBrowser);
baseWin->InitWindow((NSView*)self, nsnull, 0, 0, (int)frame.size.width, (int)frame.size.height);
baseWin->Create();
}
}
-// Returns the focus controller, AddRef'd.
-- (already_AddRefed)focusController
-{
- if (!_webBrowser)
- return nsnull;
- nsCOMPtr domWindow;
- _webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
- nsCOMPtr privateWindow = do_QueryInterface(domWindow);
- if (!privateWindow)
- return nsnull;
- nsIFocusController* focusController = privateWindow->GetRootFocusController();
- NS_IF_ADDREF(focusController);
- return focusController;
-}
-
// Returns the currently focused DOM element, AddRef'd.
- (already_AddRefed)focusedDOMElement
{
- nsCOMPtr controller = [self focusController];
- if (!controller)
+ nsresult rv;
+ nsCOMPtr fm(do_GetService("@mozilla.org/focus-manager;1", &rv));
+ if (!fm)
return nsnull;
- nsCOMPtr focusedItem;
- controller->GetFocusedElement(getter_AddRefs(focusedItem));
- nsIDOMElement* domElement = focusedItem.get();
+ nsCOMPtr focusedElement;
+ fm->GetFocusedElement(getter_AddRefs(focusedElement));
+ nsIDOMElement* domElement = focusedElement.get();
NS_IF_ADDREF(domElement);
return domElement;
}
- (NSImage*)snapshot
{
NSSize viewportSize = [self bounds].size;
// We don't draw scrollbars, so set the snapshot width to be the smaller of
@@ -771,17 +756,20 @@
PRInt32 scrollX, scrollY;
domWindow->GetScrollX(&scrollX);
domWindow->GetScrollY(&scrollY);
PRInt32 appUnitsPerPixel = presContext->AppUnitsPerDevPixel();
nsRect viewRect(NSIntPixelsToAppUnits(scrollX, appUnitsPerPixel),
NSIntPixelsToAppUnits(scrollY, appUnitsPerPixel),
NSIntPixelsToAppUnits(viewportSize.width, appUnitsPerPixel),
NSIntPixelsToAppUnits(viewportSize.height, appUnitsPerPixel));
- presShell->RenderDocument(viewRect, PR_FALSE, PR_TRUE, NS_RGB(255, 255, 255), context);
+ presShell->RenderDocument(viewRect,
+ nsIPresShell::RENDER_IGNORE_VIEWPORT_SCROLLING,
+ NS_RGB(255, 255, 255),
+ context);
// Now transfer the context contents into an NSImage.
CGContextRef surfaceContext = surface->GetCGContext();
if (!surfaceContext)
return nil;
CGImageRef cgImage = CGBitmapContextCreateImage(surfaceContext);
NSImage* snapshot = [[[NSImage alloc] initWithSize:snapshotSize] autorelease];
NSRect imageRect = NSMakeRect(0, 0, snapshotSize.width, snapshotSize.height);
@@ -1388,17 +1376,17 @@
- (BOOL)shouldUnload
{
nsCOMPtr contentViewer = dont_AddRef([self contentViewer]);
if (!contentViewer)
return YES;
PRBool canUnload;
- contentViewer->PermitUnload(&canUnload);
+ contentViewer->PermitUnload(PR_FALSE, &canUnload);
return canUnload ? YES : NO;
}
// -isPasswordFieldFocused
//
// Returs YES if a password field in the content area has focus.
// We need this only because core believes that password fields are
// valid cut/copy targets (see bug 217729).
@@ -1441,21 +1429,21 @@
isFocused = YES;
if (type == NS_LITERAL_STRING("password"))
isFocused = YES;
}
else if (textArea) {
isFocused = YES;
}
else { // check for Midas
- nsCOMPtr controller = [self focusController];
- if (controller) {
- nsCOMPtr winInternal;
- controller->GetFocusedWindow(getter_AddRefs(winInternal));
- nsCOMPtr focusedWindow(do_QueryInterface(winInternal));
+ nsresult rv;
+ nsCOMPtr fm(do_GetService("@mozilla.org/focus-manager;1", &rv));
+ if (fm) {
+ nsCOMPtr focusedWindow;
+ fm->GetFocusedWindow(getter_AddRefs(focusedWindow));
if (focusedWindow) {
nsCOMPtr domDoc;
focusedWindow->GetDocument(getter_AddRefs(domDoc));
nsCOMPtr htmlDoc(do_QueryInterface(domDoc));
if (htmlDoc) {
nsAutoString designMode;
htmlDoc->GetDesignMode(designMode);
if (designMode.EqualsLiteral("on"))
Index: src/embedding/CHBrowserView+Spelling.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/embedding/CHBrowserView+Spelling.mm,v
retrieving revision 1.1
diff -u -8 -r1.1 CHBrowserView+Spelling.mm
--- src/embedding/CHBrowserView+Spelling.mm 31 Mar 2008 16:18:15 -0000 1.1
+++ src/embedding/CHBrowserView+Spelling.mm 23 Feb 2010 03:07:42 -0000
@@ -37,27 +37,28 @@
*
* ***** END LICENSE BLOCK ***** */
#import "CHBrowserView+Spelling.h"
#import "NSString+Gecko.h"
#include "nsCOMPtr.h"
+#include "nsServiceManagerUtils.h"
#include "nsCRT.h"
+#include "nsFocusManager.h"
#include "nsIDocShell.h"
#include "nsIDOMElement.h"
#include "nsIDOMNSEditableElement.h"
#include "nsIDOMNSHTMLDocument.h"
#include "nsIDOMRange.h"
#include "nsIDOMWindow.h"
#include "nsIEditingSession.h"
#include "nsIEditor.h"
#include "nsIEditorSpellCheck.h"
-#include "nsIFocusController.h"
#include "nsIInlineSpellChecker.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsISelection.h"
#include "nsPIDOMWindow.h"
#include "nsString.h"
#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
// Declare private NSSpellChecker method (public as of 10.5).
@@ -72,17 +73,16 @@
- (void)getMisspelledWordRange:(nsIDOMRange**)outRange
inlineSpellChecker:(nsIInlineSpellChecker**)outInlineChecker;
@end
@interface CHBrowserView (PrivateCHBrowserViewMethodsUsedForSpelling)
- (already_AddRefed)focusedDOMElement;
-- (already_AddRefed)focusController;
@end
@implementation CHBrowserView (SpellingMethods)
- (void)ignoreCurrentWord
{
nsCOMPtr misspelledRange;
@@ -225,23 +225,23 @@
nsCOMPtr focusedElement = [self focusedDOMElement];
nsCOMPtr editElement = do_QueryInterface(focusedElement);
if (editElement) {
editElement->GetEditor(&editor); // addrefs
}
else {
// if there's no element focused, we're probably in a Midas editor
- nsCOMPtr controller = [self focusController];
- if (!controller)
+ nsresult rv;
+ nsCOMPtr fm(do_GetService("@mozilla.org/focus-manager;1", &rv));
+ if (!fm)
return NULL;
- nsCOMPtr winInternal;
- controller->GetFocusedWindow(getter_AddRefs(winInternal));
- nsCOMPtr focusedWindow(do_QueryInterface(winInternal));
+ nsCOMPtr focusedWindow;
+ fm->GetFocusedWindow(getter_AddRefs(focusedWindow));
if (!focusedWindow)
return NULL;
nsCOMPtr domDoc;
focusedWindow->GetDocument(getter_AddRefs(domDoc));
nsCOMPtr htmlDoc(do_QueryInterface(domDoc));
if (!htmlDoc)
return NULL;
@@ -294,15 +294,14 @@
if (!selection)
return;
nsCOMPtr selectionEndNode;
PRInt32 selectionEndOffset = 0;
selection->GetFocusNode(getter_AddRefs(selectionEndNode));
selection->GetFocusOffset(&selectionEndOffset);
- // The misspelling "mispelled" is (sadly) deliberate; see bug 357465.
- (*outInlineChecker)->GetMispelledWord(selectionEndNode,
+ (*outInlineChecker)->GetMisspelledWord(selectionEndNode,
(long)selectionEndOffset,
outRange); // addrefs
}
@end
Index: src/preferences/GeckoPrefConstants.h
===================================================================
RCS file: /cvsroot/mozilla/camino/src/preferences/GeckoPrefConstants.h,v
retrieving revision 1.18
diff -u -8 -r1.18 GeckoPrefConstants.h
--- src/preferences/GeckoPrefConstants.h 16 Feb 2010 22:42:59 -0000 1.18
+++ src/preferences/GeckoPrefConstants.h 23 Feb 2010 03:07:42 -0000
@@ -265,16 +265,26 @@
// The url of a PAC file to use for proxy settings
extern const char* const kGeckoPrefProxyAutoconfigURL; // string
// A list of sites for which the proxy should not be applied
extern const char* const kGeckoPrefProxyBypassList; // string
#pragma mark Downloads
+// A list of possible download directories
+extern const char* const kGeckoPrefDownloadsFolderList; // int
+// Possible values:
+extern const int kDownloadsFolderDesktop;
+extern const int kDownloadsFolderDownloads;
+extern const int kDownloadsFolderCustom;
+
+// If kGeckoPrefsDownloadsFolderList is kDownloadsFolderCustom
+extern const char* const kGeckoPrefDownloadsDir; // nsILocalFile
+
// Controls whether downloads should be auto-launched
extern const char* const kGeckoPrefAutoOpenDownloads; // bool
// Controls when downloads are removed from the manager
extern const char* const kGeckoPrefDownloadCleanupPolicy; // int
// Possible values:
extern const int kRemoveDownloadsOnSuccess;
extern const int kRemoveDownloadsOnQuit;
Index: src/preferences/GeckoPrefConstants.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/preferences/GeckoPrefConstants.mm,v
retrieving revision 1.18
diff -u -8 -r1.18 GeckoPrefConstants.mm
--- src/preferences/GeckoPrefConstants.mm 16 Feb 2010 22:42:59 -0000 1.18
+++ src/preferences/GeckoPrefConstants.mm 23 Feb 2010 03:07:43 -0000
@@ -44,16 +44,18 @@
asm(".no_dead_strip _kGeckoPrefLinkColor");
asm(".no_dead_strip _kGeckoPrefPageBackgroundColor");
asm(".no_dead_strip _kGeckoPrefPageForegroundColor");
asm(".no_dead_strip _kGeckoPrefUnderlineLinks");
asm(".no_dead_strip _kGeckoPrefUsePageColors");
asm(".no_dead_strip _kGeckoPrefUsePageFonts");
asm(".no_dead_strip _kGeckoPrefVisitedLinkColor");
asm(".no_dead_strip _kGeckoPrefCookieLifetimePolicy");
+asm(".no_dead_strip _kGeckoPrefDownloadsFolderList");
+asm(".no_dead_strip _kGeckoPrefDownloadsDir");
asm(".no_dead_strip _kGeckoPrefDefaultCertificateBehavior");
asm(".no_dead_strip _kGeckoPrefBlockPopups");
asm(".no_dead_strip _kGeckoPrefEnableJava");
asm(".no_dead_strip _kGeckoPrefImageAnimationBehavior");
asm(".no_dead_strip _kGeckoPrefPreventDOMStatusChange");
asm(".no_dead_strip _kGeckoPrefPreventDOMWindowFocus");
asm(".no_dead_strip _kGeckoPrefPreventDOMWindowResize");
asm(".no_dead_strip _kGeckoPrefTabFocusBehavior");
@@ -80,16 +82,19 @@
asm(".no_dead_strip _kBackspaceActionBack");
asm(".no_dead_strip _kBackspaceActionNone");
asm(".no_dead_strip _kCookieAcceptAll");
asm(".no_dead_strip _kCookieAcceptFromOriginatingServer");
asm(".no_dead_strip _kCookieAcceptNone");
asm(".no_dead_strip _kCookieLifetimeAsk");
asm(".no_dead_strip _kCookieLifetimeNormal");
asm(".no_dead_strip _kCookieLifetimeSession");
+asm(".no_dead_strip _kDownloadsFolderDesktop");
+asm(".no_dead_strip _kDownloadsFolderDownloads");
+asm(".no_dead_strip _kDownloadsFolderCustom");
#pragma mark Tab Behavior
const char* const kGeckoPrefAlwaysShowTabBar = "camino.tab_bar_always_visible";
const char* const kGeckoPrefExternalLoadBehavior = "browser.reuse_window";
const char* const kGeckoPrefOpenTabsForMiddleClick = "browser.tabs.opentabfor.middleclick";
const char* const kGeckoPrefOpenTabsInBackground = "browser.tabs.loadInBackground";
@@ -176,16 +181,18 @@
#pragma mark Proxies
const char* const kGeckoPrefProxyUsesSystemSettings = "camino.use_system_proxy_settings";
const char* const kGeckoPrefProxyAutoconfigURL = "network.proxy.autoconfig_url";
const char* const kGeckoPrefProxyBypassList = "network.proxy.no_proxies_on";
#pragma mark Downloads
+const char* const kGeckoPrefDownloadsFolderList = "browser.download.folderList";
+const char* const kGeckoPrefDownloadsDir = "browser.download.dir";
const char* const kGeckoPrefAutoOpenDownloads = "browser.download.manager.openDownloadedFiles";
const char* const kGeckoPrefDownloadCleanupPolicy = "browser.download.manager.retention";
const char* const kGeckoPrefFocusDownloadManagerOnDownload = "browser.download.manager.focusWhenStarting";
const char* const kGeckoPrefOpenDownloadManagerOnDownload = "browser.download.manager.showWhenStarting";
const char* const kGeckoPrefCloseDownloadManagerWhenDone = "browser.download.manager.closeWhenDone";
const char* const kGeckoPrefDownloadToDefaultLocation = "browser.download.useDownloadDir";
#pragma mark Page Appearance
@@ -283,16 +290,21 @@
const int kCookieAcceptFromOriginatingServer = 1;
const int kCookieAcceptNone = 2;
// kGeckoPrefCookieLifetimePolicy values
const int kCookieLifetimeNormal = 0;
const int kCookieLifetimeAsk = 1;
const int kCookieLifetimeSession = 2;
+// kGeckoPrefDownloadsFolderList values
+const int kDownloadsFolderDesktop = 0;
+const int kDownloadsFolderDownloads = 1;
+const int kDownloadsFolderCustom = 2;
+
// kGeckoPrefDownloadCleanupPolicy values
// NB: these are the opposite of what they used to be!
const int kRemoveDownloadsOnSuccess = 0;
const int kRemoveDownloadsOnQuit = 1;
const int kRemoveDownloadsManually = 2;
// kOldGeckoPrefDownloadCleanupPolicy values
// NB: these are the opposite of the new ones!
Index: src/preferences/PreferenceManager.h
===================================================================
RCS file: /cvsroot/mozilla/camino/src/preferences/PreferenceManager.h,v
retrieving revision 1.26
diff -u -8 -r1.26 PreferenceManager.h
--- src/preferences/PreferenceManager.h 24 Jul 2009 21:32:32 -0000 1.26
+++ src/preferences/PreferenceManager.h 23 Feb 2010 03:07:43 -0000
@@ -68,33 +68,41 @@
+ (PreferenceManager*)sharedInstanceDontCreate;
- (BOOL)initMozillaPrefs;
- (void)syncMozillaPrefs;
- (void)savePrefsFile;
- (NSString*)homePageUsingStartPage:(BOOL)checkStartupPagePref;
+- (NSURL*)getFilePref: (const char*)prefName withSuccess:(BOOL*)outSuccess;
- (NSString*)getStringPref: (const char*)prefName withSuccess:(BOOL*)outSuccess;
- (NSColor*)getColorPref: (const char*)prefName withSuccess:(BOOL*)outSuccess;
- (BOOL)getBooleanPref: (const char*)prefName withSuccess:(BOOL*)outSuccess;
- (int)getIntPref: (const char*)prefName withSuccess:(BOOL*)outSuccess;
+- (void)setPref:(const char*)prefName toFile:(NSURL*)value;
- (void)setPref:(const char*)prefName toString:(NSString*)value;
- (void)setPref:(const char*)prefName toInt:(int)value;
- (void)setPref:(const char*)prefName toBoolean:(BOOL)value;
+// Set/Get the directory to download files to.
+- (void)setDownloadDirectoryPrefToPath:(NSString*)aPath;
+- (NSString*)downloadDirectoryPref;
+
- (void)clearPref:(const char*)prefName;
// the path to the user profile's root folder
- (NSString*)profilePath;
// the path to Camino's cache root folder
- (NSString*)cacheParentDirPath;
-// the path to the user's download folder
+// the path to the default system download folder
- (NSString*)downloadDirectoryPath;
+// the path to the users's desktop folder
+- (NSString*)desktopDirectoryPath;
// turn notifications on and off when the given pref changes.
// if not nil, inObject is used at the 'object' of the resulting notification.
- (void)addObserver:(id)inObject forPref:(const char*)inPrefName;
- (void)removeObserver:(id)inObject; // remove from all prefs that it observes
- (void)removeObserver:(id)inObject forPref:(const char*)inPrefName;
// Returns a Cocoa font name translated from a Gecko font family name (used in
Index: src/preferences/PreferenceManager.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/preferences/PreferenceManager.mm,v
retrieving revision 1.104
diff -u -8 -r1.104 PreferenceManager.mm
--- src/preferences/PreferenceManager.mm 21 Sep 2009 22:16:21 -0000 1.104
+++ src/preferences/PreferenceManager.mm 23 Feb 2010 03:07:48 -0000
@@ -81,17 +81,17 @@
static NSString* const AdBlockingChangedNotificationName = @"AdBlockingChanged";
static NSString* const kFlashblockChangedNotificationName = @"FlashblockChanged";
// This is an arbitrary version stamp that gets written to the prefs file.
// It can be used to detect when a new version of Camino is run that needs
// some prefs to be upgraded.
-static const PRInt32 kCurrentPrefsVersion = 2;
+static const PRInt32 kCurrentPrefsVersion = 3;
// CheckCompatibility and WriteVersion are based on the versions in
// toolkit/xre/nsAppRunner.cpp. This is done to provide forward
// compatibility in anticipation of Camino-on-XULRunner.
#define FILE_COMPATIBILITY_INFO NS_LITERAL_CSTRING("compatibility.ini")
static PRBool
@@ -192,16 +192,18 @@
}
@interface PreferenceManager(PreferenceManagerPrivate)
- (void)registerNotificationListener;
- (void)initUpdatePrefs;
- (void)cleanUpObsoletePrefs;
- (void)migrateOldDownloadPrefs;
+// Returns the path of the download directory set in Internet Config.
+- (NSString*)internetConfigDownloadDirectoryPref;
- (void)termEmbedding:(NSNotification*)aNotification;
- (void)xpcomTerminate:(NSNotification*)aNotification;
- (void)showLaunchFailureAndQuitWithErrorTitle:(NSString*)inTitleFormat errorMessage:(NSString*)inMessageFormat;
- (void)setAcceptLanguagesPref;
- (void)setLocalePref;
@@ -797,16 +799,25 @@
if (mLastRunPrefsVersion < 1)
mPrefs->SetCharPref("intl.charset.detector", "");
// Starting with pref version 2, we migrated to the toolkit versions of
// all our download manager preferences.
if (mLastRunPrefsVersion < 2)
[self migrateOldDownloadPrefs];
+ // Starting with Gecko 1.9.1, the download directory is set in Gecko prefs,
+ // rather than Internet Config. We need to move the setting over for users
+ // when they upgrade.
+ if (mLastRunPrefsVersion && mLastRunPrefsVersion < 3)
+ [self setDownloadDirectoryPrefToPath:[self internetConfigDownloadDirectoryPref]];
+
+ if (mLastRunPrefsVersion == 0) // New profile, so default to Downloads
+ [self setDownloadDirectoryPrefToPath:[self downloadDirectoryPref]];
+
mPrefs->SetIntPref("camino.prefs_version", kCurrentPrefsVersion);
// Fix up the cookie prefs. If 'p3p' or 'accept foreign cookies' are on,
// remap them to something that Camino can deal with.
PRInt32 acceptCookies = 0;
static const char* kCookieBehaviorPref = kGeckoPrefCookieDefaultAcceptPolicy;
mPrefs->GetIntPref(kCookieBehaviorPref, &acceptCookies);
if (acceptCookies == 3) { // p3p, assume all cookies on
@@ -956,16 +967,30 @@
else {
NSLog(@"Unable to determine user interface locale\n");
// Fall back to the "en-US" default from all.js. Clear any existing
// user pref.
[self clearPref:kGeckoPrefUserAgentLocale];
}
}
+- (void)setDownloadDirectoryPrefToPath:(NSString*)aPath
+{
+ if (!aPath || [aPath isEqualToString:[self downloadDirectoryPath]]) {
+ [self setPref:kGeckoPrefDownloadsFolderList toInt:kDownloadsFolderDownloads];
+ }
+ else if ([aPath isEqualToString:[self desktopDirectoryPath]]) {
+ [self setPref:kGeckoPrefDownloadsFolderList toInt:kDownloadsFolderDesktop];
+ }
+ else {
+ [self setPref:kGeckoPrefDownloadsFolderList toInt:kDownloadsFolderCustom];
+ [self setPref:kGeckoPrefDownloadsDir toFile:[NSURL fileURLWithPath:aPath]];
+ }
+}
+
#pragma mark -
- (void)configureProxies
{
[self readSystemProxySettings];
[self registerForProxyChanges];
}
@@ -1218,16 +1243,31 @@
ssService->UnregisterSheet(cssFileURI, nsIStyleSheetService::USER_SHEET);
if (inLoad)
ssService->LoadAndRegisterSheet(cssFileURI, nsIStyleSheetService::USER_SHEET);
}
#pragma mark -
+- (NSURL*)getFilePref:(const char*)prefName withSuccess:(BOOL*)outSuccess
+{
+ NSURL* prefValue = [NSURL URLWithString:@""];
+ if (mPrefs) {
+ nsCOMPtr filePref;
+ mPrefs->GetComplexValue(prefName, NS_GET_IID(nsILocalFile), getter_AddRefs(filePref));
+ if (filePref) {
+ nsAutoString path;
+ filePref->GetPath(path);
+ prefValue = [NSURL fileURLWithPath:[NSString stringWith_nsAString:path]];
+ }
+ }
+ return prefValue;
+}
+
- (NSString*)getStringPref:(const char*)prefName withSuccess:(BOOL*)outSuccess
{
NSString* prefValue = @"";
char* buf = nsnull;
nsresult rv = NS_ERROR_FAILURE;
if (mPrefs)
rv = mPrefs->GetCharPref(prefName, &buf);
@@ -1289,16 +1329,25 @@
rv = mPrefs->GetIntPref(prefName, &intPref);
if (outSuccess)
*outSuccess = NS_SUCCEEDED(rv);
return intPref;
}
+- (void)setPref:(const char*)prefName toFile:(NSURL*)value
+{
+ nsCOMPtr filePref(do_CreateInstance("@mozilla.org/file/local;1"));
+ if (mPrefs && filePref) {
+ filePref->InitWithPath(NS_ConvertUTF8toUTF16([[value path] UTF8String]));
+ (void)mPrefs->SetComplexValue(prefName, NS_GET_IID(nsILocalFile), filePref);
+ }
+}
+
- (void)setPref:(const char*)prefName toString:(NSString*)value
{
if (mPrefs)
(void)mPrefs->SetCharPref(prefName, [value UTF8String]);
}
- (void)setPref:(const char*)prefName toInt:(int)value
{
@@ -1358,21 +1407,42 @@
return mProfilePath;
}
- (NSString*)cacheParentDirPath
{
return [self pathForSpecialDirectory:NS_APP_CACHE_PARENT_DIR];
}
+- (NSString*)downloadDirectoryPref
+{
+ NSString* prefValue = nil;
+ BOOL gotPref;
+ int downloadFolder = [self getIntPref:kGeckoPrefDownloadsFolderList withSuccess:&gotPref];
+
+ if (gotPref && (downloadFolder == kDownloadsFolderDesktop))
+ prefValue = [[PreferenceManager sharedInstance] desktopDirectoryPath];
+ else if (downloadFolder == kDownloadsFolderDownloads)
+ prefValue = [[PreferenceManager sharedInstance] downloadDirectoryPath];
+ else if (downloadFolder == kDownloadsFolderCustom)
+ prefValue = [[self getFilePref:kGeckoPrefDownloadsDir withSuccess:NULL] path];
+
+ return prefValue;
+}
+
- (NSString*)downloadDirectoryPath
{
return [self pathForSpecialDirectory:NS_MAC_DEFAULT_DOWNLOAD_DIR];
}
+- (NSString*)desktopDirectoryPath
+{
+ return [self pathForSpecialDirectory:NS_MAC_DESKTOP_DIR];
+}
+
- (NSString*)pathForSpecialDirectory:(const char*)specialDirectory
{
nsCOMPtr directoryFile;
nsresult rv = NS_GetSpecialDirectory(specialDirectory,
getter_AddRefs(directoryFile));
if (NS_FAILED(rv))
return nil;
nsCAutoString nativePath;
@@ -1508,16 +1578,57 @@
// Now remove all the old prefs so we don't leave cruft in the profile.
[self clearPref:kOldGeckoPrefDownloadCleanupPolicy];
[self clearPref:kOldGeckoPrefFocusDownloadManagerOnDownload];
[self clearPref:kOldGeckoPrefLeaveDownloadManagerOpen];
[self clearPref:kOldGeckoPrefDownloadToDefaultLocation];
[self clearPref:kOldGeckoPrefAutoOpenDownloads];
}
+-(NSString*)internetConfigDownloadDirectoryPref
+{
+ NSURL* oldDownloadDir = nil;
+ OSErr err;
+ ICInstance icInstance;
+
+ err = ::ICStart(&icInstance, 'XPCM');
+ if (err == noErr) {
+ // ICGetPref() crashes when getting the download directory if the download
+ // directory has never been specified (e.g. a new user account), bug 265903.
+ // To work around this we enumerate through the IC prefs to see if the
+ // download directory has been specified before trying to obtain it.
+ long numPrefs = 0;
+ err = ::ICCountPref(icInstance, &numPrefs);
+ if (err == noErr) {
+ NSString* ICDownloadFolderKey = [NSString stringWithString:@"DownloadFolder"];
+ for ( long i = 0; i < numPrefs; ++i ) {
+ Str255 key;
+ err = ::ICGetIndPref(icInstance, i, key);
+ NSString* keyString = [(NSString*)CFStringCreateWithPascalString(NULL, key, kCFStringEncodingMacRoman) autorelease];
+ if (err == noErr && [keyString isEqualToString:ICDownloadFolderKey]) {
+ ICAttr attrs;
+ ICFileSpec icFileSpec;
+ long size = kICFileSpecHeaderSize;
+ err = ::ICGetPref(icInstance, kICDownloadFolder, &attrs, &icFileSpec, &size);
+ if (err == noErr || (err == icTruncatedErr && size >= kICFileSpecHeaderSize)) {
+ FSRef fsRef;
+ err = ::FSpMakeFSRef(&icFileSpec.fss, &fsRef);
+ if (err == noErr)
+ oldDownloadDir = (NSURL*)CFURLCreateFromFSRef(NULL, &fsRef);
+ }
+ break;
+ }
+ }
+ }
+ ::ICStop(icInstance);
+ }
+
+ return [oldDownloadDir path];
+}
+
- (NSString*)fontNameForGeckoFontName:(NSString*)geckoFontName
{
nsresult rv;
nsCOMPtr fontEnum = do_GetService("@mozilla.org/gfx/fontenumerator;1", &rv);
if (NS_FAILED(rv))
return nil;
PRUnichar* geckoName = [geckoFontName createNewUnicodeBuffer];
Index: PreferencePanes/Downloads/Downloads.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/PreferencePanes/Downloads/Downloads.mm,v
retrieving revision 1.21
diff -u -8 -r1.21 Downloads.mm
--- PreferencePanes/Downloads/Downloads.mm 2 Jun 2009 03:58:10 -0000 1.21
+++ PreferencePanes/Downloads/Downloads.mm 23 Feb 2010 03:07:48 -0000
@@ -38,45 +38,16 @@
*
* ***** END LICENSE BLOCK ***** */
#import "Downloads.h"
#import "GeckoPrefConstants.h"
#import "PreferenceManager.h"
-// handy stack-based class to start and stop an Internet Config session
-class StInternetConfigSession
-{
-public:
-
- StInternetConfigSession(OSType inSignature)
- : mICInstance(NULL)
- , mStartedOK(false)
- {
- mStartedOK = (::ICStart(&mICInstance, inSignature) == noErr);
- }
-
- ~StInternetConfigSession()
- {
- if (mStartedOK)
- ::ICStop(mICInstance);
- }
-
- bool Available() const { return mStartedOK; }
- ICInstance Instance() const { return mICInstance; }
-
-private:
-
- ICInstance mICInstance;
- bool mStartedOK;
-};
-
-
-
@interface OrgMozillaCaminoPreferenceDownloads(Private)
- (void)setupDownloadMenuWithPath:(NSString*)inDLPath;
- (void)setDownloadFolder:(NSString*)inNewFolder;
@end
@implementation OrgMozillaCaminoPreferenceDownloads
@@ -95,72 +66,36 @@
- (void)willSelect
{
// Our behaviour here should match what the browser does when the prefs don't exist.
[mAutoCloseDLManager setState:([self getBooleanPref:kGeckoPrefCloseDownloadManagerWhenDone withSuccess:NULL]) ? NSOnState : NSOffState];
[mEnableHelperApps setState:([self getBooleanPref:kGeckoPrefAutoOpenDownloads withSuccess:NULL]) ? NSOnState : NSOffState];
[mDownloadRemovalPolicy selectItem:[[mDownloadRemovalPolicy menu] itemWithTag:[self getIntPref:kGeckoPrefDownloadCleanupPolicy
withSuccess:NULL]]];
- NSString* downloadFolderDesc = [[PreferenceManager sharedInstance] downloadDirectoryPath];
+ NSString* downloadFolderDesc = [[PreferenceManager sharedInstance] downloadDirectoryPref];
+
if ([downloadFolderDesc length] == 0)
downloadFolderDesc = [self localizedStringForKey:@"MissingDlFolder"];
[self setupDownloadMenuWithPath:downloadFolderDesc];
}
- (IBAction)checkboxClicked:(id)sender
{
if (sender == mAutoCloseDLManager)
[self setPref:kGeckoPrefCloseDownloadManagerWhenDone toBoolean:[sender state]];
if (sender == mEnableHelperApps)
[self setPref:kGeckoPrefAutoOpenDownloads toBoolean:[sender state]];
}
-// Sets the IC download pref to the given path. We write to Internet Config
-// because Gecko reads from IC when getting NS_MAC_DEFAULT_DOWNLOAD_DIR.
- (void)setDownloadFolder:(NSString*)inNewFolder
{
- if (!inNewFolder)
- return;
-
- // It would be nice to use PreferenceManager, but I don't want to drag
- // all that code into the plugin.
- StInternetConfigSession icSession('MOZC');
- if (!icSession.Available())
- return;
-
- // Make a ICFileSpec out of our path and shove it into IC. This requires
- // creating an FSSpec and an alias.
- FSRef fsRef;
- Boolean isDir;
- OSStatus error = ::FSPathMakeRef((UInt8*)[inNewFolder fileSystemRepresentation], &fsRef, &isDir);
- if (error != noErr)
- return;
-
- FSSpec fsSpec;
- error = ::FSGetCatalogInfo(&fsRef, kFSCatInfoNone, nil, nil, &fsSpec, nil);
- if (error != noErr)
- return;
-
- AliasHandle alias = nil;
- error = ::FSNewAlias(nil, &fsRef, &alias);
-
- // Copy the data out of our variables into the ICFileSpec and hand it to IC.
- if (error == noErr && alias) {
- long headerSize = offsetof(ICFileSpec, alias);
- long aliasSize = ::GetHandleSize((Handle)alias);
- ICFileSpec* realbuffer = (ICFileSpec*) calloc(headerSize + aliasSize, 1);
- realbuffer->fss = fsSpec;
- memcpy(&realbuffer->alias, *alias, aliasSize);
- ::ICSetPref(icSession.Instance(), kICDownloadFolder, kICAttrNoChange, (const void*)realbuffer, headerSize + aliasSize);
- free(realbuffer);
- ::DisposeHandle((Handle)alias);
- }
+ [[PreferenceManager sharedInstance] setDownloadDirectoryPrefToPath:inNewFolder];
}
// Given a full path to the d/l dir, display the leaf name and the Finder icon associated
// with that folder in the first item of the download folder popup.
//
- (void)setupDownloadMenuWithPath:(NSString*)inDLPath
{
NSMenuItem* placeholder = [mDownloadFolder itemAtIndex:0];
@@ -207,25 +142,25 @@
{
// The three options in the popup contains tags 0-2; set the pref according to the
// selected menu item's tag.
int selectedTagValue = [mDownloadRemovalPolicy selectedTag];
[self setPref:kGeckoPrefDownloadCleanupPolicy toInt:selectedTagValue];
}
// This is called when the user closes the open panel sheet for selecting a new d/l folder.
-// If they clicked ok, change the IC pref and re-display the new choice in the
+// If they clicked ok, change the pref and re-display the new choice in the
// popup menu.
- (void)openPanelDidEnd:(NSOpenPanel*)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo
{
if (returnCode == NSOKButton) {
// stuff path into pref
NSString* newPath = [[sheet filenames] objectAtIndex:0];
[self setDownloadFolder:newPath];
-
+
// update the menu
[self setupDownloadMenuWithPath:newPath];
}
else {
[mDownloadFolder selectItemAtIndex:0];
}
}
Index: src/history/HistoryDataSource.h
===================================================================
RCS file: /cvsroot/mozilla/camino/src/history/HistoryDataSource.h,v
retrieving revision 1.15
diff -u -8 -r1.15 HistoryDataSource.h
--- src/history/HistoryDataSource.h 23 May 2005 03:36:08 -0000 1.15
+++ src/history/HistoryDataSource.h 23 Feb 2010 03:07:48 -0000
@@ -39,45 +39,45 @@
* ***** END LICENSE BLOCK ***** */
#import
@class BrowserWindowController;
@class HistoryItem;
@class HistorySiteItem;
-class nsIBrowserHistory;
-class nsHistoryObserver;
+class nsNavHistoryObserver;
+class nsINavHistoryService;
extern NSString* const kHistoryViewByDate; // grouped by last visit date
extern NSString* const kHistoryViewBySite; // grouped by site
extern NSString* const kHistoryViewFlat; // flat
// notification object is the data source.
extern NSString* const kNotificationNameHistoryDataSourceChanged;
// if not nil, this userInfo object is the changed item
extern NSString* const kNotificationHistoryDataSourceChangedUserInfoChangedItem;
// if true, this indicates that just the item changed, not its children (it's an NSNumber with bool)
extern NSString* const kNotificationHistoryDataSourceChangedUserInfoChangedItemOnly;
@class HistoryTreeBuilder;
@interface HistoryDataSource : NSObject
{
- nsIBrowserHistory* mGlobalHistory; // owned (would be an nsCOMPtr)
- nsHistoryObserver* mHistoryObserver; // owned
+ nsINavHistoryService* mNavHistoryService; // owned (would be an nsCOMPtr)
+ nsNavHistoryObserver* mNavHistoryObserver; // owned
BOOL mShowSiteIcons;
NSString* mCurrentViewIdentifier;
NSString* mSortColumn;
BOOL mSortDescending;
NSMutableArray* mHistoryItems; // this array owns all the history items
- NSMutableDictionary* mHistoryItemsDictionary; // history items indexed by id
+ NSMutableDictionary* mHistoryItemsDictionary; // history items indexed by url
NSMutableArray* mSearchResultsArray;
// the tree builder encapsulates the logic to build and update different history views
// (e.g. by date, by site etc), and supply the root object.
HistoryTreeBuilder* mTreeBuilder;
NSString* mSearchString;
Index: src/history/HistoryDataSource.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/history/HistoryDataSource.mm,v
retrieving revision 1.51
diff -u -8 -r1.51 HistoryDataSource.mm
--- src/history/HistoryDataSource.mm 15 Jul 2009 18:41:45 -0000 1.51
+++ src/history/HistoryDataSource.mm 23 Feb 2010 03:07:50 -0000
@@ -35,34 +35,33 @@
* 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 "NSString+Utils.h"
#import "NSString+Gecko.h"
#import "NSPasteboard+Utils.h"
+#import "NSDate+Utils.h"
#import "BrowserWindowController.h"
#import "HistoryDataSource.h"
#import "CHBrowserView.h"
#import "ExtendedOutlineView.h"
#import "PreferenceManager.h"
#import "HistoryItem.h"
#import "SiteIconProvider.h"
#import "BookmarkViewController.h" // only for +greyStringWithItemCount
#import "nsCOMPtr.h"
#include "nsIBrowserHistory.h"
#include "nsIServiceManager.h"
-#include "nsIHistoryItems.h"
-#include "nsIHistoryObserver.h"
-#include "nsISimpleEnumerator.h"
+#include "nsINavHistoryService.h"
#include "nsNetUtil.h"
#include "nsString.h"
#include "nsComponentManagerUtils.h"
NSString* const kHistoryViewByDate = @"date";
NSString* const kHistoryViewBySite = @"site";
@@ -154,16 +153,17 @@
- (void)notifyChanged:(HistoryItem*)changeRoot itemOnly:(BOOL)itemOnly;
- (SEL)selectorForSortColumn;
- (void)rebuildSearchResults;
- (void)sortSearchResults;
- (NSArray*)historyItems;
+- (void)removeAllObjects;
- (HistorySiteItem*)itemWithIdentifier:(NSString*)identifier;
- (void)siteIconLoaded:(NSNotification*)inNotification;
- (void)checkForNewDay;
@end
#pragma mark -
@@ -521,164 +521,224 @@
[self resortFromItem:mRootItem];
}
@end
#pragma mark -
-class nsHistoryObserver : public nsIHistoryObserver
+class nsNavHistoryObserver : public nsINavHistoryObserver
{
-public:
- nsHistoryObserver(HistoryDataSource* inDataSource)
+public:
+ nsNavHistoryObserver(HistoryDataSource* inDataSource)
: mDataSource(inDataSource)
{
}
- virtual ~nsHistoryObserver()
+ virtual ~nsNavHistoryObserver()
{
}
protected:
- HistorySiteItem* HistoryItemFromItem(nsIHistoryItem* inItem)
+ HistorySiteItem* HistoryItemFromURI(nsIURI* inURI)
{
- nsCString identifier;
- if (NS_SUCCEEDED(inItem->GetID(identifier)))
- return [mDataSource itemWithIdentifier:[NSString stringWith_nsACString:identifier]];
-
+ nsCAutoString url;
+ if (inURI && NS_SUCCEEDED(inURI->GetSpec(url))) {
+ NSString* identifierString = [NSString stringWith_nsACString:url];
+ return [mDataSource itemWithIdentifier:identifierString];
+ }
+
return nil;
}
-
+
public:
NS_DECL_ISUPPORTS
- NS_IMETHOD HistoryLoaded()
+ //
+ // OnVisit
+ //
+ // This is called each time a URI is visited. For the first visit, we need
+ // to create a new HistorySiteItem so we can add it to the data source.
+ // For all subsequent visits, we just need to find that item and update it
+ // with a new last visit date.
+ //
+ NS_IMETHOD OnVisit(nsIURI *aURI, PRInt64 aVisitID, PRTime aTime, PRInt64 aSessionID,
+ PRInt64 aReferringID, PRUint32 aTransitionType, PRUint32 *aAdded)
{
- // we build the Obj-C data source lazily, so do nothing here
- return NS_OK;
- }
-
- NS_IMETHOD HistoryClosing()
- {
- [mDataSource cleanupHistory];
- return NS_OK;
- }
-
- NS_IMETHOD ItemLoaded(nsIHistoryItem* inHistoryItem, PRBool inFirstVisit)
- {
- // Ignore hidden items
- PRBool hidden;
- if (!inHistoryItem || NS_FAILED(inHistoryItem->GetHidden(&hidden)) || hidden)
+ // Ignore embedded objects, such as images.
+ if (aTransitionType == nsINavHistoryService::TRANSITION_EMBED)
return NS_OK;
@try { // make sure we don't throw out into gecko
+ HistorySiteItem* item = HistoryItemFromURI(aURI);
- // The logic here is slightly odd, because even when inFirstVisit is false,
- // we can still get an item that we haven't seen before. This can happen
- // when loading a URL that was typed: it was added first as a typed url,
- // then is 'converted' when the page loads, at which point we get notified.
- HistorySiteItem* item = nil;
- if (!inFirstVisit)
- item = HistoryItemFromItem(inHistoryItem);
-
- if (item)
- {
- if ([item updateWith_nsIHistoryItem:inHistoryItem])
+ if (item) {
+ NSDate* newDate = [NSDate dateWithPRTime:aTime];
+ if (![[item lastVisit] isEqual:newDate]) {
+ [item setLastVisitDate:newDate];
[mDataSource itemChanged:item];
- }
- else
- {
- item = [[HistorySiteItem alloc] initWithDataSource:mDataSource historyItem:inHistoryItem];
+ }
+ }
+ else {
+ nsCOMPtr histSvc = do_GetService("@mozilla.org/browser/nav-history-service;1");
+ if (!histSvc)
+ return NS_OK;
+
+ nsCOMPtr query;
+ histSvc->GetNewQuery(getter_AddRefs(query));
+ if (!query)
+ return NS_OK;
+
+ PRBool queryParametersSet = NS_SUCCEEDED(query->SetUri(aURI));
+ queryParametersSet &= NS_SUCCEEDED(query->SetMinVisits(1));
+ queryParametersSet &= NS_SUCCEEDED(query->SetMaxVisits(1));
+ if (!queryParametersSet)
+ return NS_OK;
+
+ nsCOMPtr options;
+ histSvc->GetNewQueryOptions(getter_AddRefs(options));
+ if (!options)
+ return NS_OK;
+
+ nsCOMPtr result;
+ histSvc->ExecuteQuery(query, options, getter_AddRefs(result));
+ if (!result)
+ return NS_OK;
+
+ nsCOMPtr rootNode;
+ result->GetRoot(getter_AddRefs(rootNode));
+ if (!rootNode)
+ return NS_OK;
+
+ rootNode->SetContainerOpen(PR_TRUE);
+ PRUint32 childCount = 0;
+ rootNode->GetChildCount(&childCount);
+ if (childCount != 1)
+ return NS_OK;
+
+ nsCOMPtr resultNode;
+ rootNode->GetChild(0, getter_AddRefs(resultNode));
+ if(!resultNode)
+ return NS_OK;
+
+ item = [[HistorySiteItem alloc] initWithDataSource:mDataSource resultNode:resultNode];
+
[mDataSource itemAdded:item];
[item release];
}
}
@catch (id exception) {
NSLog(@"Exception caught in ItemLoaded: %@", exception);
}
-
+
+ return NS_OK;
+ }
+
+ NS_IMETHOD OnBeginUpdateBatch()
+ {
+ [mDataSource startBatching];
+ return NS_OK;
+ }
+
+ NS_IMETHOD OnEndUpdateBatch()
+ {
+ [mDataSource endBatching];
return NS_OK;
}
- NS_IMETHOD ItemRemoved(nsIHistoryItem* inHistoryItem)
+ NS_IMETHOD OnTitleChanged(nsIURI *aURI, const nsAString & aPageTitle)
{
+ HistorySiteItem* item = HistoryItemFromURI(aURI);
+ if (!item)
+ return NS_OK;
+
@try { // make sure we don't throw out into gecko
- HistorySiteItem* item = HistoryItemFromItem(inHistoryItem);
- if (item)
- [mDataSource itemRemoved:item];
+ NSString* newTitle = [NSString stringWith_nsAString:aPageTitle];
+ BOOL titleChanged = ![newTitle isEqualToString:[item title]];
+ if (titleChanged) {
+ [item setTitle:newTitle];
+ [mDataSource itemChanged:item];
+ }
}
@catch (id exception) {
- NSLog(@"Exception caught in ItemRemoved: %@", exception);
+ NSLog(@"Exception caught in ItemTitleChanged: %@", exception);
}
return NS_OK;
}
- NS_IMETHOD ItemTitleChanged(nsIHistoryItem* inHistoryItem)
+ NS_IMETHOD OnBeforeDeleteURI(nsIURI *aURI)
{
- HistorySiteItem* item = HistoryItemFromItem(inHistoryItem);
- if (!item) return NS_OK;
+ return NS_OK;
+ }
+ NS_IMETHOD OnDeleteURI(nsIURI *aURI)
+ {
@try { // make sure we don't throw out into gecko
- if ([item updateWith_nsIHistoryItem:inHistoryItem])
- [mDataSource itemChanged:item];
+ HistorySiteItem* item = HistoryItemFromURI(aURI);
+ if (item)
+ [mDataSource itemRemoved:item];
}
@catch (id exception) {
- NSLog(@"Exception caught in ItemTitleChanged: %@", exception);
+ NSLog(@"Exception caught in ItemRemoved: %@", exception);
}
return NS_OK;
}
- NS_IMETHOD StartBatchChanges()
+ NS_IMETHOD OnClearHistory()
+ {
+ // Rather than calling |itemRemoved| for every item, just remove
+ // all the items at once and rebuild.
+ [mDataSource removeAllObjects];
+ [mDataSource rebuildHistory];
+ return NS_OK;
+ }
+
+ NS_IMETHOD OnPageChanged(nsIURI *aURI, PRUint32 aWhat, const nsAString & aValue)
{
- [mDataSource startBatching];
return NS_OK;
}
-
- NS_IMETHOD EndBatchChanges()
+
+ NS_IMETHOD OnPageExpired(nsIURI *aURI, PRTime aVisitTime, PRBool aWholeEntry)
{
- [mDataSource endBatching];
return NS_OK;
}
protected:
- HistoryDataSource* mDataSource;
+ HistoryDataSource* mDataSource;
};
-NS_IMPL_ISUPPORTS1(nsHistoryObserver, nsIHistoryObserver);
+NS_IMPL_ISUPPORTS1(nsNavHistoryObserver, nsINavHistoryObserver);
#pragma mark -
@implementation HistoryDataSource
- (id)init
{
if ((self = [super init]))
{
- nsCOMPtr globalHist = do_GetService("@mozilla.org/browser/global-history;2");
- mGlobalHistory = globalHist;
- if (!mGlobalHistory)
+ nsCOMPtr histSvc = do_GetService("@mozilla.org/browser/nav-history-service;1");
+ mNavHistoryService = histSvc;
+ if (!mNavHistoryService)
{
NSLog(@"Failed to initialize HistoryDataSource (couldn't get global history)");
[self autorelease];
return nil;
}
- NS_IF_ADDREF(mGlobalHistory);
-
- mHistoryObserver = new nsHistoryObserver(self);
- NS_ADDREF(mHistoryObserver);
+ NS_IF_ADDREF(mNavHistoryService);
+
+ mNavHistoryObserver = new nsNavHistoryObserver(self);
+ NS_ADDREF(mNavHistoryObserver);
+ mNavHistoryService->AddObserver(mNavHistoryObserver, PR_FALSE);
- nsCOMPtr historyItems = do_QueryInterface(mGlobalHistory);
- if (historyItems)
- historyItems->AddObserver(mHistoryObserver);
-
mCurrentViewIdentifier = [kHistoryViewByDate retain];
mSortColumn = [[NSString stringWithString:@"last_visit"] retain]; // save last settings in prefs?
mSortDescending = YES;
mSearchString = nil;
mLastDayOfCommonEra = [[NSCalendarDate calendarDate] dayOfCommonEra];
@@ -718,25 +778,24 @@
[super dealloc];
}
- (void)cleanupHistory
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
- if (mHistoryObserver)
+ if (mNavHistoryObserver)
{
- nsCOMPtr historyItems = do_QueryInterface(mGlobalHistory);
- if (historyItems)
- historyItems->RemoveObserver(mHistoryObserver);
- NS_RELEASE(mHistoryObserver);
+ if (mNavHistoryService)
+ mNavHistoryService->RemoveObserver(mNavHistoryObserver);
+ NS_RELEASE(mNavHistoryObserver);
}
- NS_IF_RELEASE(mGlobalHistory);
+ NS_IF_RELEASE(mNavHistoryService);
[mHistoryItems release];
mHistoryItems = nil;
[mHistoryItemsDictionary release];
mHistoryItemsDictionary = nil;
[mSearchResultsArray release];
@@ -807,56 +866,59 @@
[self notifyChanged:oldParent itemOnly:NO];
if (oldParent != newParent)
[self notifyChanged:newParent itemOnly:NO];
}
- (void)loadLazily
{
- nsCOMPtr historyItems = do_QueryInterface(mGlobalHistory);
- if (!historyItems) return;
+ nsCOMPtr query;
+ mNavHistoryService->GetNewQuery(getter_AddRefs(query));
+ if (!query)
+ return;
- PRUint32 maxItems;
- if (NS_FAILED(historyItems->GetMaxItemCount(&maxItems)))
- maxItems = 100;
+ nsCOMPtr options;
+ mNavHistoryService->GetNewQueryOptions(getter_AddRefs(options));
+ if (!options)
+ return;
+
+ nsCOMPtr result;
+ mNavHistoryService->ExecuteQuery(query, options, getter_AddRefs(result));
+ if (!result)
+ return;
+
+ nsCOMPtr rootNode;
+ result->GetRoot(getter_AddRefs(rootNode));
+ if (!rootNode)
+ return;
+
+ rootNode->SetContainerOpen(PR_TRUE);
+ PRUint32 childCount = 0;
+ rootNode->GetChildCount(&childCount);
if (!mHistoryItems)
- mHistoryItems = [[NSMutableArray alloc] initWithCapacity:maxItems];
+ mHistoryItems = [[NSMutableArray alloc] initWithCapacity:childCount];
else
[mHistoryItems removeAllObjects];
-
+
if (!mHistoryItemsDictionary)
- mHistoryItemsDictionary = [[NSMutableDictionary alloc] initWithCapacity:maxItems];
+ mHistoryItemsDictionary = [[NSMutableDictionary alloc] initWithCapacity:childCount];
else
[mHistoryItemsDictionary removeAllObjects];
-
- nsCOMPtr historyEnumerator;
- historyItems->GetItemEnumerator(getter_AddRefs(historyEnumerator));
- if (!historyEnumerator) return;
- PRBool hasMore;
- while (PR_TRUE)
- {
- historyEnumerator->HasMoreElements(&hasMore);
- if (!hasMore) break;
-
- // addref's each entry as it enters 'array'
- nsCOMPtr thisEntry;
- historyEnumerator->GetNext(getter_AddRefs(thisEntry));
-
- nsCOMPtr thisItem = do_QueryInterface(thisEntry);
- PRBool hidden;
- if (thisItem && NS_SUCCEEDED(thisItem->GetHidden(&hidden)) && !hidden)
- {
- HistorySiteItem* item = [[HistorySiteItem alloc] initWithDataSource:self historyItem:thisItem];
- [mHistoryItems addObject:item];
- [mHistoryItemsDictionary setObject:item forKey:[item identifier]];
- [item release];
- }
+ for (uint i = 0; i < childCount; i++) {
+ nsCOMPtr child;
+ rootNode->GetChild(i, getter_AddRefs(child));
+ if (!child)
+ continue;
+ HistorySiteItem* item = [[HistorySiteItem alloc] initWithDataSource:self resultNode:child];
+ [mHistoryItems addObject:item];
+ [mHistoryItemsDictionary setObject:item forKey:[item identifier]];
+ [item release];
}
[self rebuildHistory];
}
- (HistoryItem*)rootItem
{
return [mTreeBuilder rootItem];
@@ -1057,21 +1119,29 @@
}
- (void)removeItem:(HistorySiteItem*)item
{
nsCOMPtr doomedURI;
NS_NewURI(getter_AddRefs(doomedURI), [[item url] UTF8String]);
if (doomedURI)
{
- mGlobalHistory->RemovePage(doomedURI);
+ nsCOMPtr hist(do_QueryInterface(mNavHistoryService));
+ if (hist)
+ hist->RemovePage(doomedURI);
[self itemRemoved:item];
}
}
+- (void)removeAllObjects
+{
+ [mHistoryItems removeAllObjects];
+ [mHistoryItemsDictionary removeAllObjects];
+}
+
#pragma mark -
// Implementation of NSOutlineViewDataSource protocol
- (id)outlineView:(NSOutlineView*)aOutlineView child:(int)aIndex ofItem:(id)item
{
if (mSearchResultsArray)
{
Index: src/history/HistoryItem.h
===================================================================
RCS file: /cvsroot/mozilla/camino/src/history/HistoryItem.h,v
retrieving revision 1.8
diff -u -8 -r1.8 HistoryItem.h
--- src/history/HistoryItem.h 15 Jul 2009 18:41:46 -0000 1.8
+++ src/history/HistoryItem.h 23 Feb 2010 03:07:50 -0000
@@ -33,18 +33,18 @@
* 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
-class nsIHistoryItem;
@class HistoryDataSource;
+class nsINavHistoryResultNode;
// HistoryItem is the base class for every object in the history outliner
@interface HistoryItem : NSObject
{
HistoryItem* mParentItem; // our parent item (not retained)
HistoryDataSource* mDataSource; // the data source that owns us (not retained)
}
@@ -137,17 +137,17 @@
NSDate* mFirstVisitDate;
NSDate* mLastVisitDate;
NSNumber* mVisitCount;
NSImage* mSiteIcon;
BOOL mAttemptedIconLoad;
}
-- (id)initWithDataSource:(HistoryDataSource*)inDataSource historyItem:(nsIHistoryItem*)inItem;
-// return YES if anything changed
-- (BOOL)updateWith_nsIHistoryItem:(nsIHistoryItem*)inItem;
+- (id)initWithDataSource:(HistoryDataSource*)inDataSource resultNode:(nsINavHistoryResultNode*)inNode;
- (BOOL)matchesString:(NSString*)searchString inFieldWithTag:(int)tag;
- (void)setSiteIcon:(NSImage*)inImage;
+- (void)setTitle:(NSString*)inTitle;
+- (void)setLastVisitDate:(NSDate*)inDate;
@end
Index: src/history/HistoryItem.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/history/HistoryItem.mm,v
retrieving revision 1.16
diff -u -8 -r1.16 HistoryItem.mm
--- src/history/HistoryItem.mm 29 Jul 2009 17:13:01 -0000 1.16
+++ src/history/HistoryItem.mm 23 Feb 2010 03:07:51 -0000
@@ -42,17 +42,21 @@
#import "NSImage+Utils.h"
#import "HistoryItem.h"
#import "HistoryDataSource.h"
#import "SiteIconProvider.h"
#import "nsString.h"
-#import "nsIHistoryItems.h"
+
+#import "nsINavHistoryService.h"
+#import "nsIURI.h"
+#import "nsCOMPtr.h"
+#import "nsNetUtil.h"
// search field tags, used in search field context menu item tags
enum
{
eHistorySearchFieldAll = 1,
eHistorySearchFieldTitle,
eHistorySearchFieldURL
@@ -482,86 +486,52 @@
}
@end // HistoryDateCategoryItem
#pragma mark -
@implementation HistorySiteItem
-- (id)initWithDataSource:(HistoryDataSource*)inDataSource historyItem:(nsIHistoryItem*)inItem
+- (id)initWithDataSource:(HistoryDataSource*)inDataSource resultNode:(nsINavHistoryResultNode*)inNode
{
if ((self = [super initWithDataSource:inDataSource]))
{
- nsCString identifier;
- if (NS_SUCCEEDED(inItem->GetID(identifier)))
- mItemIdentifier = [[NSString alloc] initWith_nsACString:identifier];
-
- nsCString url;
- if (NS_SUCCEEDED(inItem->GetURL(url)))
+ nsCAutoString url;
+ if (NS_SUCCEEDED(inNode->GetUri(url))) {
mURL = [[NSString alloc] initWith_nsACString:url];
+ // nsINavHistoryResultNodes don't have any other unique identifier.
+ mItemIdentifier = [[NSString alloc] initWith_nsACString:url];
+ }
- nsString title;
- if (NS_SUCCEEDED(inItem->GetTitle(title)))
- mTitle = [[NSString alloc] initWith_nsAString:title];
-
- nsCString hostname;
- if (NS_SUCCEEDED(inItem->GetHostname(hostname)))
+ nsCAutoString title;
+ if (NS_SUCCEEDED(inNode->GetTitle(title)))
+ mTitle = [[NSString alloc] initWith_nsACString:title];
+
+ nsCOMPtr uri;
+ if (NS_SUCCEEDED(NS_NewURI(getter_AddRefs(uri), url))) {
+ nsCAutoString hostname;
+ uri->GetHost(hostname);
mHostname = [[NSString alloc] initWith_nsACString:hostname];
+ }
if ([mHostname length] == 0 && [mURL hasPrefix:@"file://"])
mHostname = [[NSString alloc] initWithString:@"local_file"];
- PRTime firstVisit;
- if (NS_SUCCEEDED(inItem->GetFirstVisitDate(&firstVisit)))
- mFirstVisitDate = [[NSDate dateWithPRTime:firstVisit] retain];
-
PRTime lastVisit;
- if (NS_SUCCEEDED(inItem->GetLastVisitDate(&lastVisit)))
+ if (NS_SUCCEEDED(inNode->GetTime(&lastVisit)))
mLastVisitDate = [[NSDate dateWithPRTime:lastVisit] retain];
- PRInt32 visitCount;
- if (NS_SUCCEEDED(inItem->GetVisitCount(&visitCount)))
- mVisitCount = [[NSNumber numberWithInt:visitCount] retain];
+ PRUint32 visitCount;
+ if (NS_SUCCEEDED(inNode->GetAccessCount(&visitCount)))
+ mVisitCount = [[NSNumber numberWithUnsignedInt:visitCount] retain];
}
return self;
}
-- (BOOL)updateWith_nsIHistoryItem:(nsIHistoryItem*)inItem
-{
- // only the title and last visit date can change
- BOOL somethingChanged = NO;
-
- nsString title;
- if (NS_SUCCEEDED(inItem->GetTitle(title)))
- {
- NSString* newTitle = [NSString stringWith_nsAString:title];
- if (!mTitle || ![mTitle isEqualToString:newTitle])
- {
- [mTitle release];
- mTitle = [newTitle retain];
- somethingChanged = YES;
- }
- }
-
- PRTime lastVisit;
- if (NS_SUCCEEDED(inItem->GetLastVisitDate(&lastVisit)))
- {
- NSDate* newDate = [NSDate dateWithPRTime:lastVisit];
- if (![mLastVisitDate isEqual:newDate])
- {
- [mLastVisitDate release];
- mLastVisitDate = [newDate retain];
- somethingChanged = YES;
- }
- }
-
- return somethingChanged;
-}
-
- (void)dealloc
{
[mItemIdentifier release];
[mURL release];
[mTitle release];
[mHostname release];
[mFirstVisitDate release];
[mLastVisitDate release];
@@ -576,18 +546,86 @@
return mURL;
}
- (NSString*)title
{
return mTitle;
}
+//
+// -firstVisit
+//
+// Returns the date of the first visit to this item. Finding this date involves
+// querying Places for the earliest visit to the item's URL. Doing this when
+// initializing the item is slower by an order of magnitude, presumably because
+// we are already accessing the database.
+//
- (NSDate*)firstVisit
{
+ if (!mFirstVisitDate) {
+ // First set up a sensible default in case we can't get the true date.
+ mFirstVisitDate = [[NSDate alloc] init];
+
+ nsCOMPtr histSvc = do_GetService("@mozilla.org/browser/nav-history-service;1");
+ if (!histSvc)
+ return mFirstVisitDate;
+
+ nsCOMPtr query;
+ histSvc->GetNewQuery(getter_AddRefs(query));
+ if (!query)
+ return mFirstVisitDate;
+
+ nsCOMPtr uri;
+ if (NS_FAILED(NS_NewURI(getter_AddRefs(uri), [mURL UTF8String])))
+ return mFirstVisitDate;
+
+ if (NS_FAILED(query->SetUri(uri)))
+ return mFirstVisitDate;
+
+ nsCOMPtr options;
+ histSvc->GetNewQueryOptions(getter_AddRefs(options));
+ if (!options)
+ return mFirstVisitDate;
+
+ if (NS_FAILED(options->SetResultType(nsINavHistoryQueryOptions::RESULTS_AS_VISIT)))
+ return mFirstVisitDate;
+
+ if (NS_FAILED(options->SetSortingMode(nsINavHistoryQueryOptions::SORT_BY_DATE_ASCENDING)))
+ return mFirstVisitDate;
+
+ // We only want one result: the oldest.
+ if (NS_FAILED(options->SetMaxResults(1)))
+ return mFirstVisitDate;
+
+ nsCOMPtr result;
+ histSvc->ExecuteQuery(query, options, getter_AddRefs(result));
+ if (!result)
+ return mFirstVisitDate;
+
+ nsCOMPtr rootNode;
+ result->GetRoot(getter_AddRefs(rootNode));
+ if (!rootNode)
+ return mFirstVisitDate;
+
+ rootNode->SetContainerOpen(PR_TRUE);
+ PRUint32 childCount = 0;
+ rootNode->GetChildCount(&childCount);
+
+ nsCOMPtr resultNode;
+ if (childCount)
+ rootNode->GetChild(0, getter_AddRefs(resultNode));
+
+ PRTime firstVisit;
+ if (resultNode && NS_SUCCEEDED(resultNode->GetTime(&firstVisit))) {
+ [mFirstVisitDate autorelease];
+ mFirstVisitDate = [[NSDate dateWithPRTime:firstVisit] retain];
+ }
+ }
+
return mFirstVisitDate;
}
- (NSDate*)lastVisit
{
return mLastVisitDate;
}
@@ -647,16 +685,29 @@
}
- (void)setSiteIcon:(NSImage*)inImage
{
[mSiteIcon autorelease];
mSiteIcon = [inImage retain];
}
+- (void)setTitle:(NSString*)inTitle
+{
+ [mTitle autorelease];
+ mTitle = [inTitle retain];
+}
+
+- (void)setLastVisitDate:(NSDate*)inDate
+{
+ [mLastVisitDate release];
+ mLastVisitDate = [inDate retain];
+}
+
+
// ideally, we'd strip the protocol from the URL before comparing so that https:// doesn't
// sort after http://
- (NSComparisonResult)compareURL:(HistoryItem *)aItem sortDescending:(NSNumber*)inDescending
{
NSComparisonResult result;
// sort categories before sites
if ([aItem isKindOfClass:[HistoryCategoryItem class]])
result = NSOrderedDescending;
Index: src/history/nsIHistoryDisplay.h
===================================================================
RCS file: src/history/nsIHistoryDisplay.h
diff -N src/history/nsIHistoryDisplay.h
--- src/history/nsIHistoryDisplay.h 11 Nov 2005 14:35:52 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,78 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; 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 Communicator client code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Simon Fraser
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of 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 ***** */
-
-
-#ifndef __gen_nsISupports_h__
-#include "nsISupports.h"
-#endif
-
-
-// 06A993AC-5BB0-11D9-85E7-000393D7254A
-#define NS_IHISTORYDISPLAY_IID_STR "06a993ac-5bb0-11d9-85e7-000393d7254a"
-
-#define NS_IHISTORYDISPLAY_IID \
- {0x06a993ac, 0x5bb0, 0x11d9, \
- { 0x85, 0xe7, 0x00, 0x03, 0x39, 0xd7, 0x25, 0x4a }}
-
-
-class NS_NO_VTABLE nsIHistoryDisplay : public nsISupports
-{
- public:
-
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHISTORYDISPLAY_IID)
-
-
- /**
- * GetItemCount
- * Get the number of entries in global history
- */
- NS_IMETHOD GetItemCount(PRUint32 *outCount) = 0;
-
- /**
- * GetItemEnumerator
- * Get an enumerator for all the items in global history
- */
- NS_IMETHOD GetItemEnumerator(nsISimpleEnumerator** outEnumerator) = 0;
-
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIHistoryDisplay, NS_IHISTORYDISPLAY_IID)
-
-#define NS_DECL_NSIHISTORYDISPLAY \
- NS_IMETHOD GetItemCount(PRUint32 *outCount); \
- NS_IMETHOD GetItemEnumerator(nsISimpleEnumerator** outEnumerator);
Index: src/history/nsIHistoryItems.h
===================================================================
RCS file: src/history/nsIHistoryItems.h
diff -N src/history/nsIHistoryItems.h
--- src/history/nsIHistoryItems.h 11 Nov 2005 14:35:52 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,163 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; 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 Communicator client code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Simon Fraser
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of 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 ***** */
-
-#ifndef nsihistoryitems_h__
-#define nsihistoryitems_h__
-
-
-#ifndef __gen_nsISupports_h__
-#include "nsISupports.h"
-#endif
-
-// 5D46D8CA-5BB2-11D9-A79E-000393D7254A
-#define NS_IHISTORYITEM_IID_STR "5d46d8ca-5bb2-11d9-a79e-000393d7254a"
-
-#define NS_IHISTORYITEM_IID \
- {0x5d46d8ca, 0x5bb2, 0x11d9, \
- { 0xa7, 0x9e, 0x00, 0x03, 0x39, 0xd7, 0x25, 0x4a }}
-
-// 06A993AC-5BB0-11D9-85E7-000393D7254A
-#define NS_IHISTORYITEMS_IID_STR "06a993ac-5bb0-11d9-85e7-000393d7254a"
-
-#define NS_IHISTORYITEMS_IID \
- {0x06a993ac, 0x5bb0, 0x11d9, \
- { 0x85, 0xe7, 0x00, 0x03, 0x39, 0xd7, 0x25, 0x4a }}
-
-
-//
-// nsIHistoryItem is used to communicate details about history
-// items to clients.
-//
-// Instances of nsIHistoryItem are _not_ persistent, so you cannot
-// rely on getting the same nsIHistoryItem back from the enumerator
-// a second time. Use the unique identifiers for this purpose.
-//
-// (This saves us from having to maintain a collection of nsIHistoryItem
-// objects that do little more than reflect the db row objects, but we
-// should probably do this to remove the burdern from the client.)
-//
-
-class NS_NO_VTABLE nsIHistoryItem : public nsISupports
-{
-public:
-
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHISTORYITEM_IID)
-
- NS_IMETHOD GetURL(nsACString& outURL) = 0;
- NS_IMETHOD GetReferrer(nsACString& outReferrer) = 0;
-
- NS_IMETHOD GetLastVisitDate(PRTime* outLastVisit) = 0;
- NS_IMETHOD GetFirstVisitDate(PRTime* outFirstVisit) = 0;
- NS_IMETHOD GetVisitCount(PRInt32* outVisitCount) = 0;
-
- NS_IMETHOD GetTitle(nsAString& outURL) = 0;
- NS_IMETHOD GetHostname(nsACString& outURL) = 0;
-
- NS_IMETHOD GetHidden(PRBool* outHidden) = 0;
- NS_IMETHOD GetTyped(PRBool* outTyped) = 0;
-
- // return a unique, persistent (within sessions) ID for this item
- NS_IMETHOD GetID(nsACString& outIDString) = 0;
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIHistoryItem, NS_IHISTORYITEM_IID)
-
-#define NS_DECL_NSIHISTORYITEM \
- NS_IMETHOD GetURL(nsACString& outURL); \
- NS_IMETHOD GetReferrer(nsACString& outReferrer); \
- NS_IMETHOD GetLastVisitDate(PRTime* outLastVisit); \
- NS_IMETHOD GetFirstVisitDate(PRTime* outFirstVisit); \
- NS_IMETHOD GetVisitCount(PRInt32* outVisitCount); \
- NS_IMETHOD GetTitle(nsAString& outURL); \
- NS_IMETHOD GetHostname(nsACString& outURL); \
- NS_IMETHOD GetHidden(PRBool* outHidden); \
- NS_IMETHOD GetTyped(PRBool* outTyped); \
- NS_IMETHOD GetID(nsACString& outIDString);
-
-class nsISimpleEnumerator;
-class nsIHistoryObserver;
-
-class NS_NO_VTABLE nsIHistoryItems : public nsISupports
-{
-public:
-
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHISTORYITEMS_IID)
-
- /**
- * GetMaxItemCount
- * Get the max number of entries in global history (the real number
- * may be less because of hidden rows).
- */
- NS_IMETHOD GetMaxItemCount(PRUint32 *outCount) = 0;
-
- /**
- * GetItemEnumerator
- * Get an enumerator for all the items in global history.
- * Enumerator items are instances of nsIHistoryItem
- */
- NS_IMETHOD GetItemEnumerator(nsISimpleEnumerator** outEnumerator) = 0;
-
- /**
- * Flush
- * Save the history database
- */
- NS_IMETHOD Flush() = 0;
-
- /**
- * AddObserver
- */
- NS_IMETHOD AddObserver(nsIHistoryObserver* inObserver) = 0;
-
- /**
- * RemoveObserver
- */
- NS_IMETHOD RemoveObserver(nsIHistoryObserver* inObserver) = 0;
-
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIHistoryItems, NS_IHISTORYITEMS_IID)
-
-#define NS_DECL_NSIHISTORYITEMS \
- NS_IMETHOD GetMaxItemCount(PRUint32 *outCount); \
- NS_IMETHOD GetItemEnumerator(nsISimpleEnumerator** outEnumerator); \
- NS_IMETHOD Flush(); \
- NS_IMETHOD AddObserver(nsIHistoryObserver* inObserver); \
- NS_IMETHOD RemoveObserver(nsIHistoryObserver* inObserver);
-
-
-#endif // nsihistoryitems_h__
Index: src/history/nsIHistoryObserver.h
===================================================================
RCS file: src/history/nsIHistoryObserver.h
diff -N src/history/nsIHistoryObserver.h
--- src/history/nsIHistoryObserver.h 11 Nov 2005 14:35:52 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; 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 Communicator client code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Simon Fraser
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of 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 ***** */
-
-#ifndef nsihistoryobserver_h__
-#define nsihistoryobserver_h__
-
-#ifndef __gen_nsISupports_h__
-#include "nsISupports.h"
-#endif
-
-#include "nsIHistoryItems.h"
-
-// BDF54C7D-83C6-406F-84D3-D5ABB9D978B2
-#define NS_IHISTORYOBSERVER_IID_STR "bdf54c7d-83c6-406f-84d3-d5abb9d978b2"
-
-#define NS_IHISTORYOBSERVER_IID \
- {0xbdf54c7d, 0x83c6, 0x406f, \
- { 0x84, 0xd3, 0xd5, 0xab, 0xb9, 0xd9, 0x78, 0xb2 }}
-
-class nsIHistoryObserver : public nsISupports
-{
-public:
-
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHISTORYOBSERVER_IID)
-
- NS_IMETHOD HistoryLoaded() = 0;
- NS_IMETHOD HistoryClosing() = 0;
-
- NS_IMETHOD ItemLoaded(nsIHistoryItem* inHistoryItem, PRBool inFirstVisit) = 0;
-
- NS_IMETHOD ItemRemoved(nsIHistoryItem* inHistoryItem) = 0;
-
- NS_IMETHOD ItemTitleChanged(nsIHistoryItem* inHistoryItem) = 0;
-
- NS_IMETHOD StartBatchChanges() = 0;
- NS_IMETHOD EndBatchChanges() = 0;
-
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIHistoryObserver, NS_IHISTORYOBSERVER_IID)
-
-#define NS_DECL_NSIHISTORYOBSERVER \
- NS_IMETHOD HistoryLoaded(); \
- NS_IMETHOD ItemLoaded(nsIHistoryItem* inHistoryItem, PRBool inFirstVisit); \
- NS_IMETHOD ItemRemoved(nsIHistoryItem* inHistoryItem); \
- NS_IMETHOD ItemTitleChanged(nsIHistoryItem* inHistoryItem); \
- NS_IMETHOD StartBatchChanges(); \
- NS_IMETHOD EndBatchChanges();
-
-#endif // nsihistoryobserver_h__
Index: src/history/nsSimpleGlobalHistory.h
===================================================================
RCS file: src/history/nsSimpleGlobalHistory.h
diff -N src/history/nsSimpleGlobalHistory.h
--- src/history/nsSimpleGlobalHistory.h 29 Aug 2007 01:11:51 -0000 1.12
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,321 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; 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 Communicator client code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Chris Waterson
- * Blake Ross
- * Simon Fraser
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of 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 ***** */
-
-#ifndef nssimpleglobalhistory__h____
-#define nssimpleglobalhistory__h____
-
-#include "nsAString.h"
-#include "nsITimer.h"
-
-#include "nsWeakReference.h"
-#include "mdb.h"
-#include "nsIPrefBranch.h"
-#include "nsIBrowserHistory.h"
-#include "nsIGlobalHistory3.h"
-#include "nsIHistoryItems.h"
-#include "nsIHistoryObserver.h"
-
-#include "nsIObserver.h"
-#include "nsIAutoCompleteSession.h"
-
-#include "nsString.h"
-#include "nsVoidArray.h"
-#include "nsHashSets.h"
-#include "nsCOMArray.h"
-
-struct MatchHostData;
-struct SearchQueryData;
-struct AutocompleteExcludeData;
-
-typedef PRBool (*rowMatchCallback)(nsIMdbRow *aRow, void *closure);
-
-// 0049433E-5B6A-11D9-BE15-000393D7254A
-#define NS_SIMPLEGLOBALHISTORY_CID \
- { 0x0049433E, 0x5B6A, 0x11D9, { 0xBE, 0x15, 0x00, 0x03, 0x93, 0xD7, 0x25, 0x4A } }
-
-
-class nsSimpleGlobalHistory;
-
-class nsHistoryItem : public nsIHistoryItem
-{
-public:
-
- nsHistoryItem();
- virtual ~nsHistoryItem();
-
- NS_METHOD InitWithRow(nsSimpleGlobalHistory* inHistory, nsIMdbEnv* inEnv, nsIMdbRow* inRow);
-
- // nsISupports methods
- NS_DECL_ISUPPORTS
- NS_DECL_NSIHISTORYITEM
-
-protected:
-
- nsSimpleGlobalHistory* mHistory; // not owned
-
- nsIMdbEnv* mEnv;
- nsCOMPtr mRow;
-
-};
-
-
-#pragma mark -
-
-// this is an RDF-free version of nsGlobalHistory.
-class nsSimpleGlobalHistory : nsSupportsWeakReference,
- public nsIBrowserHistory,
- public nsIHistoryItems,
- public nsIObserver,
- public nsIAutoCompleteSession,
- public nsIGlobalHistory3
-{
-friend class HistoryAutoCompleteEnumerator;
-friend class nsHistoryItem;
-
-public:
- nsSimpleGlobalHistory();
- virtual ~nsSimpleGlobalHistory();
-
- NS_METHOD Init();
-
- // nsISupports methods
- NS_DECL_ISUPPORTS
-
- NS_DECL_NSIGLOBALHISTORY2
- NS_DECL_NSIGLOBALHISTORY3
- NS_DECL_NSIBROWSERHISTORY
- NS_DECL_NSIHISTORYITEMS
- NS_DECL_NSIOBSERVER
- NS_DECL_NSIAUTOCOMPLETESESSION
-
-public:
-
- // these must be public so that the callbacks can call them
- PRBool MatchExpiration(nsIMdbRow *row, PRTime* expirationDate);
- PRBool MatchHost(nsIMdbRow *row, MatchHostData *hostInfo);
- PRBool RowMatches(nsIMdbRow* aRow, SearchQueryData *aQuery);
-
- nsresult CreateHistoryItemForRow(nsIMdbRow* inRow, nsIHistoryItem** outItem);
-
-protected:
-
- //
- // database stuff
- //
- enum eCommitType
- {
- kLargeCommit = 0,
- kSessionCommit = 1,
- kCompressCommit = 2
- };
-
- nsresult OpenDB();
- nsresult OpenExistingFile(nsIMdbFactory *factory, const char *filePath);
- nsresult OpenNewFile(nsIMdbFactory *factory, const char *filePath);
- nsresult CreateTokens();
- nsresult CloseDB();
- nsresult CheckHostnameEntries();
- nsresult Commit(eCommitType commitType);
-
- //
- // expiration/removal stuff
- //
- nsresult ExpireEntries(PRBool notify);
- nsresult SetPendingExpireEntries();
- nsresult RemoveMatchingRows(rowMatchCallback aMatchFunc, void *aClosure, PRBool notify);
-
- //
- // autocomplete stuff
- //
- nsresult AutoCompleteSearch(const nsACString& aSearchString,
- AutocompleteExcludeData* aExclude,
- nsIAutoCompleteResults* aPrevResults,
- nsIAutoCompleteResults* aResults);
- void AutoCompleteCutPrefix(nsACString& aURL, AutocompleteExcludeData* aExclude);
- void AutoCompleteGetExcludeInfo(const nsACString& aURL, AutocompleteExcludeData* aExclude);
- void AutoCompletePrefilter(const nsACString& aSearchString, nsACString &outFilteredString);
- PRBool AutoCompleteCompare(nsACString& aHistoryURL,
- const nsACString& aUserURL,
- AutocompleteExcludeData* aExclude);
- PR_STATIC_CALLBACK(int) AutoCompleteSortComparison(nsIHistoryItem *v1, nsIHistoryItem *v2, void *unused);
-
- //
- // sync stuff to write the db to disk every so often
- //
- void Sync();
- nsresult SetDirty();
-
- static void FireSyncTimer(nsITimer *aTimer, void *aClosure);
- static void FireExpireTimer(nsITimer *aTimer, void *aClosure);
-
- //
- // AddPage-oriented stuff
- //
- nsresult AddExistingPageToDatabase(nsIMdbRow *row,
- PRTime aDate,
- const char *aReferrer,
- PRTime *aOldDate,
- PRInt32 *aOldCount);
- nsresult AddNewPageToDatabase(const char *aURL,
- PRTime aDate,
- const char *aReferrer,
- nsIMdbRow **aResult);
-
- nsresult RemovePageInternal(const char *aSpec);
-
- //
- // Row to history item
- //
-
- nsresult StartBatching();
- nsresult EndBatching();
-
- //
- // observer utilities
- //
-
- nsresult NotifyObserversHistoryLoaded();
- nsresult NotifyObserversHistoryClosing();
- nsresult NotifyObserversItemLoaded(nsIMdbRow* inRow, PRBool inFirstVisit);
- nsresult NotifyObserversItemRemoved(nsIMdbRow* inRow);
- nsresult NotifyObserversItemTitleChanged(nsIMdbRow* inRow);
- nsresult NotifyObserversBatchingStarted();
- nsresult NotifyObserversBatchingFinished();
-
- //
- // generic routines for setting/retrieving various datatypes
- //
- nsresult SetRowValue(nsIMdbRow *aRow, mdb_column aCol, const PRTime& aValue);
- nsresult SetRowValue(nsIMdbRow *aRow, mdb_column aCol, const PRInt32 aValue);
- nsresult SetRowValue(nsIMdbRow *aRow, mdb_column aCol, const char *aValue);
- nsresult SetRowValue(nsIMdbRow *aRow, mdb_column aCol, const PRUnichar *aValue);
-
- nsresult GetRowValue(nsIMdbRow *aRow, mdb_column aCol, nsAString& aResult);
- nsresult GetRowValue(nsIMdbRow *aRow, mdb_column aCol, nsACString& aResult);
- nsresult GetRowValue(nsIMdbRow *aRow, mdb_column aCol, PRTime* aResult);
- nsresult GetRowValue(nsIMdbRow *aRow, mdb_column aCol, PRInt32* aResult);
-
- nsresult RowHasCell(nsIMdbRow *aRow, mdb_column aCol, PRBool* aResult);
-
- nsresult FindRow(mdb_column aCol, const char *aURL, nsIMdbRow **aResult);
-
- //
- // convenient getter for tokens
- //
- enum EColumn
- {
- eColumnURL,
- eColumnReferrer,
- eColumnLastVisitDate,
- eColumnFirstVisitDate,
- eColumnVisitCount,
- eColumnTitle, // aka name
- eColumnHostname,
- eColumnHidden,
- eColumnTyped
- };
-
- mdb_column TokenForColumn(EColumn inColumn);
-
- //
- // byte order
- //
- nsresult SaveByteOrder(const char *aByteOrder);
- nsresult GetByteOrder(nsACString & aRetVal);
- nsresult InitByteOrder(PRBool aForce);
- void SwapBytes(const PRUnichar *source, PRUnichar *dest, PRInt32 aLen);
-
-protected:
-
- static PRInt32 gRefCnt;
-
- static nsIMdbFactory* gMdbFactory;
- static nsIPrefBranch* gPrefBranch;
-
- nsCStringArray *mHostNamePrefixes;
- nsCStringArray *mSchemePrefixes;
-
- PRInt64 mFileSizeOnDisk;
- PRInt32 mExpireDays;
-
- PRInt32 mBatchesInProgress;
- PRBool mDirty; // if we've changed history
- PRBool mPagesRemoved; // true if we've removed pages but not committed.
- nsCOMPtr mSyncTimer;
- nsCOMPtr mExpireTimer;
-
- // observers
- nsCOMArray mHistoryObservers;
-
- // autocomplete stuff
- PRBool mAutocompleteOnlyTyped;
-
- // N.B., these are MDB interfaces
- nsIMdbEnv* mEnv; // OWNER
- nsIMdbStore* mStore; // OWNER
- nsIMdbTable* mTable; // OWNER
-
- PRBool mReverseByteOrder;
-
- nsCOMPtr mMetaRow;
-
- mdb_scope kToken_HistoryRowScope;
- mdb_kind kToken_HistoryKind;
-
- mdb_column kToken_URLColumn;
- mdb_column kToken_ReferrerColumn;
- mdb_column kToken_LastVisitDateColumn;
- mdb_column kToken_FirstVisitDateColumn;
- mdb_column kToken_VisitCountColumn;
- mdb_column kToken_NameColumn;
- mdb_column kToken_HostnameColumn;
- mdb_column kToken_HiddenColumn;
- mdb_column kToken_TypedColumn;
- mdb_column kToken_GeckoFlagsColumn;
-
- // meta-data tokens
- mdb_column kToken_LastPageVisited;
- mdb_column kToken_ByteOrder;
-
- nsCStringHashSet mTypedHiddenURIs;
-};
-
-
-#endif // nssimpleglobalhistory__h____
Index: src/history/nsSimpleGlobalHistory.cpp
===================================================================
RCS file: src/history/nsSimpleGlobalHistory.cpp
diff -N src/history/nsSimpleGlobalHistory.cpp
--- src/history/nsSimpleGlobalHistory.cpp 21 Jan 2009 19:09:02 -0000 1.35
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,2917 +0,0 @@
-/* -*- 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 Communicator client code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Chris Waterson
- * Blake Ross
- * Simon Fraser
- * Josh Aas
- * Håkan Waara
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of 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 ***** */
-
-#include "plstr.h"
-#include "prprf.h"
-
-#include "nsNetUtil.h"
-#include "nsCRT.h"
-#include "nsQuickSort.h"
-#include "nsPrintfCString.h"
-#include "nsReadableUtils.h"
-#include "nsUnicharUtils.h"
-
-#include "nsIURL.h"
-#include "nsNetCID.h"
-
-#include "nsInt64.h"
-#include "nsMorkCID.h"
-#include "nsIMdbFactoryFactory.h"
-
-#include "nsIPrefService.h"
-#include "nsIPrefBranch2.h"
-
-#include "nsIDirectoryService.h"
-#include "nsAppDirectoryServiceDefs.h"
-
-#include "nsIObserverService.h"
-#include "nsITextToSubURI.h"
-
-#include "nsTArray.h"
-
-#include "nsSimpleGlobalHistory.h"
-
-#define PREF_BRANCH_BASE "browser."
-#define PREF_BROWSER_HISTORY_EXPIRE_DAYS "history_expire_days"
-#define PREF_AUTOCOMPLETE_ONLY_TYPED "urlbar.matchOnlyTyped"
-#define PREF_AUTOCOMPLETE_ENABLED "urlbar.autocomplete.enabled"
-
-// see bug #319004 -- clamp title and URL to generously-large but not too large
-// length
-#define HISTORY_URI_LENGTH_MAX 65536
-#define HISTORY_TITLE_LENGTH_MAX 4096
-
-// sync history every 10 seconds
-#define HISTORY_SYNC_TIMEOUT (10 * PR_MSEC_PER_SEC)
-//#define HISTORY_SYNC_TIMEOUT 3000 // every 3 seconds - testing only!
-
-// the value of mLastNow expires every 3 seconds
-#define HISTORY_EXPIRE_NOW_TIMEOUT (3 * PR_MSEC_PER_SEC)
-
-static const PRInt64 MSECS_PER_DAY = LL_INIT(20, 500654080); // (1000000LL * 60 * 60 * 24)
-
-PRInt32 nsSimpleGlobalHistory::gRefCnt;
-nsIMdbFactory* nsSimpleGlobalHistory::gMdbFactory = nsnull;
-nsIPrefBranch* nsSimpleGlobalHistory::gPrefBranch = nsnull;
-
-// list of terms, plus an optional groupby column
-struct SearchQueryData {
- nsVoidArray terms; // array of searchTerms
- mdb_column groupBy; // column to group by
-};
-
-
-// individual search term, pulled from token/value structs
-class HistorySearchTerm
-{
-public:
- HistorySearchTerm(const char* aDatasource, PRUint32 aDatasourceLen,
- const char *aProperty, PRUint32 aPropertyLen,
- const char* aMethod, PRUint32 aMethodLen,
- const char* aText, PRUint32 aTextLen)
- : datasource(aDatasource, aDatasource + aDatasourceLen)
- , property(aProperty, aProperty + aPropertyLen)
- , method(aMethod, aMethod + aMethodLen)
- {
- MOZ_COUNT_CTOR(HistorySearchTerm);
- nsresult rv;
- nsCOMPtr textToSubURI = do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv);
- if (NS_SUCCEEDED(rv))
- textToSubURI->UnEscapeAndConvert("UTF-8", PromiseFlatCString(Substring(aText, aText + aTextLen)).get(), getter_Copies(text));
- }
-
- ~HistorySearchTerm()
- {
- MOZ_COUNT_DTOR(HistorySearchTerm);
- }
-
- nsDependentCSubstring datasource; // should always be "history" ?
- nsDependentCSubstring property; // AgeInDays, Hostname, etc
- nsDependentCSubstring method; // is, isgreater, isless
- nsString text;
- rowMatchCallback match; // matching callback if needed
-};
-
-
-// closure structures for RemoveMatchingRows
-struct MatchExpirationData {
- PRTime expirationDate;
- nsSimpleGlobalHistory* history;
-};
-
-struct MatchHostData {
- const char* host;
- PRBool entireDomain; // should we delete the entire domain?
- nsSimpleGlobalHistory* history;
-};
-
-struct MatchSearchTermData {
- nsIMdbEnv* env;
- nsIMdbStore* store;
-
- HistorySearchTerm* term;
- PRBool haveClosure; // are the rest of the fields valid?
- PRTime now;
- PRInt32 intValue;
-};
-
-struct MatchQueryData {
- SearchQueryData* query;
- nsSimpleGlobalHistory* history;
-};
-
-// Used to describe what prefixes shouldn't be cut from
-// history urls when doing an autocomplete url comparison.
-struct AutocompleteExcludeData {
- PRUint32 schemePrefix;
- PRUint32 hostnamePrefix;
-};
-
-
-#pragma mark -
-
-static PRBool
-matchExpirationCallback(nsIMdbRow *row, void *aClosure)
-{
- MatchExpirationData *expires = (MatchExpirationData*)aClosure;
- return expires->history->MatchExpiration(row, &expires->expirationDate);
-}
-
-static PRBool
-matchAllCallback(nsIMdbRow *row, void *aClosure)
-{
- return PR_TRUE;
-}
-
-static PRBool
-matchHostCallback(nsIMdbRow *row, void *aClosure)
-{
- MatchHostData *hostInfo = (MatchHostData*)aClosure;
- return hostInfo->history->MatchHost(row, hostInfo);
-}
-
-static PRBool HasCell(nsIMdbEnv *aEnv, nsIMdbRow* aRow, mdb_column aCol)
-{
- mdbYarn yarn;
- mdb_err err = aRow->AliasCellYarn(aEnv, aCol, &yarn);
-
- // no cell
- if (err != 0)
- return PR_FALSE;
-
- // if we have the cell, make sure it has a value??
- return (yarn.mYarn_Fill != 0);
-}
-
-
-#pragma mark -
-
-//----------------------------------------------------------------------
-//
-// nsHistoryMdbTableEnumerator
-//
-// An nsISimpleEnumerator implementation that returns the value of
-// a column as an nsISupports. Allows for some simple selection.
-//
-
-class nsHistoryMdbTableEnumerator : public nsISimpleEnumerator
-{
-public:
- nsHistoryMdbTableEnumerator(nsSimpleGlobalHistory *aHistory,
- nsIMdbTable* aTable) : mHistory(aHistory),
- mTable(aTable)
- {
- }
-
- virtual nsresult Init (nsIMdbEnv *aEnv) {
- mEnv = aEnv;
-
- mdb_err err = mTable->GetTableRowCursor(mEnv, -1, getter_AddRefs(mCursor));
- if (err != 0)
- return NS_ERROR_FAILURE;
-
- return NS_OK;
- }
-
-protected:
- virtual ~nsHistoryMdbTableEnumerator();
-
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSISIMPLEENUMERATOR
-
-protected:
- virtual PRBool IsResult(nsIMdbRow* aRow) = 0;
-
-protected:
-
- nsCOMPtr mEnv;
- nsSimpleGlobalHistory *mHistory; // weak ptr
-
-private:
- nsCOMPtr mTable;
- nsCOMPtr mCursor;
- nsCOMPtr mCurrent;
-
-};
-
-//----------------------------------------------------------------------
-
-nsHistoryMdbTableEnumerator::~nsHistoryMdbTableEnumerator()
-{
-}
-
-
-NS_IMPL_ISUPPORTS1(nsHistoryMdbTableEnumerator, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-nsHistoryMdbTableEnumerator::HasMoreElements(PRBool* _result)
-{
- if (! mCurrent) {
- while (1) {
- mdb_pos pos;
- mdb_err err = mCursor->NextRow(mEnv, getter_AddRefs(mCurrent), &pos);
- if (err != 0) return NS_ERROR_FAILURE;
-
- // If there are no more rows, then bail.
- if (! mCurrent)
- break;
-
- // If this is a result, then stop.
- if (IsResult(mCurrent))
- break;
-
- // Otherwise, drop the ref to the row we retrieved, and continue
- // on to the next one.
- mCurrent = nsnull;
- }
- }
-
- *_result = (mCurrent != nsnull);
- return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsHistoryMdbTableEnumerator::GetNext(nsISupports** _result)
-{
- nsresult rv;
-
- PRBool hasMore;
- rv = HasMoreElements(&hasMore);
- if (NS_FAILED(rv)) return rv;
-
- if (! hasMore)
- return NS_ERROR_UNEXPECTED;
-
- nsIHistoryItem *item;
- rv = mHistory->CreateHistoryItemForRow(mCurrent, &item); // addrefs item
- if (item)
- *_result = static_cast(item);
-
- mCurrent = nsnull;
-
- return rv;
-}
-
-
-#pragma mark -
-
-class nsMdbTableAllRowsEnumerator : public nsHistoryMdbTableEnumerator
-{
-public:
- nsMdbTableAllRowsEnumerator(nsSimpleGlobalHistory* inHistory,
- nsIMdbTable* aTable,
- mdb_column inHiddenColumnToken)
- : nsHistoryMdbTableEnumerator(inHistory, aTable),
- mHiddenColumnToken(inHiddenColumnToken)
- {}
- virtual ~nsMdbTableAllRowsEnumerator()
- {}
-
-protected:
- virtual PRBool IsResult(nsIMdbRow* aRow)
- {
- // history doesn't show hidden items (autocomplete does though).
- return !HasCell(mEnv, aRow, mHiddenColumnToken);
- }
-
-protected:
- mdb_column mHiddenColumnToken;
-};
-
-
-
-#pragma mark -
-
-
-nsHistoryItem::nsHistoryItem()
-: mHistory(nsnull)
-{
-}
-
-nsHistoryItem::~nsHistoryItem()
-{
-}
-
-
-NS_IMPL_ISUPPORTS1(nsHistoryItem, nsIHistoryItem);
-
-NS_IMETHODIMP
-nsHistoryItem::InitWithRow(nsSimpleGlobalHistory* inHistory, nsIMdbEnv* inEnv, nsIMdbRow* inRow)
-{
- mHistory = inHistory;
- mEnv = inEnv;
- mRow = inRow;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetURL(nsACString& outURL)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnURL), outURL);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetReferrer(nsACString& outReferrer)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnReferrer), outReferrer);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetLastVisitDate(PRTime* outLastVisit)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnLastVisitDate), outLastVisit);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetFirstVisitDate(PRTime* outFirstVisit)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnFirstVisitDate), outFirstVisit);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetVisitCount(PRInt32* outVisitCount)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnVisitCount), outVisitCount);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetTitle(nsAString& outURL)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnTitle), outURL);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetHostname(nsACString& outURL)
-{
- return mHistory->GetRowValue(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnHostname), outURL);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetHidden(PRBool* outHidden)
-{
- return mHistory->RowHasCell(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnHidden), outHidden);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetTyped(PRBool* outTyped)
-{
- return mHistory->RowHasCell(mRow, mHistory->TokenForColumn(nsSimpleGlobalHistory::eColumnTyped), outTyped);
-}
-
-NS_IMETHODIMP
-nsHistoryItem::GetID(nsACString& outIDString)
-{
- mdbOid oid;
- mRow->GetOid(mEnv, &oid);
- outIDString = nsPrintfCString(17, "%08x_%08x", oid.mOid_Scope, oid.mOid_Id);
- return NS_OK;
-}
-
-
-#pragma mark -
-
-
-//----------------------------------------------------------------------
-//
-// nsSimpleGlobalHistory
-//
-// ctor dtor etc.
-//
-
-
-nsSimpleGlobalHistory::nsSimpleGlobalHistory()
- : mExpireDays(9), // make default be nine days
- mBatchesInProgress(0),
- mDirty(PR_FALSE),
- mPagesRemoved(PR_FALSE),
- mAutocompleteOnlyTyped(PR_FALSE),
- mEnv(nsnull),
- mStore(nsnull),
- mTable(nsnull)
-{
- LL_I2L(mFileSizeOnDisk, 0);
-
- // these strings can't be static global, because then they'd
- // be inited before XPCOM, and things will crash.
- mSchemePrefixes = new nsCStringArray(3);
- mSchemePrefixes->ParseString("http:// https:// ftp://", " ");
-
- mHostNamePrefixes = new nsCStringArray(2);
- mHostNamePrefixes->ParseString("www. ftp.", " ");
-}
-
-nsSimpleGlobalHistory::~nsSimpleGlobalHistory()
-{
- nsresult rv;
- rv = CloseDB();
-
- NS_IF_RELEASE(mTable);
- NS_IF_RELEASE(mStore);
-
- if (--gRefCnt == 0) {
- NS_IF_RELEASE(gMdbFactory);
- NS_IF_RELEASE(gPrefBranch);
- }
-
- NS_IF_RELEASE(mEnv);
- if (mSyncTimer)
- mSyncTimer->Cancel();
-
- if (mExpireTimer)
- mExpireTimer->Cancel();
-}
-
-//----------------------------------------------------------------------
-//
-// nsSimpleGlobalHistory
-//
-// nsISupports methods
-
-NS_IMPL_ADDREF(nsSimpleGlobalHistory)
-NS_IMPL_RELEASE(nsSimpleGlobalHistory)
-
-NS_INTERFACE_MAP_BEGIN(nsSimpleGlobalHistory)
- NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIGlobalHistory2, nsIGlobalHistory3)
- NS_INTERFACE_MAP_ENTRY(nsIGlobalHistory3)
- NS_INTERFACE_MAP_ENTRY(nsIBrowserHistory)
- NS_INTERFACE_MAP_ENTRY(nsIHistoryItems)
- NS_INTERFACE_MAP_ENTRY(nsIObserver)
- NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
- NS_INTERFACE_MAP_ENTRY(nsIAutoCompleteSession)
- NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIBrowserHistory)
-NS_INTERFACE_MAP_END
-
-//----------------------------------------------------------------------
-//
-// nsSimpleGlobalHistory
-//
-// nsIGlobalHistory2 methods
-//
-
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::AddURI(nsIURI *aURI, PRBool aRedirect, PRBool aTopLevel, nsIURI *aReferrer)
-{
- nsresult rv;
- NS_ENSURE_ARG_POINTER(aURI);
-
- // If history is set to expire after 0 days,
- // then it's technically disabled. Don't even
- // bother adding the page
- if (mExpireDays == 0)
- return NS_OK;
-
- // filter out unwanted URIs such as chrome: mailbox: etc
- // The model is really if we don't know differently then add which basically
- // means we are suppose to try all the things we know not to allow in and
- // then if we don't bail go on and allow it in. But here lets compare
- // against the most common case we know to allow in and go on and say yes
- // to it.
-
- PRBool isHTTP = PR_FALSE;
- PRBool isHTTPS = PR_FALSE;
-
- NS_ENSURE_SUCCESS(rv = aURI->SchemeIs("http", &isHTTP), rv);
- NS_ENSURE_SUCCESS(rv = aURI->SchemeIs("https", &isHTTPS), rv);
-
- if (!isHTTP && !isHTTPS) {
- PRBool isAbout, isImap, isNews, isMailbox, isViewSource, isChrome, isData;
-
- rv = aURI->SchemeIs("about", &isAbout);
- rv |= aURI->SchemeIs("imap", &isImap);
- rv |= aURI->SchemeIs("news", &isNews);
- rv |= aURI->SchemeIs("mailbox", &isMailbox);
- rv |= aURI->SchemeIs("view-source", &isViewSource);
- rv |= aURI->SchemeIs("chrome", &isChrome);
- rv |= aURI->SchemeIs("data", &isData);
- NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
-
- if (isAbout || isImap || isNews || isMailbox || isViewSource || isChrome || isData) {
- return NS_OK;
- }
- }
-
- rv = OpenDB();
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsCAutoString URISpec;
- rv = aURI->GetSpec(URISpec);
- NS_ENSURE_SUCCESS(rv, rv);
-
- if (URISpec.Length() > HISTORY_URI_LENGTH_MAX)
- return NS_OK;
-
- nsCAutoString referrerSpec;
- if (aReferrer) {
- rv = aReferrer->GetSpec(referrerSpec);
- NS_ENSURE_SUCCESS(rv, rv);
- }
-
- PRTime now = PR_Now();
-
- nsCOMPtr row;
- rv = FindRow(kToken_URLColumn, URISpec.get(), getter_AddRefs(row));
-
- if (NS_SUCCEEDED(rv))
- {
- // update the database, and get the old info back
- PRTime oldDate;
- PRInt32 oldCount;
- rv = AddExistingPageToDatabase(row, now, referrerSpec.get(), &oldDate, &oldCount);
- NS_ASSERTION(NS_SUCCEEDED(rv), "AddExistingPageToDatabase failed; see bug 88961");
- if (NS_FAILED(rv)) return rv;
-
- // Notify observers
- NotifyObserversItemLoaded(row, PR_FALSE);
- }
- else
- {
- rv = AddNewPageToDatabase(URISpec.get(), now, referrerSpec.get(), getter_AddRefs(row));
- NS_ASSERTION(NS_SUCCEEDED(rv), "AddNewPageToDatabase failed; see bug 88961");
- if (NS_FAILED(rv)) return rv;
-
- PRBool isJavascript;
- rv = aURI->SchemeIs("javascript", &isJavascript);
- NS_ENSURE_SUCCESS(rv, rv);
-
- if (isJavascript || aRedirect || !aTopLevel) {
- // if this is a JS url, or a redirected URI or in a frame, hide it in
- // global history so that it doesn't show up in the autocomplete
- // dropdown. AddExistingPageToDatabase has logic to override this
- // behavior for URIs which were typed. See bug 197127 and bug 161531
- // for details.
- rv = SetRowValue(row, kToken_HiddenColumn, 1);
- NS_ENSURE_SUCCESS(rv, rv);
- }
- else
- {
- // Notify observers
- NotifyObserversItemLoaded(row, PR_TRUE);
- }
- }
-
- // Store last visited page if we have the pref set accordingly
- if (aTopLevel)
- {
- PRInt32 choice = 0;
- if (NS_SUCCEEDED(gPrefBranch->GetIntPref("startup.page", &choice))) {
- if (choice != 2) {
- if (NS_SUCCEEDED(gPrefBranch->GetIntPref("windows.loadOnNewWindow", &choice))) {
- if (choice != 2) {
- gPrefBranch->GetIntPref("tabs.loadOnNewTab", &choice);
- }
- }
- }
- }
- if (choice == 2) {
- NS_ENSURE_STATE(mMetaRow);
-
- SetRowValue(mMetaRow, kToken_LastPageVisited, URISpec.get());
- }
- }
-
- SetDirty();
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::AddExistingPageToDatabase(nsIMdbRow *row,
- PRTime aDate,
- const char *aReferrer,
- PRTime *aOldDate,
- PRInt32 *aOldCount)
-{
- nsresult rv;
- nsCAutoString oldReferrer;
-
- // if the page was typed, unhide it now because it's
- // known to be valid
- if (HasCell(mEnv, row, kToken_TypedColumn)) {
- nsCAutoString URISpec;
- rv = GetRowValue(row, kToken_URLColumn, URISpec);
- NS_ENSURE_SUCCESS(rv, rv);
-
- mTypedHiddenURIs.Remove(URISpec);
- row->CutColumn(mEnv, kToken_HiddenColumn);
- }
-
- // Update last visit date.
- // First get the old date so we can update observers...
- rv = GetRowValue(row, kToken_LastVisitDateColumn, aOldDate);
- if (NS_FAILED(rv)) return rv;
-
- // get the old count, so we can update it
- rv = GetRowValue(row, kToken_VisitCountColumn, aOldCount);
- if (NS_FAILED(rv) || *aOldCount < 1)
- *aOldCount = 1; // assume we've visited at least once
-
- // ...now set the new date.
- SetRowValue(row, kToken_LastVisitDateColumn, aDate);
- SetRowValue(row, kToken_VisitCountColumn, (*aOldCount) + 1);
-
- if (aReferrer && *aReferrer) {
- rv = GetRowValue(row, kToken_ReferrerColumn, oldReferrer);
- // No referrer? Now there is!
- if (NS_FAILED(rv) || oldReferrer.IsEmpty())
- SetRowValue(row, kToken_ReferrerColumn, aReferrer);
- }
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::AddNewPageToDatabase(const char *aURL,
- PRTime aDate,
- const char *aReferrer,
- nsIMdbRow **aResult)
-{
- mdb_err err;
-
- // Create a new row
- mdbOid rowId;
- rowId.mOid_Scope = kToken_HistoryRowScope;
- rowId.mOid_Id = mdb_id(-1);
-
- NS_PRECONDITION(mTable != nsnull, "not initialized");
- if (! mTable)
- return NS_ERROR_NOT_INITIALIZED;
-
- nsCOMPtr row;
- err = mTable->NewRow(mEnv, &rowId, getter_AddRefs(row));
- if (err != 0) return NS_ERROR_FAILURE;
-
- // Set the URL
- SetRowValue(row, kToken_URLColumn, aURL);
-
- // Set the date.
- SetRowValue(row, kToken_LastVisitDateColumn, aDate);
- SetRowValue(row, kToken_FirstVisitDateColumn, aDate);
-
- // Set the referrer if there is one.
- if (aReferrer && *aReferrer)
- SetRowValue(row, kToken_ReferrerColumn, aReferrer);
-
- nsCOMPtr uri;
- NS_NewURI(getter_AddRefs(uri), nsDependentCString(aURL), nsnull, nsnull);
- nsCAutoString hostname;
- if (uri)
- uri->GetHost(hostname);
-
- SetRowValue(row, kToken_HostnameColumn, hostname.get());
-
- *aResult = row;
- NS_ADDREF(*aResult);
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::RemovePageInternal(const char *aSpec)
-{
- if (!mTable) return NS_ERROR_NOT_INITIALIZED;
- // find the old row, ignore it if we don't have it
- nsCOMPtr row;
- nsresult rv = FindRow(kToken_URLColumn, aSpec, getter_AddRefs(row));
- if (NS_FAILED(rv)) return NS_OK;
-
- // remove the row
- mdb_err err = mTable->CutRow(mEnv, row);
- NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);
-
- NotifyObserversItemRemoved(row);
-
- // not a fatal error if we can't cut all column
- err = row->CutAllColumns(mEnv);
- NS_ASSERTION(err == 0, "couldn't cut all columns");
-
- mPagesRemoved = PR_TRUE;
- SetDirty();
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::CreateHistoryItemForRow(nsIMdbRow* inRow, nsIHistoryItem** outItem)
-{
- // XXX get from array
- nsHistoryItem* thisItem = new nsHistoryItem;
- thisItem->InitWithRow(this, mEnv, inRow);
-
- NS_ADDREF(thisItem);
- *outItem = thisItem;
-
- return NS_OK;
-}
-
-#pragma mark -
-
-nsresult
-nsSimpleGlobalHistory::StartBatching()
-{
- if (mBatchesInProgress == 0)
- NotifyObserversBatchingStarted();
-
- ++mBatchesInProgress;
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::EndBatching()
-{
- --mBatchesInProgress;
- NS_ASSERTION(mBatchesInProgress >= 0, "Batch count went negative");
-
- if (mBatchesInProgress == 0)
- NotifyObserversBatchingFinished();
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversHistoryLoaded()
-{
- PRUint32 numObservers = mHistoryObservers.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = mHistoryObservers[i];
- if (historyObserver)
- historyObserver->HistoryLoaded();
- }
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversHistoryClosing()
-{
- // copy the array to avoid problems when implementors of
- // HistoryClosing() use it to remove observers
- nsCOMArray observersCopy(mHistoryObservers);
-
- PRUint32 numObservers = observersCopy.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = observersCopy[i];
- if (historyObserver)
- historyObserver->HistoryClosing();
- }
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversItemLoaded(nsIMdbRow* inRow, PRBool inFirstVisit)
-{
- if (mBatchesInProgress > 0)
- return NS_OK;
-
- nsCOMPtr historyItem;
- nsresult rv = CreateHistoryItemForRow(inRow, getter_AddRefs(historyItem));
- NS_ENSURE_SUCCESS(rv, rv);
-
- PRUint32 numObservers = mHistoryObservers.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = mHistoryObservers[i];
- if (historyObserver)
- historyObserver->ItemLoaded(historyItem, inFirstVisit);
- }
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversItemRemoved(nsIMdbRow* inRow)
-{
- if (mBatchesInProgress > 0)
- return NS_OK;
-
- // we assume that the row is still valid at this point
- nsCOMPtr historyItem;
- nsresult rv = CreateHistoryItemForRow(inRow, getter_AddRefs(historyItem));
- NS_ENSURE_SUCCESS(rv, rv);
-
- PRUint32 numObservers = mHistoryObservers.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = mHistoryObservers[i];
- if (historyObserver)
- historyObserver->ItemRemoved(historyItem);
- }
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversItemTitleChanged(nsIMdbRow* inRow)
-{
- if (mBatchesInProgress > 0)
- return NS_OK;
-
- // we assume that the row is still valid at this point
- nsCOMPtr historyItem;
- nsresult rv = CreateHistoryItemForRow(inRow, getter_AddRefs(historyItem));
- NS_ENSURE_SUCCESS(rv, rv);
-
- PRUint32 numObservers = mHistoryObservers.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = mHistoryObservers[i];
- if (historyObserver)
- historyObserver->ItemTitleChanged(historyItem);
- }
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversBatchingStarted()
-{
- PRUint32 numObservers = mHistoryObservers.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = mHistoryObservers[i];
- if (historyObserver)
- historyObserver->StartBatchChanges();
- }
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::NotifyObserversBatchingFinished()
-{
- PRUint32 numObservers = mHistoryObservers.Count();
-
- for (PRUint32 i = 0; i < numObservers; i ++)
- {
- nsIHistoryObserver* historyObserver = mHistoryObservers[i];
- if (historyObserver)
- historyObserver->EndBatchChanges();
- }
-
- return NS_OK;
-}
-
-#pragma mark -
-
-nsresult
-nsSimpleGlobalHistory::SetRowValue(nsIMdbRow *aRow, mdb_column aCol, const PRTime& aValue)
-{
- mdb_err err;
- nsCAutoString val;
- val.AppendInt(aValue);
-
- mdbYarn yarn = { (void *)val.get(), val.Length(), val.Length(), 0, 0, nsnull };
-
- err = aRow->AddColumn(mEnv, aCol, &yarn);
-
- if ( err != 0 ) return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::SetRowValue(nsIMdbRow *aRow, mdb_column aCol,
- const PRUnichar* aValue)
-{
- mdb_err err;
-
- PRInt32 len = (nsCRT::strlen(aValue) * sizeof(PRUnichar));
- PRUnichar *swapval = nsnull;
-
- // eventually turn this on when we're confident in mork's ability
- // to handle yarn forms properly
-#if 0
- NS_ConvertUTF16toUTF8 utf8Value(aValue);
- printf("Storing utf8 value %s\n", utf8Value.get());
- mdbYarn yarn = { (void *)utf8Value.get(), utf8Value.Length(), utf8Value.Length(), 0, 1, nsnull };
-#else
-
- if (mReverseByteOrder) {
- // The file is other-endian. Byte-swap the value.
- swapval = (PRUnichar *)malloc(len);
- if (!swapval)
- return NS_ERROR_OUT_OF_MEMORY;
- SwapBytes(aValue, swapval, len / sizeof(PRUnichar));
- aValue = swapval;
- }
- mdbYarn yarn = { (void *)aValue, len, len, 0, 0, nsnull };
-
-#endif
- err = aRow->AddColumn(mEnv, aCol, &yarn);
- if (swapval)
- free(swapval);
- if (err != 0) return NS_ERROR_FAILURE;
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::SetRowValue(nsIMdbRow *aRow, mdb_column aCol,
- const char* aValue)
-{
- mdb_err err;
- PRInt32 len = PL_strlen(aValue);
- mdbYarn yarn = { (void*) aValue, len, len, 0, 0, nsnull };
- err = aRow->AddColumn(mEnv, aCol, &yarn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::SetRowValue(nsIMdbRow *aRow, mdb_column aCol, const PRInt32 aValue)
-{
- mdb_err err;
-
- nsCAutoString buf; buf.AppendInt(aValue);
- mdbYarn yarn = { (void *)buf.get(), buf.Length(), buf.Length(), 0, 0, nsnull };
-
- err = aRow->AddColumn(mEnv, aCol, &yarn);
-
- if (err != 0) return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::GetRowValue(nsIMdbRow *aRow, mdb_column aCol,
- nsAString& aResult)
-{
- mdb_err err;
-
- mdbYarn yarn;
- err = aRow->AliasCellYarn(mEnv, aCol, &yarn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- aResult.Truncate(0);
- if (!yarn.mYarn_Fill)
- return NS_OK;
-
- switch (yarn.mYarn_Form) {
- case 0: // unicode
- if (mReverseByteOrder) {
- // The file is other-endian; we must byte-swap the result.
- PRUnichar *swapval;
- int len = yarn.mYarn_Fill / sizeof(PRUnichar);
- swapval = (PRUnichar *)malloc(yarn.mYarn_Fill);
- if (!swapval)
- return NS_ERROR_OUT_OF_MEMORY;
- SwapBytes((const PRUnichar *)yarn.mYarn_Buf, swapval, len);
- aResult.Assign(swapval, len);
- free(swapval);
- }
- else
- aResult.Assign((const PRUnichar *)yarn.mYarn_Buf, yarn.mYarn_Fill/sizeof(PRUnichar));
- break;
-
- // eventually we'll be supporting this in SetRowValue()
- case 1: // UTF8
- CopyUTF8toUTF16(Substring((const char*)yarn.mYarn_Buf,
- (const char*)yarn.mYarn_Buf + yarn.mYarn_Fill),
- aResult);
- break;
-
- default:
- return NS_ERROR_UNEXPECTED;
- }
- return NS_OK;
-}
-
-// Copy an array of 16-bit values, reversing the byte order.
-void
-nsSimpleGlobalHistory::SwapBytes(const PRUnichar *source, PRUnichar *dest,
- PRInt32 aLen)
-{
- PRUint16 c;
- const PRUnichar *inp;
- PRUnichar *outp;
- PRInt32 i;
-
- inp = source;
- outp = dest;
- for (i = 0; i < aLen; i++) {
- c = *inp++;
- *outp++ = (((c >> 8) & 0xff) | (c << 8));
- }
- return;
-}
-
-nsresult
-nsSimpleGlobalHistory::GetRowValue(nsIMdbRow *aRow, mdb_column aCol,
- PRTime *aResult)
-{
- mdb_err err;
-
- mdbYarn yarn;
- err = aRow->AliasCellYarn(mEnv, aCol, &yarn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- *aResult = LL_ZERO;
-
- if (!yarn.mYarn_Fill || !yarn.mYarn_Buf)
- return NS_OK;
-
- long long ld;
- PR_sscanf((const char*)yarn.mYarn_Buf, "%lld", &ld);
- *aResult = ld;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::GetRowValue(nsIMdbRow *aRow, mdb_column aCol,
- PRInt32 *aResult)
-{
- mdb_err err;
-
- mdbYarn yarn;
- err = aRow->AliasCellYarn(mEnv, aCol, &yarn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- if (yarn.mYarn_Buf)
- *aResult = atoi((char *)yarn.mYarn_Buf);
- else
- *aResult = 0;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::GetRowValue(nsIMdbRow *aRow, mdb_column aCol,
- nsACString& aResult)
-{
- mdb_err err;
-
- mdbYarn yarn;
- err = aRow->AliasCellYarn(mEnv, aCol, &yarn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- const char* startPtr = (const char*)yarn.mYarn_Buf;
- if (startPtr)
- aResult.Assign(Substring(startPtr, startPtr + yarn.mYarn_Fill));
- else
- aResult.Truncate();
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::RowHasCell(nsIMdbRow *aRow, mdb_column aCol, PRBool* aResult)
-{
- *aResult = HasCell(mEnv, aRow, aCol);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::GetCount(PRUint32* aCount)
-{
- NS_ENSURE_ARG_POINTER(aCount);
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
- if (!mTable) return NS_ERROR_FAILURE;
-
- mdb_err err = mTable->GetCount(mEnv, aCount);
- return (err == 0) ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::SetPageTitle(nsIURI *aURI, const nsAString& aTitle)
-{
- nsresult rv;
- NS_ENSURE_ARG_POINTER(aURI);
-
- nsAutoString titleString(StringHead(aTitle, HISTORY_TITLE_LENGTH_MAX));
-
- // skip about: URIs to avoid reading in the db (about:blank, especially)
- PRBool isAbout;
- rv = aURI->SchemeIs("about", &isAbout);
- NS_ENSURE_SUCCESS(rv, rv);
- if (isAbout) return NS_OK;
-
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
-
- nsCAutoString URISpec;
- rv = aURI->GetSpec(URISpec);
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsCOMPtr row;
- rv = FindRow(kToken_URLColumn, URISpec.get(), getter_AddRefs(row));
-
- // if the row doesn't exist, we silently succeed
- if (rv == NS_ERROR_NOT_AVAILABLE) return NS_OK;
- NS_ENSURE_SUCCESS(rv, rv);
-
- // Get the old title so we can notify observers
- nsAutoString oldtitle;
- rv = GetRowValue(row, kToken_NameColumn, oldtitle);
- if (NS_FAILED(rv)) return rv;
-
- SetRowValue(row, kToken_NameColumn, titleString.get());
-
- // ...and update observers
- NotifyObserversItemTitleChanged(row);
-
- SetDirty();
-
- return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::RemovePage(nsIURI *aURI)
-{
- nsCAutoString spec;
- nsresult rv = aURI->GetSpec(spec);
- if (NS_SUCCEEDED(rv))
- rv = RemovePageInternal(spec.get());
- return rv;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::RemovePagesFromHost(const nsACString &aHost, PRBool aEntireDomain)
-{
- const nsCString &host = PromiseFlatCString(aHost);
-
- MatchHostData hostInfo;
- hostInfo.history = this;
- hostInfo.entireDomain = aEntireDomain;
- hostInfo.host = host.get();
-
- nsresult rv = RemoveMatchingRows(matchHostCallback, (void *)&hostInfo, PR_TRUE);
- if (NS_FAILED(rv)) return rv;
-
- mPagesRemoved = PR_TRUE;
- SetDirty();
-
- return NS_OK;
-}
-
-PRBool
-nsSimpleGlobalHistory::MatchExpiration(nsIMdbRow *row, PRTime* expirationDate)
-{
- nsresult rv;
-
- // hidden and typed urls always match because they're invalid,
- // so we want to expire them asap. (if they were valid, they'd
- // have been unhidden -- see AddExistingPageToDatabase)
- if (HasCell(mEnv, row, kToken_HiddenColumn) && HasCell(mEnv, row, kToken_TypedColumn))
- return PR_TRUE;
-
- PRTime lastVisitedTime;
- rv = GetRowValue(row, kToken_LastVisitDateColumn, &lastVisitedTime);
-
- if (NS_FAILED(rv))
- return PR_FALSE;
-
- PRBool matches = LL_CMP(lastVisitedTime, <, (*expirationDate));
-#if 0
- if (matches)
- {
- nsCAutoString url;
- GetRowValue(row, kToken_URLColumn, url);
- printf(" Removing history row for %s\n", url.get());
- }
-#endif
- return matches;
-}
-
-
-
-PRBool
-nsSimpleGlobalHistory::MatchHost(nsIMdbRow *aRow,
- MatchHostData *hostInfo)
-{
- mdb_err err;
- nsresult rv;
-
- mdbYarn yarn;
- err = aRow->AliasCellYarn(mEnv, kToken_URLColumn, &yarn);
- if (err != 0) return PR_FALSE;
-
- nsCOMPtr uri;
- // do smart zero-termination
- const char* startPtr = (const char *)yarn.mYarn_Buf;
- rv = NS_NewURI(getter_AddRefs(uri),
- Substring(startPtr, startPtr + yarn.mYarn_Fill));
- if (NS_FAILED(rv)) return PR_FALSE;
-
- nsCAutoString urlHost;
- rv = uri->GetHost(urlHost);
- if (NS_FAILED(rv)) return PR_FALSE;
-
- if (PL_strcmp(urlHost.get(), hostInfo->host) == 0)
- return PR_TRUE;
-
- // now try for a domain match, if necessary
- if (hostInfo->entireDomain) {
- // do a reverse-search to match the end of the string
- const char *domain = PL_strrstr(urlHost.get(), hostInfo->host);
-
- // now verify that we're matching EXACTLY the domain, and
- // not some random string inside the hostname
- if (domain && (PL_strcmp(domain, hostInfo->host) == 0))
- return PR_TRUE;
- }
-
- return PR_FALSE;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::RemoveAllPages()
-{
- nsresult rv;
-
- rv = RemoveMatchingRows(matchAllCallback, nsnull, PR_FALSE);
- if (NS_FAILED(rv)) return rv;
-
- // Reset the file byte order.
- rv = InitByteOrder(PR_TRUE);
- if (NS_FAILED(rv)) return rv;
-
- return Commit(kCompressCommit);
-}
-
-nsresult
-nsSimpleGlobalHistory::RemoveMatchingRows(rowMatchCallback aMatchFunc,
- void *aClosure,
- PRBool inNotify)
-{
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
- if (!mTable) return NS_OK;
-
- mdb_err err;
- mdb_count count;
- err = mTable->GetCount(mEnv, &count);
- if (err != 0) return NS_ERROR_FAILURE;
-
- if (!inNotify)
- StartBatching();
-
- // Begin the batch.
- int marker;
- err = mTable->StartBatchChangeHint(mEnv, &marker);
- NS_ASSERTION(err == 0, "unable to start batch");
- if (err != 0) return NS_ERROR_FAILURE;
-
- // XXX from here until end batch, no early returns!
- for (mdb_pos pos = count - 1; pos >= 0; --pos)
- {
- nsCOMPtr row;
- err = mTable->PosToRow(mEnv, pos, getter_AddRefs(row));
- NS_ASSERTION(err == 0, "unable to get row");
- if (err != 0)
- break;
-
- NS_ASSERTION(row != nsnull, "no row");
- if (! row)
- continue;
-
- // now we actually do the match. If this row doesn't match, loop again
- if (!(aMatchFunc)(row, aClosure))
- continue;
-
- if (inNotify)
- NotifyObserversItemRemoved(row);
-
-#if 0
- nsCAutoString url;
- GetRowValue(row, kToken_URLColumn, url);
- printf("Removing row %s\n", url.get());
-#endif
-
- // Officially cut the row *now*, before notifying any observers:
- // that way, any re-entrant calls won't find the row.
- err = mTable->CutRow(mEnv, row);
- NS_ASSERTION(err == 0, "couldn't cut row");
- if (err != 0)
- continue;
-
- // possibly avoid leakage
- err = row->CutAllColumns(mEnv);
- NS_ASSERTION(err == 0, "couldn't cut all columns");
- // we'll notify regardless of whether we could successfully
- // CutAllColumns or not.
- // XXX notify?
- }
-
- // Finish the batch.
- err = mTable->EndBatchChangeHint(mEnv, &marker);
- NS_ASSERTION(err == 0, "error ending batch");
-
- if (!inNotify)
- EndBatching();
-
- return ( err == 0) ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::IsVisited(nsIURI* aURI, PRBool *_retval)
-{
- NS_ENSURE_ARG_POINTER(aURI);
-
- nsresult rv;
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_NOT_INITIALIZED);
-
- nsCAutoString URISpec;
- rv = aURI->GetSpec(URISpec);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = FindRow(kToken_URLColumn, URISpec.get(), nsnull);
- *_retval = NS_SUCCEEDED(rv);
-
- // Hidden, typed URIs haven't really been visited yet. They've only
- // been typed in and the actual load hasn't happened yet. We maintain
- // the list of hidden+typed URIs in memory in mTypedHiddenURIs because
- // the list will usually be small and checking the actual Mork row
- // would require several dynamic memory allocations.
- if (*_retval && mTypedHiddenURIs.Contains(URISpec))
- {
- *_retval = PR_FALSE;
- }
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::GetLastPageVisited(nsACString& _retval)
-{
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
-
- NS_ENSURE_STATE(mMetaRow);
-
- mdb_err err = GetRowValue(mMetaRow, kToken_LastPageVisited, _retval);
- NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);
-
- return NS_OK;
-}
-
-#pragma mark -
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::GetMaxItemCount(PRUint32 *outCount)
-{
- NS_ENSURE_ARG_POINTER(outCount);
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
- if (!mTable) return NS_ERROR_FAILURE;
-
- mdb_err err = mTable->GetCount(mEnv, outCount);
- return (err == 0) ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::GetItemEnumerator(nsISimpleEnumerator** outEnumerator)
-{
- NS_ENSURE_ARG_POINTER(outEnumerator);
- *outEnumerator = nsnull;
-
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
- if (!mTable) return NS_ERROR_FAILURE;
-
- nsMdbTableAllRowsEnumerator* allRowsEnum
- = new nsMdbTableAllRowsEnumerator(this, mTable, kToken_HiddenColumn);
-
- if (!allRowsEnum)
- return NS_ERROR_FAILURE;
-
- nsresult rv = allRowsEnum->Init(mEnv);
- if (NS_FAILED(rv)) {
- delete allRowsEnum;
- return rv;
- }
-
- NS_ADDREF(*outEnumerator = allRowsEnum);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::Flush()
-{
- Sync();
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::AddObserver(nsIHistoryObserver* inObserver)
-{
- if (mHistoryObservers.IndexOfObject(inObserver) == -1)
- return mHistoryObservers.AppendObject(inObserver);
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::RemoveObserver(nsIHistoryObserver* inObserver)
-{
- mHistoryObservers.RemoveObject(inObserver);
- return NS_OK;
-}
-
-
-#pragma mark -
-
-// Set the byte order in the history file. The given string value should
-// be either "BE" (big-endian) or "LE" (little-endian).
-nsresult
-nsSimpleGlobalHistory::SaveByteOrder(const char *aByteOrder)
-{
- if (strcmp(aByteOrder, "BE") != 0 && strcmp(aByteOrder, "LE") != 0) {
- NS_WARNING("Invalid byte order argument.");
- return NS_ERROR_INVALID_ARG;
- }
- NS_ENSURE_STATE(mMetaRow);
-
- mdb_err err = SetRowValue(mMetaRow, kToken_ByteOrder, aByteOrder);
- NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);
-
- return NS_OK;
-}
-
-// Get the file byte order.
-nsresult
-nsSimpleGlobalHistory::GetByteOrder(nsACString & aRetVal)
-{
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
- NS_ENSURE_STATE(mMetaRow);
-
- nsCAutoString byteOrder;
- mdb_err err = GetRowValue(mMetaRow, kToken_ByteOrder, byteOrder);
- NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);
-
- aRetVal.Assign(byteOrder);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::HidePage(nsIURI *aURI)
-{
- nsresult rv;
- NS_ENSURE_ARG_POINTER(aURI);
-
- nsCAutoString URISpec;
- rv = aURI->GetSpec(URISpec);
- NS_ENSURE_SUCCESS(rv, rv);
-
- if (URISpec.Length() > HISTORY_URI_LENGTH_MAX)
- return NS_OK;
-
- nsCOMPtr row;
-
- rv = FindRow(kToken_URLColumn, URISpec.get(), getter_AddRefs(row));
-
- if (NS_FAILED(rv)) {
- // it hasn't been visited yet, but if one ever comes in, we need
- // to hide it when it is visited
- rv = AddURI(aURI, PR_FALSE, PR_FALSE, nsnull);
- if (NS_FAILED(rv)) return rv;
-
- rv = FindRow(kToken_URLColumn, URISpec.get(), getter_AddRefs(row));
- if (NS_FAILED(rv)) return rv;
- }
-
- rv = SetRowValue(row, kToken_HiddenColumn, 1);
- if (NS_FAILED(rv)) return rv;
-
- // now pretend as if this row was deleted (notify)
-
- SetDirty();
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::MarkPageAsTyped(nsIURI *aURI)
-{
- nsCAutoString spec;
- nsresult rv = aURI->GetSpec(spec);
- if (NS_FAILED(rv)) return rv;
-
- if (spec.Length() > HISTORY_URI_LENGTH_MAX)
- return NS_OK;
-
- nsCOMPtr row;
- rv = FindRow(kToken_URLColumn, spec.get(), getter_AddRefs(row));
- if (NS_FAILED(rv))
- {
- rv = AddNewPageToDatabase(spec.get(), PR_Now(), nsnull, getter_AddRefs(row));
- NS_ENSURE_SUCCESS(rv, rv);
-
- // We don't know if this is a valid URI yet. Hide it until it finishes
- // loading.
- SetRowValue(row, kToken_HiddenColumn, 1);
- mTypedHiddenURIs.Put(spec);
- }
-
- rv = SetRowValue(row, kToken_TypedColumn, 1);
- if (NS_FAILED(rv)) return rv;
-
- SetDirty();
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::AddDocumentRedirect(nsIChannel *aOldChannel,
- nsIChannel *aNewChannel,
- PRInt32 aFlags,
- PRBool aTopLevel)
-{
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::SetURIGeckoFlags(nsIURI *aURI, PRUint32 aFlags)
-{
- nsCAutoString spec;
- nsresult rv = aURI->GetSpec(spec);
- if (NS_FAILED(rv)) return rv;
-
- nsCOMPtr row;
- rv = FindRow(kToken_URLColumn, spec.get(), getter_AddRefs(row));
- if (NS_FAILED(rv)) {
- return rv;
- }
-
- rv = SetRowValue(row, kToken_GeckoFlagsColumn, (PRInt32)aFlags);
- SetDirty();
- return rv;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::GetURIGeckoFlags(nsIURI *aURI, PRUint32* aFlags)
-{
- nsCAutoString spec;
- nsresult rv = aURI->GetSpec(spec);
- if (NS_FAILED(rv)) return rv;
-
- nsCOMPtr row;
- rv = FindRow(kToken_URLColumn, spec.get(), getter_AddRefs(row));
- if (NS_FAILED(rv)) {
- return rv;
- }
-
- if (!HasCell(mEnv, row, kToken_GeckoFlagsColumn))
- return NS_ERROR_FAILURE;
-
- PRInt32 val;
- mdb_err err = GetRowValue(row, kToken_GeckoFlagsColumn, &val);
- NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);
- *aFlags = val;
- return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// nsGlobalHistory
-//
-// Miscellaneous implementation methods
-//
-
-nsresult
-nsSimpleGlobalHistory::Init()
-{
- nsresult rv;
-
- // we'd like to get this pref when we need it, but at that point,
- // we can't get the pref service. register a pref observer so we update
- // if the pref changes
-
- if (!gPrefBranch)
- {
- nsCOMPtr prefs = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = prefs->GetBranch(PREF_BRANCH_BASE, &gPrefBranch);
- NS_ENSURE_SUCCESS(rv, rv);
- }
-
- gPrefBranch->GetIntPref(PREF_BROWSER_HISTORY_EXPIRE_DAYS, &mExpireDays);
- gPrefBranch->GetBoolPref(PREF_AUTOCOMPLETE_ONLY_TYPED, &mAutocompleteOnlyTyped);
- nsCOMPtr pbi = do_QueryInterface(gPrefBranch);
- if (pbi) {
- pbi->AddObserver(PREF_AUTOCOMPLETE_ONLY_TYPED, this, PR_FALSE);
- pbi->AddObserver(PREF_BROWSER_HISTORY_EXPIRE_DAYS, this, PR_FALSE);
- }
-
- if (gRefCnt++ == 0)
- {
- }
-
- // register to observe profile changes
- nsCOMPtr observerService =
- do_GetService("@mozilla.org/observer-service;1", &rv);
- NS_ASSERTION(observerService, "failed to get observer service");
- if (observerService) {
- observerService->AddObserver(this, "profile-before-change", PR_TRUE);
- observerService->AddObserver(this, "profile-do-change", PR_TRUE);
- }
-
- mTypedHiddenURIs.Init(3);
-
- return NS_OK;
-}
-
-
-nsresult
-nsSimpleGlobalHistory::OpenDB()
-{
- nsresult rv;
-
- if (mStore) return NS_OK;
-
- nsCOMPtr historyFile;
- rv = NS_GetSpecialDirectory(NS_APP_HISTORY_50_FILE, getter_AddRefs(historyFile));
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsCOMPtr factoryfactory = do_GetService(NS_MORK_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = factoryfactory->GetMdbFactory(&gMdbFactory);
- NS_ENSURE_SUCCESS(rv, rv);
-
- mdb_err err;
-
- err = gMdbFactory->MakeEnv(nsnull, &mEnv);
- mEnv->SetAutoClear(PR_TRUE);
- NS_ASSERTION((err == 0), "unable to create mdb env");
- if (err != 0) return NS_ERROR_FAILURE;
-
- // MDB requires native file paths
-
- nsCAutoString filePath;
- rv = historyFile->GetNativePath(filePath);
- NS_ENSURE_SUCCESS(rv, rv);
-
- PRBool exists = PR_TRUE;
- historyFile->Exists(&exists);
-
- if (exists && NS_FAILED(rv = OpenExistingFile(gMdbFactory, filePath.get())))
- {
- // we couldn't open the file, so it might be corrupt.
- // attempt to delete the file, but ignore the error
- NS_ASSERTION(0, "Failed to open history.dat file");
-#if DEBUG
- nsCOMPtr fileCopy;
- historyFile->Clone(getter_AddRefs(fileCopy));
- fileCopy->SetLeafName(NS_LITERAL_STRING("history_BAD.dat"));
- fileCopy->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0600);
- nsString uniqueFileName;
- fileCopy->GetLeafName(uniqueFileName);
- historyFile->MoveTo(nsnull, uniqueFileName);
-#else
- historyFile->Remove(PR_FALSE);
-#endif
- // generate a new history file.
- exists = PR_FALSE;
- }
-
- if (!exists)
- rv = OpenNewFile(gMdbFactory, filePath.get());
-
- NS_ENSURE_SUCCESS(rv, rv);
-
- // get the initial filesize. Used in Commit() to determine type of commit.
- rv = historyFile->GetFileSize(&mFileSizeOnDisk);
- if (NS_FAILED(rv)) {
- LL_I2L(mFileSizeOnDisk, 0);
- }
-
- // See if we need to byte-swap.
- InitByteOrder(PR_FALSE);
-
- NotifyObserversHistoryLoaded();
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::OpenExistingFile(nsIMdbFactory *factory, const char *filePath)
-{
- mdb_err err;
- nsresult rv;
- mdb_bool canopen = 0;
- mdbYarn outfmt = { nsnull, 0, 0, 0, 0, nsnull };
-
- nsIMdbHeap* dbHeap = 0;
- mdb_bool dbFrozen = mdbBool_kFalse; // not readonly, we want modifiable
- nsCOMPtr oldFile; // ensures file is released
- err = factory->OpenOldFile(mEnv, dbHeap, filePath,
- dbFrozen, getter_AddRefs(oldFile));
-
- // don't assert, the file might just not be there
- if ((err !=0) || !oldFile) return NS_ERROR_FAILURE;
-
- err = factory->CanOpenFilePort(mEnv, oldFile, // the file to investigate
- &canopen, &outfmt);
-
- // XXX possible that format out of date, in which case we should
- // just re-write the file.
- if ((err !=0) || !canopen) return NS_ERROR_FAILURE;
-
- nsIMdbThumb* thumb = nsnull;
- mdbOpenPolicy policy = { { 0, 0 }, 0, 0 };
-
- err = factory->OpenFileStore(mEnv, dbHeap, oldFile, &policy, &thumb);
- if ((err !=0) || !thumb) return NS_ERROR_FAILURE;
-
- mdb_count total;
- mdb_count current;
- mdb_bool done;
- mdb_bool broken;
-
- do {
- err = thumb->DoMore(mEnv, &total, ¤t, &done, &broken);
- } while ((err == 0) && !broken && !done);
-
- if ((err == 0) && done) {
- err = factory->ThumbToOpenStore(mEnv, thumb, &mStore);
- }
-
- NS_IF_RELEASE(thumb);
-
- if (err != 0) return NS_ERROR_FAILURE;
-
- rv = CreateTokens();
-
- NS_ENSURE_SUCCESS(rv, rv);
-
- mdbOid oid = { kToken_HistoryRowScope, 1 };
- err = mStore->GetTable(mEnv, &oid, &mTable);
- NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);
- if (!mTable) {
- NS_WARNING("Your history file is somehow corrupt.. deleting it.");
- return NS_ERROR_FAILURE;
- }
-
- err = mTable->GetMetaRow(mEnv, &oid, nsnull, getter_AddRefs(mMetaRow));
- if (err != 0)
- NS_WARNING("Could not get meta row\n");
-
- CheckHostnameEntries();
-
- if (err != 0) return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::OpenNewFile(nsIMdbFactory *factory, const char *filePath)
-{
- nsresult rv;
- mdb_err err;
-
- nsIMdbHeap* dbHeap = 0;
- nsCOMPtr newFile; // ensures file is released
- err = factory->CreateNewFile(mEnv, dbHeap, filePath,
- getter_AddRefs(newFile));
-
- if ((err != 0) || !newFile) return NS_ERROR_FAILURE;
-
- mdbOpenPolicy policy = { { 0, 0 }, 0, 0 };
- err = factory->CreateNewFileStore(mEnv, dbHeap, newFile, &policy, &mStore);
-
- if (err != 0) return NS_ERROR_FAILURE;
-
- rv = CreateTokens();
- NS_ENSURE_SUCCESS(rv, rv);
-
- // Create the one and only table in the history db
- err = mStore->NewTable(mEnv, kToken_HistoryRowScope, kToken_HistoryKind, PR_TRUE, nsnull, &mTable);
- if (err != 0) return NS_ERROR_FAILURE;
- if (!mTable) return NS_ERROR_FAILURE;
-
- // Create the meta row.
- mdbOid oid = { kToken_HistoryRowScope, 1 };
- err = mTable->GetMetaRow(mEnv, &oid, nsnull, getter_AddRefs(mMetaRow));
- if (err != 0)
- NS_WARNING("Could not get meta row\n");
-
- // Force a commit now to get it written out.
- nsCOMPtr thumb;
- err = mStore->LargeCommit(mEnv, getter_AddRefs(thumb));
- if (err != 0) return NS_ERROR_FAILURE;
-
- mdb_count total;
- mdb_count current;
- mdb_bool done;
- mdb_bool broken;
-
- do {
- err = thumb->DoMore(mEnv, &total, ¤t, &done, &broken);
- } while ((err == 0) && !broken && !done);
-
- if ((err != 0) || !done) return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-// Set the history file byte order if necessary, and determine if
-// we need to byte-swap Unicode values.
-// If the force argument is true, the file byte order will be set
-// to that of this machine.
-nsresult
-nsSimpleGlobalHistory::InitByteOrder(PRBool aForce)
-{
-#ifdef IS_LITTLE_ENDIAN
- NS_NAMED_LITERAL_CSTRING(machine_byte_order, "LE");
-#endif
-#ifdef IS_BIG_ENDIAN
- NS_NAMED_LITERAL_CSTRING(machine_byte_order, "BE");
-#endif
- nsCAutoString fileByteOrder;
- nsresult rv = NS_OK;
-
- if (!aForce)
- rv = GetByteOrder(fileByteOrder);
- if (aForce || NS_FAILED(rv) ||
- !(fileByteOrder.EqualsLiteral("BE") ||
- fileByteOrder.EqualsLiteral("LE")))
- {
- // Byte order is not yet set, or needs to be reset; initialize it.
- mReverseByteOrder = PR_FALSE;
- rv = SaveByteOrder(machine_byte_order.get());
- if (NS_FAILED(rv))
- return rv;
- }
- else
- mReverseByteOrder = !fileByteOrder.Equals(machine_byte_order);
-
- return NS_OK;
-}
-
-// for each row, we need to parse out the hostname from the url
-// then store it in a column
-nsresult
-nsSimpleGlobalHistory::CheckHostnameEntries()
-{
- nsresult rv = NS_OK;
-
- mdb_err err;
-
- nsCOMPtr cursor;
- nsCOMPtr row;
-
- err = mTable->GetTableRowCursor(mEnv, -1, getter_AddRefs(cursor));
- if (err != 0) return NS_ERROR_FAILURE;
-
- int marker;
- err = mTable->StartBatchChangeHint(mEnv, &marker);
- NS_ASSERTION(err == 0, "unable to start batch");
- if (err != 0) return NS_ERROR_FAILURE;
-
- mdb_pos pos;
- err = cursor->NextRow(mEnv, getter_AddRefs(row), &pos);
- if (err != 0) return NS_ERROR_FAILURE;
-
- // comment out this code to rebuild the hostlist at startup
-#if 1
- // bail early if the first row has a hostname
- if (row) {
- nsCAutoString hostname;
- rv = GetRowValue(row, kToken_HostnameColumn, hostname);
- if (NS_SUCCEEDED(rv) && !hostname.IsEmpty())
- return NS_OK;
- }
-#endif
-
- // cached variables used in the loop
- nsCAutoString url;
- nsCAutoString hostname;
-
- nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID);
- if (!ioService) return NS_ERROR_FAILURE;
-
-
- while (row) {
-#if 0
- rv = GetRowValue(row, kToken_URLColumn, url);
- if (NS_FAILED(rv)) break;
-
- ioService->ExtractUrlPart(url, nsIIOService::url_Host, 0, 0, getter_Copies(hostname));
-
- SetRowValue(row, kToken_HostnameColumn, hostname);
-
-#endif
-
- // to be turned on when we're confident in mork's ability
- // to handle yarn forms properly
-#if 0
- nsAutoString title;
- rv = GetRowValue(row, kToken_NameColumn, title);
- // reencode back into UTF8
- if (NS_SUCCEEDED(rv))
- SetRowValue(row, kToken_NameColumn, title.get());
-#endif
- cursor->NextRow(mEnv, getter_AddRefs(row), &pos);
- }
-
- // Finish the batch.
- err = mTable->EndBatchChangeHint(mEnv, &marker);
- NS_ASSERTION(err == 0, "error ending batch");
-
- return rv;
-}
-
-nsresult
-nsSimpleGlobalHistory::CreateTokens()
-{
- mdb_err err;
-
- NS_PRECONDITION(mStore != nsnull, "not initialized");
- if (! mStore)
- return NS_ERROR_NOT_INITIALIZED;
-
- err = mStore->StringToToken(mEnv, "ns:history:db:row:scope:history:all", &kToken_HistoryRowScope);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "ns:history:db:table:kind:history", &kToken_HistoryKind);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "URL", &kToken_URLColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "Referrer", &kToken_ReferrerColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "LastVisitDate", &kToken_LastVisitDateColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "FirstVisitDate", &kToken_FirstVisitDateColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "VisitCount", &kToken_VisitCountColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "Name", &kToken_NameColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "Hostname", &kToken_HostnameColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "Hidden", &kToken_HiddenColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "Typed", &kToken_TypedColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- err = mStore->StringToToken(mEnv, "GeckoFlags", &kToken_GeckoFlagsColumn);
- if (err != 0) return NS_ERROR_FAILURE;
-
- // meta-data tokens
- err = mStore->StringToToken(mEnv, "LastPageVisited", &kToken_LastPageVisited);
- err = mStore->StringToToken(mEnv, "ByteOrder", &kToken_ByteOrder);
-
- return NS_OK;
-}
-
-
-nsresult
-nsSimpleGlobalHistory::Commit(eCommitType commitType)
-{
- if (!mStore || !mTable)
- return NS_OK;
-
- nsresult err = NS_OK;
- nsCOMPtr thumb;
-
- if (commitType == kLargeCommit || commitType == kSessionCommit)
- {
- mdb_percent outActualWaste = 0;
- mdb_bool outShould;
- if (mStore)
- {
- // check how much space would be saved by doing a compress commit.
- // If it's more than 30%, go for it.
- // N.B. - I'm not sure this calls works in Mork for all cases.
- err = mStore->ShouldCompress(mEnv, 30, &outActualWaste, &outShould);
- if (NS_SUCCEEDED(err) && outShould)
- {
- commitType = kCompressCommit;
- }
- else
- {
- mdb_count count;
- err = mTable->GetCount(mEnv, &count);
- // Since Mork's shouldCompress doesn't work, we need to look
- // at the file size and the number of rows, and make a stab
- // at guessing if we've got a lot of deleted rows. The file
- // size is the size when we opened the db, and we really want
- // it to be the size after we've written out the file,
- // but I think this is a good enough approximation.
- if (count > 0)
- {
- PRInt64 numRows;
- PRInt64 bytesPerRow;
- PRInt64 desiredAvgRowSize;
-
- LL_UI2L(numRows, count);
- LL_DIV(bytesPerRow, mFileSizeOnDisk, numRows);
- LL_I2L(desiredAvgRowSize, 400);
- if (LL_CMP(bytesPerRow, >, desiredAvgRowSize))
- commitType = kCompressCommit;
- }
- }
- }
- }
-
- switch (commitType)
- {
- case kLargeCommit:
- err = mStore->LargeCommit(mEnv, getter_AddRefs(thumb));
- break;
- case kSessionCommit:
- err = mStore->SessionCommit(mEnv, getter_AddRefs(thumb));
- break;
- case kCompressCommit:
- err = mStore->CompressCommit(mEnv, getter_AddRefs(thumb));
- break;
- }
- if (err == 0) {
- mdb_count total;
- mdb_count current;
- mdb_bool done;
- mdb_bool broken;
-
- do {
- err = thumb->DoMore(mEnv, &total, ¤t, &done, &broken);
- } while ((err == 0) && !broken && !done);
- }
-
- if (err != 0) // mork doesn't return NS error codes. Yet.
- return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-// if notify is true, we'll notify observers of deleted rows.
-// If we're shutting down history, then (maybe?) we don't
-// need or want to notify rdf.
-nsresult
-nsSimpleGlobalHistory::ExpireEntries(PRBool inNotify)
-{
- if (mExpireTimer)
- {
- mExpireTimer->Cancel();
- mExpireTimer = nsnull;
- }
-
- PRTime expirationDate;
- PRInt64 microSecondsPerSecond, secondsInDays, microSecondsInExpireDays;
-
- LL_I2L(microSecondsPerSecond, PR_USEC_PER_SEC);
- LL_UI2L(secondsInDays, 60 * 60 * 24 * mExpireDays);
- LL_MUL(microSecondsInExpireDays, secondsInDays, microSecondsPerSecond);
- LL_SUB(expirationDate, PR_Now(), microSecondsInExpireDays);
-
- MatchExpirationData expiration;
- expiration.history = this;
- expiration.expirationDate = expirationDate;
-
- return RemoveMatchingRows(matchExpirationCallback, (void *)&expiration, inNotify);
-}
-
-nsresult
-nsSimpleGlobalHistory::SetPendingExpireEntries()
-{
- if (mExpireTimer)
- return NS_OK; // we've already queued it
-
- nsresult rv;
- mExpireTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv)) return rv;
-
- return mExpireTimer->InitWithFuncCallback(FireExpireTimer, this, 0, nsITimer::TYPE_ONE_SHOT);
-}
-
-void
-nsSimpleGlobalHistory::Sync()
-{
- if (mDirty)
- Commit(mPagesRemoved ? kCompressCommit : kLargeCommit);
-
- mPagesRemoved = PR_FALSE;
- mDirty = PR_FALSE;
- mSyncTimer = nsnull;
-}
-
-// when we're dirty, we want to make sure we sync again soon,
-// but make sure that we don't keep syncing if someone is surfing
-// a lot, so cancel the existing timer if any is still waiting to fire
-nsresult
-nsSimpleGlobalHistory::SetDirty()
-{
- nsresult rv;
-
- if (mSyncTimer)
- mSyncTimer->Cancel();
-
- if (!mSyncTimer) {
- mSyncTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv)) return rv;
- }
-
- mDirty = PR_TRUE;
- mSyncTimer->InitWithFuncCallback(FireSyncTimer, this, HISTORY_SYNC_TIMEOUT, nsITimer::TYPE_ONE_SHOT);
-
- return NS_OK;
-}
-
-/* static */
-void
-nsSimpleGlobalHistory::FireSyncTimer(nsITimer *aTimer, void *aClosure)
-{
- ((nsSimpleGlobalHistory *)aClosure)->Sync();
-}
-
-/* static */
-void
-nsSimpleGlobalHistory::FireExpireTimer(nsITimer *aTimer, void *aClosure)
-{
- ((nsSimpleGlobalHistory *)aClosure)->ExpireEntries(PR_FALSE);
-}
-
-nsresult
-nsSimpleGlobalHistory::CloseDB()
-{
- if (!mStore)
- return NS_OK;
-
- NotifyObserversHistoryClosing();
-
- ExpireEntries(PR_FALSE /* don't notify */);
- Commit(kSessionCommit);
-
- // order is important here - logically smallest objects first
- mMetaRow = nsnull;
-
- if (mTable)
- mTable->Release();
-
- mStore->Release();
-
- if (mEnv)
- mEnv->Release();
-
- mTable = nsnull;
- mEnv = nsnull;
- mStore = nsnull;
-
- return NS_OK;
-}
-
-nsresult
-nsSimpleGlobalHistory::FindRow(mdb_column aCol,
- const char *aValue, nsIMdbRow **aResult)
-{
- if (! mStore)
- return NS_ERROR_NOT_INITIALIZED;
-
- mdb_err err;
- PRInt32 len = PL_strlen(aValue);
- mdbYarn yarn = { (void*) aValue, len, len, 0, 0, nsnull };
-
- mdbOid rowId;
- nsCOMPtr row;
- if (aResult) {
- err = mStore->FindRow(mEnv, kToken_HistoryRowScope,
- aCol, &yarn,
- &rowId, getter_AddRefs(row));
-
- if (!row) return NS_ERROR_NOT_AVAILABLE;
- } else {
- err = mStore->FindRow(mEnv, kToken_HistoryRowScope,
- aCol, &yarn, &rowId, nsnull);
- }
-
- // make sure it's actually stored in the main table
- mdb_bool hasRow;
- mTable->HasOid(mEnv, &rowId, &hasRow);
-
- if (!hasRow) return NS_ERROR_NOT_AVAILABLE;
-
- if (aResult) {
- *aResult = row;
- (*aResult)->AddRef();
- }
-
- return NS_OK;
-}
-
-mdb_column
-nsSimpleGlobalHistory::TokenForColumn(EColumn inColumn)
-{
- switch (inColumn)
- {
- case eColumnURL: return kToken_URLColumn;
- case eColumnReferrer: return kToken_ReferrerColumn;
- case eColumnLastVisitDate: return kToken_LastVisitDateColumn;
- case eColumnFirstVisitDate: return kToken_FirstVisitDateColumn;
- case eColumnVisitCount: return kToken_VisitCountColumn;
- case eColumnTitle: return kToken_NameColumn;
- case eColumnHostname: return kToken_HostnameColumn;
- case eColumnHidden: return kToken_HiddenColumn;
- case eColumnTyped: return kToken_TypedColumn;
- default:
- NS_ERROR("Unknown column type");
- }
- return 0;
-}
-
-//
-// determines if the row matches the given terms, used above
-//
-PRBool
-nsSimpleGlobalHistory::RowMatches(nsIMdbRow *aRow, SearchQueryData *aQuery)
-{
- PRUint32 length = aQuery->terms.Count();
- PRUint32 i;
-
- for (i = 0; i < length; i++)
- {
- HistorySearchTerm *term = (HistorySearchTerm*)aQuery->terms[i];
-
- if (!term->datasource.Equals("history"))
- continue; // we only match against history queries
-
- // use callback if it exists
- if (term->match) {
- // queue up some values just in case callback needs it
- // (how would we do this dynamically?)
- MatchSearchTermData matchSearchTerm = { mEnv, mStore, term, PR_FALSE, 0, 0 };
-
- if (!term->match(aRow, (void *)&matchSearchTerm))
- return PR_FALSE;
- } else {
- mdb_err err;
-
- mdb_column property_column;
- nsCAutoString property_name(term->property);
- property_name.Append(char(0));
-
- err = mStore->QueryToken(mEnv, property_name.get(), &property_column);
- if (err != 0) {
- NS_WARNING("Unrecognized column!");
- continue; // assume we match???
- }
-
- // match the term directly against the column?
- mdbYarn yarn;
- err = aRow->AliasCellYarn(mEnv, property_column, &yarn);
- if (err != 0 || !yarn.mYarn_Buf) return PR_FALSE;
-
- const char* startPtr;
- PRInt32 yarnLength = yarn.mYarn_Fill;
- nsCAutoString titleStr;
- if (property_column == kToken_NameColumn) {
- AppendUTF16toUTF8(Substring((const PRUnichar*)yarn.mYarn_Buf,
- (const PRUnichar*)yarn.mYarn_Buf + yarnLength),
- titleStr);
- startPtr = titleStr.get();
- yarnLength = titleStr.Length();
- }
- else {
- // account for null strings
- if (yarn.mYarn_Buf)
- startPtr = (const char *)yarn.mYarn_Buf;
- else
- startPtr = "";
- }
-
- const nsASingleFragmentCString& rowVal =
- Substring(startPtr, startPtr + yarnLength);
-
- // set up some iterators
- nsASingleFragmentCString::const_iterator start, end;
- rowVal.BeginReading(start);
- rowVal.EndReading(end);
-
- nsCAutoString utf8Value;
- CopyUTF16toUTF8(term->text, utf8Value);
-
- if (term->method.Equals("is")) {
- if (!utf8Value.Equals(rowVal, nsCaseInsensitiveCStringComparator()))
- return PR_FALSE;
- }
-
- else if (term->method.Equals("isnot")) {
- if (utf8Value.Equals(rowVal, nsCaseInsensitiveCStringComparator()))
- return PR_FALSE;
- }
-
- else if (term->method.Equals("contains")) {
- if (!FindInReadable(utf8Value, start, end, nsCaseInsensitiveCStringComparator()))
- return PR_FALSE;
- }
-
- else if (term->method.Equals("doesntcontain")) {
- if (FindInReadable(utf8Value, start, end, nsCaseInsensitiveCStringComparator()))
- return PR_FALSE;
- }
-
- else if (term->method.Equals("startswith")) {
- // need to make sure that the found string is
- // at the beginning of the string
- nsACString::const_iterator real_start = start;
- if (!(FindInReadable(utf8Value, start, end, nsCaseInsensitiveCStringComparator()) &&
- real_start == start))
- return PR_FALSE;
- }
-
- else if (term->method.Equals("endswith")) {
- // need to make sure that the found string ends
- // at the end of the string
- nsACString::const_iterator real_end = end;
- if (!(RFindInReadable(utf8Value, start, end, nsCaseInsensitiveCStringComparator()) &&
- real_end == end))
- return PR_FALSE;
- }
-
- else {
- NS_WARNING("Unrecognized search method in SearchEnumerator::RowMatches");
- // don't handle other match types like isgreater/etc yet,
- // so assume the match failed and bail
- return PR_FALSE;
- }
-
- }
- }
-
- // we've gone through each term and didn't bail, so they must have
- // all matched!
- return PR_TRUE;
-}
-
-
-
-#pragma mark -
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::Observe(nsISupports *aSubject,
- const char *aTopic,
- const PRUnichar *aSomeData)
-{
- nsresult rv;
- // pref changing - update member vars
- if (!nsCRT::strcmp(aTopic, "nsPref:changed")) {
- NS_ENSURE_STATE(gPrefBranch);
-
- // expiration date
- if (!nsCRT::strcmp(aSomeData, NS_LITERAL_STRING(PREF_BROWSER_HISTORY_EXPIRE_DAYS).get()))
- {
- PRInt32 newExpireDays;
- gPrefBranch->GetIntPref(PREF_BROWSER_HISTORY_EXPIRE_DAYS, &newExpireDays);
- if (mExpireDays != newExpireDays)
- {
- mExpireDays = newExpireDays;
- SetPendingExpireEntries();
- }
- }
- else if (!nsCRT::strcmp(aSomeData, NS_LITERAL_STRING(PREF_AUTOCOMPLETE_ONLY_TYPED).get())) {
- gPrefBranch->GetBoolPref(PREF_AUTOCOMPLETE_ONLY_TYPED, &mAutocompleteOnlyTyped);
- }
- }
- else if (!nsCRT::strcmp(aTopic, "profile-before-change")) {
- rv = CloseDB();
- if (!nsCRT::strcmp(aSomeData, NS_LITERAL_STRING("shutdown-cleanse").get())) {
- nsCOMPtr historyFile;
- rv = NS_GetSpecialDirectory(NS_APP_HISTORY_50_FILE, getter_AddRefs(historyFile));
- if (NS_SUCCEEDED(rv))
- rv = historyFile->Remove(PR_FALSE);
- }
- }
- else if (!nsCRT::strcmp(aTopic, "profile-do-change"))
- rv = OpenDB();
-
- return NS_OK;
-}
-
-#pragma mark -
-
-
-//----------------------------------------------------------------------
-//
-// HistoryAutoCompleteEnumerator
-//
-// Implementation
-
-// HistoryAutoCompleteEnumerator - for searching for a partial url match
-class HistoryAutoCompleteEnumerator : public nsHistoryMdbTableEnumerator
-{
-protected:
- mdb_column mURLColumn;
- mdb_column mHiddenColumn;
- mdb_column mTypedColumn;
- mdb_column mCommentColumn;
- AutocompleteExcludeData* mExclude;
- const nsACString& mSelectValue;
- PRBool mMatchOnlyTyped;
-
-public:
- HistoryAutoCompleteEnumerator(nsSimpleGlobalHistory* aHistory,
- nsIMdbTable* aTable,
- mdb_column aURLColumn,
- mdb_column aCommentColumn,
- mdb_column aHiddenColumn,
- mdb_column aTypedColumn,
- PRBool aMatchOnlyTyped,
- const nsACString& aSelectValue,
- AutocompleteExcludeData* aExclude) :
- nsHistoryMdbTableEnumerator(aHistory, aTable),
- mURLColumn(aURLColumn),
- mHiddenColumn(aHiddenColumn),
- mTypedColumn(aTypedColumn),
- mCommentColumn(aCommentColumn),
- mExclude(aExclude),
- mSelectValue(aSelectValue),
- mMatchOnlyTyped(aMatchOnlyTyped)
- {}
-
-protected:
- virtual PRBool IsResult(nsIMdbRow* aRow);
-};
-
-
-PRBool
-HistoryAutoCompleteEnumerator::IsResult(nsIMdbRow* aRow)
-{
- if (!HasCell(mEnv, aRow, mTypedColumn))
- {
- if (mMatchOnlyTyped || HasCell(mEnv, aRow, mHiddenColumn))
- return PR_FALSE;
- }
-
- nsCAutoString url;
- mHistory->GetRowValue(aRow, mURLColumn, url);
- return mHistory->AutoCompleteCompare(url, mSelectValue, mExclude);
-}
-
-// Size of visit count boost to give to urls which are sites or paths
-#define AUTOCOMPLETE_NONPAGE_VISIT_COUNT_BOOST 5
-
-#pragma mark -
-
-//----------------------------------------------------------------------
-//
-// nsIAutoCompleteSession implementation
-//
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::OnStartLookup(const PRUnichar *searchString,
- nsIAutoCompleteResults *previousSearchResult,
- nsIAutoCompleteListener *listener)
-{
- NS_ASSERTION(searchString, "searchString can't be null, fix your caller");
- NS_ENSURE_ARG_POINTER(listener);
- NS_ENSURE_STATE(gPrefBranch);
-
- NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
-
- PRBool enabled = PR_FALSE;
- gPrefBranch->GetBoolPref(PREF_AUTOCOMPLETE_ENABLED, &enabled);
-
- if (!enabled || searchString[0] == 0) {
- listener->OnAutoComplete(nsnull, nsIAutoCompleteStatus::ignored);
- return NS_OK;
- }
-
- nsresult rv = NS_OK;
- nsCOMPtr results;
- results = do_CreateInstance(NS_AUTOCOMPLETERESULTS_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- AutoCompleteStatus status = nsIAutoCompleteStatus::failed;
-
- // if the search string is empty after it has had prefixes removed, then
- // there is no need to proceed with the search
- nsCAutoString cSearchString = NS_ConvertUTF16toUTF8(searchString);
- nsCAutoString cutString = cSearchString;
- AutoCompleteCutPrefix(cutString, nsnull);
- if (cutString.IsEmpty()) {
- listener->OnAutoComplete(results, status);
- return NS_OK;
- }
-
- // pass string through filter and then determine which prefixes to exclude
- // when chopping prefixes off of history urls during comparison
- nsCAutoString filtered;
- AutoCompletePrefilter(cSearchString, filtered);
-
- AutocompleteExcludeData exclude;
- AutoCompleteGetExcludeInfo(filtered, &exclude);
-
- // perform the actual search here
- rv = AutoCompleteSearch(filtered, &exclude, previousSearchResult, results);
-
- // describe the search results
- if (NS_SUCCEEDED(rv)) {
-
- results->SetSearchString(searchString);
- results->SetDefaultItemIndex(0);
-
- // determine if we have found any matches or not
- nsCOMPtr array;
- rv = results->GetItems(getter_AddRefs(array));
- if (NS_SUCCEEDED(rv)) {
- PRUint32 nbrOfItems;
- rv = array->Count(&nbrOfItems);
- if (NS_SUCCEEDED(rv)) {
- if (nbrOfItems >= 1) {
- status = nsIAutoCompleteStatus::matchFound;
- } else {
- status = nsIAutoCompleteStatus::noMatch;
- }
- }
- }
-
- // notify the listener
- listener->OnAutoComplete(results, status);
- }
-
- return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::OnStopLookup()
-{
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsSimpleGlobalHistory::OnAutoComplete(const PRUnichar *searchString,
- nsIAutoCompleteResults *previousSearchResult,
- nsIAutoCompleteListener *listener)
-{
- return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// AutoComplete stuff
-//
-
-nsresult
-nsSimpleGlobalHistory::AutoCompleteSearch(const nsACString& aSearchString,
- AutocompleteExcludeData* aExclude,
- nsIAutoCompleteResults* aPrevResults,
- nsIAutoCompleteResults* aResults)
-{
- // determine if we can skip searching the whole history and only search
- // through the previous search results
- PRBool searchPrevious = PR_FALSE;
- nsAutoString searchString = NS_ConvertUTF8toUTF16(aSearchString);
- if (aPrevResults) {
- nsAutoString prevURL;
- aPrevResults->GetSearchString(getter_Copies(prevURL));
- // if search string begins with the previous search string, it's a go
- searchPrevious = StringBeginsWith(searchString, prevURL);
- }
-
- nsCOMPtr resultItems;
- nsresult rv = aResults->GetItems(getter_AddRefs(resultItems));
-
- if (NS_SUCCEEDED(rv) && searchPrevious) {
- // searching through the previous results...
-
- nsCOMPtr prevResultItems;
- aPrevResults->GetItems(getter_AddRefs(prevResultItems));
-
- PRUint32 count;
- prevResultItems->Count(&count);
- for (PRUint32 i = 0; i < count; ++i) {
- nsCOMPtr item;
- prevResultItems->GetElementAt(i, getter_AddRefs(item));
-
- // make a copy of the value because AutoCompleteCompare
- // is destructive
- nsCAutoString url;
- item->GetURL(url);
-
- if (AutoCompleteCompare(url, aSearchString, aExclude))
- resultItems->AppendElement(item);
- }
- } else {
- // searching through the entire history...
-
- // prepare the search enumerator
- HistoryAutoCompleteEnumerator enumerator(this,
- mTable,
- kToken_URLColumn,
- kToken_NameColumn,
- kToken_HiddenColumn,
- kToken_TypedColumn,
- mAutocompleteOnlyTyped,
- aSearchString, aExclude);
-
- nsresult rv = enumerator.Init(mEnv);
- if (NS_FAILED(rv))
- return rv;
-
- // light array of pointers to nsIHistoryItems. we want to avoid shuffling objects between
- // chunky XPCOM arrays in this performance-critical area, when possible.
- nsCOMArray itemArray;
-
- // step through the enumerator to get the items into 'array'
- // because we don't know how many items there will be
- PRBool hasMore;
-
- while (NS_SUCCEEDED(enumerator.HasMoreElements(&hasMore)) && hasMore) {
- // GetNext() addrefs, and so will our array's AppendElement(), so we'll need to
- // take care to release our temporary ref here.
- nsIHistoryItem* curEntry;
- enumerator.GetNext((nsISupports**)&curEntry);
- itemArray.AppendObject(curEntry);
- NS_IF_RELEASE(curEntry);
- }
-
- if (itemArray.Count() > 1) {
- // sort it
- itemArray.Sort(AutoCompleteSortComparison, nsnull);
- }
-
- // place the sorted array into the autocomplete results
- for (PRInt32 i = 0; i < itemArray.Count(); ++i) {
- nsIHistoryItem* item = itemArray[i];
- resultItems->AppendElement(static_cast(item));
- }
- }
-
- return NS_OK;
-}
-
-// If aURL begins with a protocol or domain prefix from our lists,
-// then mark their index in an AutocompleteExcludeData struct.
-void
-nsSimpleGlobalHistory::AutoCompleteGetExcludeInfo(const nsACString& aURL, AutocompleteExcludeData* aExclude)
-{
- aExclude->schemePrefix = -1U;
- aExclude->hostnamePrefix = -1U;
-
- PRInt32 index = 0;
- PRInt32 i;
- for (i = 0; i < mSchemePrefixes->Count(); ++i) {
- nsACString& string = *mSchemePrefixes->CStringAt(i);
- if (StringBeginsWith(aURL, string)) {
- aExclude->schemePrefix = i;
- index = string.Length();
- break;
- }
- }
-
- for (i = 0; i < mHostNamePrefixes->Count(); ++i) {
- const nsACString& string = *mHostNamePrefixes->CStringAt(i);
- if (Substring(aURL, index, string.Length()).Equals(string)) {
- aExclude->hostnamePrefix = i;
- break;
- }
- }
-}
-
-// Cut any protocol and domain prefixes from aURL, except for those which
-// are specified in aExclude
-void
-nsSimpleGlobalHistory::AutoCompleteCutPrefix(nsACString& aURL, AutocompleteExcludeData* aExclude)
-{
- // This comparison is case-sensitive. Therefore, it assumes that aUserURL is a
- // potential URL whose host name is in all lower case.
- PRInt32 idx = 0;
- PRInt32 i;
-
- for (i = 0; i < mSchemePrefixes->Count(); ++i) {
- if (aExclude && i == (PRInt32)aExclude->schemePrefix)
- continue;
- const nsACString &string = *mSchemePrefixes->CStringAt(i);
- if (StringBeginsWith(aURL, string)) {
- idx = string.Length();
- break;
- }
- }
-
- if (idx > 0)
- aURL.Cut(0, idx);
-
- idx = 0;
- for (i = 0; i < mHostNamePrefixes->Count(); ++i) {
- if (aExclude && i == (PRInt32)aExclude->hostnamePrefix)
- continue;
- const nsACString &string = *mHostNamePrefixes->CStringAt(i);
- if (StringBeginsWith(aURL, string)) {
- idx = string.Length();
- break;
- }
- }
-
- if (idx > 0)
- aURL.Cut(0, idx);
-}
-
-void
-nsSimpleGlobalHistory::AutoCompletePrefilter(const nsACString& aSearchString, nsACString &outFilteredString)
-{
- outFilteredString.Assign(aSearchString);
- PRInt32 slash = outFilteredString.FindChar('/', 0);
-
- if (slash >= 0) {
- // if user is typing a url but has already typed past the host,
- // then convert the host to lowercase
- nsCAutoString host(Substring(outFilteredString, 0, slash));
- ToLowerCase(host);
- outFilteredString.Assign(host + Substring(outFilteredString, slash, outFilteredString.Length()-slash));
- } else {
- // otherwise, assume the user could still be typing the host, and
- // convert everything to lowercase
- ToLowerCase(outFilteredString);
- }
-}
-
-PRBool
-nsSimpleGlobalHistory::AutoCompleteCompare(nsACString& aHistoryURL,
- const nsACString& aUserURL,
- AutocompleteExcludeData* aExclude)
-{
- AutoCompleteCutPrefix(aHistoryURL, aExclude);
-
- return StringBeginsWith(aHistoryURL, aUserURL);
-}
-
-int PR_CALLBACK
-nsSimpleGlobalHistory::AutoCompleteSortComparison(nsIHistoryItem *item1, nsIHistoryItem *item2,
- void *closureVoid)
-{
- //
- // NOTE: The design and reasoning behind the following autocomplete
- // sort implementation is documented in bug 78270.
- //
-
- // get visit counts - we're ignoring all errors from GetRowValue(),
- // and relying on default values
- PRInt32 item1visits = 0, item2visits = 0;
- item1->GetVisitCount(&item1visits);
- item2->GetVisitCount(&item2visits);
-
- // get URLs
- nsCAutoString url1, url2;
- item1->GetURL(url1);
- item2->GetURL(url2);
-
- // Favour websites and webpaths more than webpages by boosting
- // their visit counts. This assumes that URLs have been normalized,
- // appending a trailing '/'.
- //
- // We use addition to boost the visit count rather than multiplication
- // since we want URLs with large visit counts to remain pretty much
- // in raw visit count order - we assume the user has visited these urls
- // often for a reason and there shouldn't be a problem with putting them
- // high in the autocomplete list regardless of whether they are sites/
- // paths or pages. However for URLs visited only a few times, sites
- // & paths should be presented before pages since they are generally
- // more likely to be visited again.
- //
- PRBool isPath1 = PR_FALSE, isPath2 = PR_FALSE;
- if (!url1.IsEmpty())
- {
- // url is a site/path if it has a trailing slash
- isPath1 = (url1.Last() == '/');
- if (isPath1)
- item1visits += AUTOCOMPLETE_NONPAGE_VISIT_COUNT_BOOST;
- }
- if (!url2.IsEmpty())
- {
- // url is a site/path if it has a trailing slash
- isPath2 = (url2.Last() == '/');
- if (isPath2)
- item2visits += AUTOCOMPLETE_NONPAGE_VISIT_COUNT_BOOST;
- }
-
- // primary sort by visit count
- if (item1visits != item2visits)
- {
- // return visit count comparison
- return item2visits - item1visits;
- }
- else
- {
- // Favour websites and webpaths more than webpages
- if (isPath1 && !isPath2) return -1; // url1 is a website/path, url2 isn't
- if (!isPath1 && isPath2) return 1; // url1 isn't a website/path, url2 is
-
- // We have two websites/paths.. ignore "http[s]://[www.]" & "ftp://[ftp.]"
- // prefixes. Find a starting position in the string, just past any of the
- // above prefixes. Only check for the prefix once, in the far left of the
- // string - it is assumed there is no whitespace.
- PRInt32 postPrefix1 = 0, postPrefix2 = 0;
-
- // Prefixes to ignore in autocomplete.
- static const nsLiteralCString kIgnoredPrefixes[] = {
- NS_LITERAL_CSTRING("http://www."),
- NS_LITERAL_CSTRING("http://"),
- NS_LITERAL_CSTRING("https://www."),
- NS_LITERAL_CSTRING("https://"),
- NS_LITERAL_CSTRING("ftp://ftp."),
- NS_LITERAL_CSTRING("ftp://")
- };
-
- const unsigned int kNumPrefixes = sizeof(kIgnoredPrefixes)/sizeof(kIgnoredPrefixes[0]);
- size_t i;
- // iterate through our prefixes looking for a match
- for (i = 0; i < kNumPrefixes; i++)
- {
- // Check if string is prefixed. Note: the parameters of the Find()
- // method specify the url is searched at the 0th character and if there
- // is no match the rest of the url is not searched.
- if (StringBeginsWith(url1, kIgnoredPrefixes[0]))
- {
- // found a match - record post prefix position
- postPrefix1 = kIgnoredPrefixes[i].Length();
- // bail out of the for loop
- break;
- }
- }
-
- // iterate through our prefixes looking for a match
- for (i = 0; i < kNumPrefixes; i++)
- {
- // Check if string is prefixed. Note: the parameters of the Find()
- // method specify the url is searched at the 0th character and if there
- // is no match the rest of the url is not searched.
- if (StringBeginsWith(url2, kIgnoredPrefixes[0]))
- {
- // found a match - record post prefix position
- postPrefix2 = kIgnoredPrefixes[i].Length();
- // bail out of the for loop
- break;
- }
- }
-
- // compare non-prefixed urls
- PRInt32 ret = Compare(
- Substring(url1, postPrefix1, url1.Length()),
- Substring(url2, postPrefix2, url2.Length()));
- if (ret != 0) return ret;
-
- // sort http://xyz.com before http://www.xyz.com
- return postPrefix1 - postPrefix2;
- }
-}
-
Index: installer/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/camino/installer/Makefile.in,v
retrieving revision 1.34
diff -u -8 -r1.34 Makefile.in
--- installer/Makefile.in 14 Feb 2010 22:25:19 -0000 1.34
+++ installer/Makefile.in 23 Feb 2010 03:07:51 -0000
@@ -49,19 +49,20 @@
# The packager runs in the dist directory, paths must be relative to there.
MOZ_PKG_MAC_DSSTORE=../camino/resources/package/dsstore
MOZ_PKG_MAC_BACKGROUND=../camino/resources/package/background.jpg
MOZ_PKG_MAC_ICON=../camino/resources/package/disk.icns
# The docs aren't copied into an objdir, chase them in the srcdir.
# Use $(_ABS_TOPSRCDIR) for an absolute path, handling both srcdir and
# objdir builds.
+# in 1.9.1, packager.mk defines _ABS_MOZSRCDIR instead
MOZ_PKG_MAC_EXTRA=--format "UDBZ" \
- --copy "$(_ABS_TOPSRCDIR)/camino/docs/ReadMe.rtf" \
- --copy "$(_ABS_TOPSRCDIR)/camino/docs/Release Notes $(_RELNOTE_VERSION).rtf:Release Notes.rtf" \
+ --copy "$(_ABS_MOZSRCDIR)/camino/docs/ReadMe.rtf" \
+ --copy "$(_ABS_MOZSRCDIR)/camino/docs/Release Notes $(_RELNOTE_VERSION).rtf:Release Notes.rtf" \
--attribute "E:/ReadMe.rtf:/Release Notes.rtf"
include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
# Use striptease instead of strip. Strip out debugging symbols and local
# symbols, but leave local symbols in text sections intact. This keeps
# CrashReporter stacks usable. Use pwd to get an absolute path based
# on $(DIST) relative to this directory. If $(DIST) were used directly, the
Index: Camino.xcodeproj/project.pbxproj
===================================================================
RCS file: /cvsroot/mozilla/camino/Camino.xcodeproj/project.pbxproj,v
retrieving revision 1.125
diff -u -8 -r1.125 project.pbxproj
--- Camino.xcodeproj/project.pbxproj 21 Feb 2010 22:56:30 -0000 1.125
+++ Camino.xcodeproj/project.pbxproj 23 Feb 2010 03:08:26 -0000
@@ -153,18 +153,16 @@
0FB6D99B089B276100414498 /* bm_favicon.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0FB6D99A089B276100414498 /* bm_favicon.tiff */; };
0FB6D99C089B276100414498 /* bm_favicon.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0FB6D99A089B276100414498 /* bm_favicon.tiff */; };
0FBC0ECB0798F92600E8E0E2 /* BookmarksEditing.nib in Resources */ = {isa = PBXBuildFile; fileRef = 0FBC0EC90798F92600E8E0E2 /* BookmarksEditing.nib */; };
0FBC0ECC0798F92600E8E0E2 /* BookmarksEditing.nib in Resources */ = {isa = PBXBuildFile; fileRef = 0FBC0EC90798F92600E8E0E2 /* BookmarksEditing.nib */; };
0FBC0ECE0798F94900E8E0E2 /* NSDate+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0ECD0798F94900E8E0E2 /* NSDate+Utils.m */; };
0FBC0ECF0798F94900E8E0E2 /* NSDate+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0ECD0798F94900E8E0E2 /* NSDate+Utils.m */; };
0FBC0ED10798F95400E8E0E2 /* NSMenu+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0ED00798F95400E8E0E2 /* NSMenu+Utils.m */; };
0FBC0ED20798F95400E8E0E2 /* NSMenu+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0ED00798F95400E8E0E2 /* NSMenu+Utils.m */; };
- 0FBC0EDA0798F9A000E8E0E2 /* nsSimpleGlobalHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0ED90798F9A000E8E0E2 /* nsSimpleGlobalHistory.cpp */; };
- 0FBC0EDB0798F9A000E8E0E2 /* nsSimpleGlobalHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0ED90798F9A000E8E0E2 /* nsSimpleGlobalHistory.cpp */; };
0FBC0EDD0798F9B400E8E0E2 /* HistoryOutlineViewDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0EDC0798F9B400E8E0E2 /* HistoryOutlineViewDelegate.mm */; };
0FBC0EDE0798F9B400E8E0E2 /* HistoryOutlineViewDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0EDC0798F9B400E8E0E2 /* HistoryOutlineViewDelegate.mm */; };
0FBC0EE00798FA1900E8E0E2 /* PopupMenuButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0EDF0798FA1900E8E0E2 /* PopupMenuButton.m */; };
0FBC0EE10798FA1900E8E0E2 /* PopupMenuButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC0EDF0798FA1900E8E0E2 /* PopupMenuButton.m */; };
0FCD859008C4D4B900A1923B /* layout_xul_tree.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = 0FCD858708C4D45400A1923B /* layout_xul_tree.xpt */; };
0FCD859108C4D4DA00A1923B /* layout_xul_tree.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = 0FCD858708C4D45400A1923B /* layout_xul_tree.xpt */; };
0FCD85CC08C4D6D900A1923B /* ViewCertificateDialogController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FCD85CA08C4D6D900A1923B /* ViewCertificateDialogController.mm */; };
0FCD85CD08C4D6D900A1923B /* BrowserSecurityDialogs.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FCD85CB08C4D6D900A1923B /* BrowserSecurityDialogs.mm */; };
@@ -243,18 +241,16 @@
33820E4E0F8AA44F00D2164A /* Breakpad.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 33820DC00F8AA31B00D2164A /* Breakpad.framework */; };
33820E510F8AA46E00D2164A /* Breakpad.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 33820DC00F8AA31B00D2164A /* Breakpad.framework */; };
33820E800F8AA62C00D2164A /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33820DC00F8AA31B00D2164A /* Breakpad.framework */; };
33820E810F8AA63800D2164A /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33820DC00F8AA31B00D2164A /* Breakpad.framework */; };
33B775AA0C4EAC1E00A6D67F /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 33B775A90C4EAC1E00A6D67F /* libsqlite3.dylib */; };
33B775AB0C4EAC1E00A6D67F /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 33B775A90C4EAC1E00A6D67F /* libsqlite3.dylib */; };
33B7763C0C4EB32C00A6D67F /* libsqlite3.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = 33B775A90C4EAC1E00A6D67F /* libsqlite3.dylib */; };
33B7763D0C4EB34300A6D67F /* libsqlite3.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = 33B775A90C4EAC1E00A6D67F /* libsqlite3.dylib */; };
- 33B777980C55853B00A6D67F /* libmozlcms.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = 33B777950C55851800A6D67F /* libmozlcms.dylib */; };
- 33B777E20C55890200A6D67F /* libmozlcms.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33B777E10C5588E500A6D67F /* libmozlcms.a */; };
33B778810C55C58500A6D67F /* libnssdbm3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = 33B778800C55C57800A6D67F /* libnssdbm3.dylib */; };
33B778820C55C59A00A6D67F /* libnssdbm3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = 33B778800C55C57800A6D67F /* libnssdbm3.dylib */; };
33C222870D106CDD00611936 /* PreferencesWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C222850D106CDD00611936 /* PreferencesWindow.m */; };
33C222890D106CDD00611936 /* PreferencesWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C222850D106CDD00611936 /* PreferencesWindow.m */; };
33E1EA100D34550A00910BBD /* AddSearchProviderHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33E1EA0E0D34550A00910BBD /* AddSearchProviderHandler.mm */; };
33E1EA120D34550A00910BBD /* AddSearchProviderHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33E1EA0E0D34550A00910BBD /* AddSearchProviderHandler.mm */; };
33E1EA990D358DFA00910BBD /* caminosearch.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = 33E1EA970D358DE200910BBD /* caminosearch.xpt */; };
33E1EA9A0D358E0C00910BBD /* caminosearch.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = 33E1EA970D358DE200910BBD /* caminosearch.xpt */; };
@@ -420,17 +416,16 @@
3F44ACC605BDFB9E00CB4B08 /* BookmarkToolbar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FB2BA8F0545EA80002B9691 /* BookmarkToolbar.mm */; };
3F44ACC705BDFB9E00CB4B08 /* BookmarkViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FB2BA910545EA80002B9691 /* BookmarkViewController.mm */; };
3F44ACC805BDFB9E00CB4B08 /* ExtendedTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FB2BA930545EA80002B9691 /* ExtendedTableView.mm */; };
3F44ACC905BDFB9E00CB4B08 /* KindaSmartFolderManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FB2BA950545EA80002B9691 /* KindaSmartFolderManager.mm */; };
3F44ACCA05BDFB9E00CB4B08 /* NSArray+Utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FB2BA970545EA80002B9691 /* NSArray+Utils.mm */; };
3F44ACCC05BDFB9E00CB4B08 /* ProgressView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FC0FB8005A0D2DC002F47DE /* ProgressView.mm */; };
3F44ACCD05BDFB9E00CB4B08 /* HistoryItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3F7C6CBA05B4819E002FFFD3 /* HistoryItem.mm */; };
3F44ACD605BDFB9F00CB4B08 /* libappcomps.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F5F181C90208006F0124611D /* libappcomps.dylib */; };
- 3F44ACD605BDFB9F00CB4B09 /* libxpautocomplete.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F5F181C90208006F0124611E /* libxpautocomplete.dylib */; };
3F44ACD705BDFB9F00CB4B08 /* caps.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639401B3131201A962F7 /* caps.xpt */; };
3F44ACD805BDFB9F00CB4B08 /* libtxmgr.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F5F59320020F4CD201ACA690 /* libtxmgr.dylib */; };
3F44ACD905BDFB9F00CB4B08 /* docshell.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639601B3131201A962F7 /* docshell.xpt */; };
3F44ACDA05BDFB9F00CB4B08 /* dom_base.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639701B3131201A962F7 /* dom_base.xpt */; };
3F44ACDA05BDFB9F00CB4B09 /* dom_canvas.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639701B3131201A962F8 /* dom_canvas.xpt */; };
3F44ACDB05BDFB9F00CB4B08 /* dom_core.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639801B3131201A962F7 /* dom_core.xpt */; };
3F44ACDC05BDFB9F00CB4B08 /* dom_css.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639901B3131201A962F7 /* dom_css.xpt */; };
3F44ACDD05BDFB9F00CB4B08 /* dom_events.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD639A01B3131201A962F7 /* dom_events.xpt */; };
@@ -444,17 +439,16 @@
3F44ACE405BDFB9F00CB4B08 /* dom_xul.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63A101B3131201A962F7 /* dom_xul.xpt */; };
3F44ACE505BDFB9F00CB4B08 /* dom.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63A201B3131201A962F7 /* dom.xpt */; };
3F44ACE605BDFB9F00CB4B08 /* gfx.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63A401B3131201A962F7 /* gfx.xpt */; };
3F44ACE705BDFB9F00CB4B08 /* libcaps.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD63A601B3131201A962F7 /* libcaps.dylib */; };
3F44ACE805BDFB9F00CB4B08 /* libchrome.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD63A701B3131201A962F7 /* libchrome.dylib */; };
3F44ACE905BDFB9F00CB4B08 /* libcookie.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD63A801B3131201A962F7 /* libcookie.dylib */; };
3F44ACEA05BDFB9F00CB4B08 /* libdocshell.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD63A901B3131201A962F7 /* libdocshell.dylib */; };
3F44ACEC05BDFB9F00CB4B08 /* libembedcomponents.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD63AB01B3131201A962F7 /* libembedcomponents.dylib */; };
- 3F44ACEE05BDFB9F00CB4B08 /* libmork.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F5D3F1CE0209235A014E447F /* libmork.dylib */; };
3F44ACEF05BDFB9F00CB4B08 /* libwebbrwsr.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD63B101B3131201A962F7 /* libwebbrwsr.dylib */; };
3F44ACF005BDFB9F00CB4B08 /* mimetype.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63B201B3131201A962F7 /* mimetype.xpt */; };
3F44ACF105BDFB9F00CB4B08 /* txtsvc.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63B301B3131201A962F7 /* txtsvc.xpt */; };
3F44ACF205BDFB9F00CB4B08 /* webBrowser_core.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63B401B3131201A962F7 /* webBrowser_core.xpt */; };
3F44ACF305BDFB9F00CB4B08 /* windowwatcher.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63B501B3131201A962F7 /* windowwatcher.xpt */; };
3F44ACF405BDFB9F00CB4B08 /* content_base.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63D901B313EE01A962F7 /* content_base.xpt */; };
3F44ACF505BDFB9F00CB4B08 /* jar.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63DA01B313EE01A962F7 /* jar.xpt */; };
3F44ACF705BDFB9F00CB4B08 /* layout_base.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD63DC01B313EE01A962F7 /* layout_base.xpt */; };
@@ -496,63 +490,57 @@
3F44AD2005BDFB9F00CB4B08 /* xpconnect.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD642B01B3156701A962F7 /* xpconnect.xpt */; };
3F44AD2105BDFB9F00CB4B08 /* embed_base.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD644D01B315FA01A962F7 /* embed_base.xpt */; };
3F44AD2205BDFB9F00CB4B08 /* imglib2.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD644E01B315FA01A962F7 /* imglib2.xpt */; };
3F44AD2305BDFB9F00CB4B08 /* libgkplugin.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F6BD644F01B315FA01A962F7 /* libgkplugin.dylib */; };
3F44AD2405BDFB9F00CB4B08 /* xuldoc.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F517941F027F3F2901A967DF /* xuldoc.xpt */; };
3F44AD2605BDFB9F00CB4B08 /* liboji.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F53A902202C1127A01A967F3 /* liboji.dylib */; };
3F44AD2705BDFB9F00CB4B08 /* nsProxyAutoConfig.js in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F5461CBB03AAC25C01A96660 /* nsProxyAutoConfig.js */; };
3F44AD2905BDFB9F00CB4B08 /* libi18n.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = A708E74103FB9041003C038B /* libi18n.dylib */; };
- 3F44AD2A05BDFB9F00CB4B08 /* libxmlextras.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = A708E74303FB90AB003C038B /* libxmlextras.dylib */; };
- 3F44AD2B05BDFB9F00CB4B08 /* libsuitetypeaheadfind.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = A7D88E680465D94000A80196 /* libsuitetypeaheadfind.dylib */; };
- 3F44AD2C05BDFB9F00CB4B08 /* suitetypeaheadfind.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = A7D88E6A0465D9F800A80196 /* suitetypeaheadfind.xpt */; };
3F44AD2E05BDFB9F00CB4B08 /* charsetalias.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64B801B316DA01A962F7 /* charsetalias.properties */; };
3F44AD2F05BDFB9F00CB4B08 /* charsetData.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64B901B316DA01A962F7 /* charsetData.properties */; };
3F44AD3005BDFB9F00CB4B08 /* langGroups.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64BA01B316DA01A962F7 /* langGroups.properties */; };
3F44AD3105BDFB9F00CB4B08 /* language.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64BB01B316DA01A962F7 /* language.properties */; };
3F44AD3205BDFB9F00CB4B08 /* maccharset.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64BC01B316DA01A962F7 /* maccharset.properties */; };
- 3F44AD3305BDFB9F00CB4B08 /* broken-image.gif in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F55B6BF402EF1F7E01026D5D /* broken-image.gif */; };
- 3F44AD3405BDFB9F00CB4B08 /* loading-image.gif in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F5A112C902DF270F01026D5D /* loading-image.gif */; };
+ 3F44AD3305BDFB9F00CB4B08 /* broken-image.png in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F55B6BF402EF1F7E01026D5D /* broken-image.png */; };
+ 3F44AD3405BDFB9F00CB4B08 /* loading-image.png in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F5A112C902DF270F01026D5D /* loading-image.png */; };
3F44AD3505BDFB9F00CB4B08 /* forms.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DD01B3172601A962F7 /* forms.css */; };
3F44AD3705BDFB9F00CB4B08 /* html.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DE01B3172601A962F7 /* html.css */; };
3F44AD3805BDFB9F00CB4B08 /* quirk.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DF01B3172601A962F7 /* quirk.css */; };
3F44AD3805BDFB9F00CB4C08 /* svg.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DF01B3172601A963F7 /* svg.css */; };
3F44AD3905BDFB9F00CB4B08 /* ua.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64E001B3172601A962F7 /* ua.css */; };
3F44AD3A05BDFB9F00CB4B08 /* viewsource.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64E101B3172601A962F7 /* viewsource.css */; };
3F44AD3F05BDFB9F00CB4B08 /* xhtml11.dtd in Copy Gecko DTDs */ = {isa = PBXBuildFile; fileRef = F5949A47030D58A1014E8430 /* xhtml11.dtd */; };
3F44AD4105BDFB9F00CB4B08 /* html40Latin1.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64D801B3172601A962F7 /* html40Latin1.properties */; };
3F44AD4205BDFB9F00CB4B08 /* html40Special.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64D901B3172601A962F7 /* html40Special.properties */; };
3F44AD4305BDFB9F00CB4B08 /* html40Symbols.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64DA01B3172601A962F7 /* html40Symbols.properties */; };
3F44AD4405BDFB9F00CB4B08 /* htmlEntityVersions.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64DB01B3172601A962F7 /* htmlEntityVersions.properties */; };
3F44AD4505BDFB9F00CB4B08 /* transliterate.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64DC01B3172601A962F7 /* transliterate.properties */; };
3F44AD5205BDFB9F00CB4B08 /* all-camino.js in Copy Camino Prefs */ = {isa = PBXBuildFile; fileRef = F59A0E320307635401A967F3 /* all-camino.js */; };
3F44AD5405BDFB9F00CB4B08 /* all.js in Copy Base Prefs */ = {isa = PBXBuildFile; fileRef = F6BD64FC01B3184301A962F7 /* all.js */; };
3F44AD5505BDFB9F00CB4B08 /* security-prefs.js in Copy Base Prefs */ = {isa = PBXBuildFile; fileRef = F55A9BC60228CCE101DAE4DB /* security-prefs.js */; };
- 3F44AD5805BDFB9F00CB4B08 /* embed.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F6BD650001B3184301A962F7 /* embed.jar */; };
+ 3F44AD5805BDFB9F00CB4B08 /* toolkit.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F6BD650001B3184301A962F7 /* toolkit.jar */; };
3F44AD5805BDFB9F00CB4B18 /* flashblock.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F6BD650001B3184301A96307 /* flashblock.jar */; };
- 3F44AD5905BDFB9F00CB4B08 /* installed-chrome.txt in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F5DA444A027DD5AA01A80166 /* installed-chrome.txt */; };
3F44AD5B05BDFB9F00CB4B08 /* libnss3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C320228B91F013DD99A /* libnss3.dylib */; };
3F44AD5C05BDFB9F00CB4B08 /* libnssckbi.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C330228B91F013DD99A /* libnssckbi.dylib */; };
3F44AD5D05BDFB9F00CB4B08 /* libsmime3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C340228B91F013DD99A /* libsmime3.dylib */; };
3F44AD5E05BDFB9F00CB4B08 /* libsoftokn3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C350228B91F013DD99A /* libsoftokn3.dylib */; };
3F44AD5F05BDFB9F00CB4B08 /* libssl3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C360228B91F013DD99A /* libssl3.dylib */; };
3F44AD6105BDFB9F00CB4B08 /* libxpcom.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F57F0F470209DF5301A967DF /* libxpcom.dylib */; };
3F44AD6305BDFB9F00CB4B08 /* libmozjs.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD637F01B30EA301A962F7 /* libmozjs.dylib */; };
3F44AD6405BDFB9F00CB4B08 /* libnspr4.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638001B30EA301A962F7 /* libnspr4.dylib */; };
3F44AD6505BDFB9F00CB4B08 /* libplc4.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638101B30EA301A962F7 /* libplc4.dylib */; };
3F44AD6605BDFB9F00CB4B08 /* libplds4.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638201B30EA301A962F7 /* libplds4.dylib */; };
3F44AD6705BDFB9F00CB4B08 /* libgkgfx.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638701B30F5301A962F7 /* libgkgfx.dylib */; };
- 3F44AD6805BDFB9F00CB4B08 /* libwidget.rsrc in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F5F14E9602A5A43A01A967F3 /* libwidget.rsrc */; };
3F44AD6905BDFB9F00CB4B08 /* libjsj.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F50DCB4302C2856001A967F3 /* libjsj.dylib */; };
3F44AD6B05BDFB9F00CB4B08 /* pipboot.xpt in Copy Security Components */ = {isa = PBXBuildFile; fileRef = F5247C4C0228BBB2013DD99A /* pipboot.xpt */; };
3F44AD6C05BDFB9F00CB4B08 /* pipnss.xpt in Copy Security Components */ = {isa = PBXBuildFile; fileRef = F5247C4D0228BBB2013DD99A /* pipnss.xpt */; };
3F44AD6D05BDFB9F00CB4B08 /* libpipboot.dylib in Copy Security Components */ = {isa = PBXBuildFile; fileRef = F5247C3C0228B990013DD99A /* libpipboot.dylib */; };
3F44AD6E05BDFB9F00CB4B08 /* libpipnss.dylib in Copy Security Components */ = {isa = PBXBuildFile; fileRef = F5247C3D0228B990013DD99A /* libpipnss.dylib */; };
- 3F44AD7005BDFB9F00CB4B08 /* pipnss.jar in Copy Security Chrome */ = {isa = PBXBuildFile; fileRef = F54EF7ED022A2F9C01A80165 /* pipnss.jar */; };
- 3F44AD7B05BDFB9F00CB4B08 /* PrintPDE.plugin in Copy Plugins */ = {isa = PBXBuildFile; fileRef = 7919FCF0044631350000010E /* PrintPDE.plugin */; };
+ 3F44AD7005BDFB9F00CB4B08 /* en-US.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F54EF7ED022A2F9C01A80165 /* en-US.jar */; };
3F44AD7D05BDFB9F00CB4B08 /* libembed_base_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F51D9B2D0209573701A80166 /* libembed_base_s.a */; };
3F44AD7E05BDFB9F00CB4B08 /* libunicharutil_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F5C2CDA702383CE601A967DF /* libunicharutil_s.a */; };
3F44AD7F05BDFB9F00CB4B08 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
3F44AD8005BDFB9F00CB4B08 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F557193A022B4102010001CA /* PreferencePanes.framework */; };
3F44AD8105BDFB9F00CB4B08 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F52D5CDB027D412A01A80166 /* Carbon.framework */; };
3F44AD8205BDFB9F00CB4B08 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F52D5CDC027D412A01A80166 /* CoreFoundation.framework */; };
3F44AD8305BDFB9F00CB4B08 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F52D5CDD027D412A01A80166 /* SystemConfiguration.framework */; };
3F44AD8405BDFB9F00CB4B08 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5FEDBCB02AD8DD101A967F3 /* QuickTime.framework */; };
@@ -751,90 +739,81 @@
3F44AF3D05BDFBA000CB4B08 /* xpcom_io.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD642801B3156701A962F7 /* xpcom_io.xpt */; };
3F44AF3E05BDFBA000CB4B08 /* xpcom_threads.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD642901B3156701A962F7 /* xpcom_threads.xpt */; };
3F44AF3F05BDFBA000CB4B08 /* xpcom_xpti.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD642A01B3156701A962F7 /* xpcom_xpti.xpt */; };
3F44AF4005BDFBA000CB4B08 /* xpconnect.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD642B01B3156701A962F7 /* xpconnect.xpt */; };
3F44AF4105BDFBA000CB4B08 /* embed_base.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD644D01B315FA01A962F7 /* embed_base.xpt */; };
3F44AF4205BDFBA000CB4B08 /* imglib2.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F6BD644E01B315FA01A962F7 /* imglib2.xpt */; };
3F44AF4305BDFBA000CB4B08 /* xuldoc.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = F517941F027F3F2901A967DF /* xuldoc.xpt */; };
3F44AF4405BDFBA000CB4B08 /* nsProxyAutoConfig.js in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = F5461CBB03AAC25C01A96660 /* nsProxyAutoConfig.js */; };
- 3F44AF4705BDFBA000CB4B08 /* suitetypeaheadfind.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = A7D88E6A0465D9F800A80196 /* suitetypeaheadfind.xpt */; };
3F44AF4905BDFBA000CB4B08 /* charsetalias.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64B801B316DA01A962F7 /* charsetalias.properties */; };
3F44AF4A05BDFBA000CB4B08 /* charsetData.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64B901B316DA01A962F7 /* charsetData.properties */; };
3F44AF4B05BDFBA000CB4B08 /* langGroups.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64BA01B316DA01A962F7 /* langGroups.properties */; };
3F44AF4C05BDFBA000CB4B08 /* language.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64BB01B316DA01A962F7 /* language.properties */; };
3F44AF4D05BDFBA000CB4B08 /* maccharset.properties in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64BC01B316DA01A962F7 /* maccharset.properties */; };
- 3F44AF4E05BDFBA000CB4B08 /* loading-image.gif in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F5A112C902DF270F01026D5D /* loading-image.gif */; };
- 3F44AF4F05BDFBA000CB4B08 /* broken-image.gif in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F55B6BF402EF1F7E01026D5D /* broken-image.gif */; };
+ 3F44AF4E05BDFBA000CB4B08 /* loading-image.png in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F5A112C902DF270F01026D5D /* loading-image.png */; };
+ 3F44AF4F05BDFBA000CB4B08 /* broken-image.png in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F55B6BF402EF1F7E01026D5D /* broken-image.png */; };
3F44AF5005BDFBA000CB4B08 /* forms.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DD01B3172601A962F7 /* forms.css */; };
3F44AF5205BDFBA000CB4B08 /* html.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DE01B3172601A962F7 /* html.css */; };
3F44AF5305BDFBA000CB4B08 /* quirk.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DF01B3172601A962F7 /* quirk.css */; };
3F44AF5305BDFBA000CB4C08 /* svg.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64DF01B3172601A963F7 /* svg.css */; };
3F44AF5405BDFBA000CB4B08 /* ua.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64E001B3172601A962F7 /* ua.css */; };
3F44AF5505BDFBA000CB4B08 /* viewsource.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = F6BD64E101B3172601A962F7 /* viewsource.css */; };
3F44AF5A05BDFBA000CB4B08 /* xhtml11.dtd in Copy Gecko DTDs */ = {isa = PBXBuildFile; fileRef = F5949A47030D58A1014E8430 /* xhtml11.dtd */; };
3F44AF5C05BDFBA000CB4B08 /* html40Latin1.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64D801B3172601A962F7 /* html40Latin1.properties */; };
3F44AF5D05BDFBA000CB4B08 /* html40Special.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64D901B3172601A962F7 /* html40Special.properties */; };
3F44AF5E05BDFBA000CB4B08 /* html40Symbols.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64DA01B3172601A962F7 /* html40Symbols.properties */; };
3F44AF5F05BDFBA000CB4B08 /* htmlEntityVersions.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64DB01B3172601A962F7 /* htmlEntityVersions.properties */; };
3F44AF6005BDFBA000CB4B08 /* transliterate.properties in Copy Gecko Entity Tables */ = {isa = PBXBuildFile; fileRef = F6BD64DC01B3172601A962F7 /* transliterate.properties */; };
3F44AF6D05BDFBA000CB4B08 /* all-camino.js in Copy Camino Prefs */ = {isa = PBXBuildFile; fileRef = F59A0E320307635401A967F3 /* all-camino.js */; };
3F44AF6F05BDFBA000CB4B08 /* all.js in Copy Base Prefs */ = {isa = PBXBuildFile; fileRef = F6BD64FC01B3184301A962F7 /* all.js */; };
3F44AF7005BDFBA000CB4B08 /* security-prefs.js in Copy Base Prefs */ = {isa = PBXBuildFile; fileRef = F55A9BC60228CCE101DAE4DB /* security-prefs.js */; };
- 3F44AF7305BDFBA000CB4B08 /* embed.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F6BD650001B3184301A962F7 /* embed.jar */; };
+ 3F44AF7305BDFBA000CB4B08 /* toolkit.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F6BD650001B3184301A962F7 /* toolkit.jar */; };
3F44AF7305BDFBA000CB4B18 /* flashblock.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F6BD650001B3184301A96307 /* flashblock.jar */; };
- 3F44AF7405BDFBA000CB4B08 /* installed-chrome.txt in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F5DA444A027DD5AA01A80166 /* installed-chrome.txt */; };
3F44AF7605BDFBA000CB4B08 /* libnss3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C320228B91F013DD99A /* libnss3.dylib */; };
3F44AF7705BDFBA000CB4B08 /* libnssckbi.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C330228B91F013DD99A /* libnssckbi.dylib */; };
3F44AF7805BDFBA000CB4B08 /* libsmime3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C340228B91F013DD99A /* libsmime3.dylib */; };
3F44AF7905BDFBA000CB4B08 /* libsoftokn3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C350228B91F013DD99A /* libsoftokn3.dylib */; };
3F44AF7A05BDFBA000CB4B08 /* libssl3.dylib in Copy Security Libraries */ = {isa = PBXBuildFile; fileRef = F5247C360228B91F013DD99A /* libssl3.dylib */; };
3F44AF7C05BDFBA000CB4B08 /* pipboot.xpt in Copy Security Components */ = {isa = PBXBuildFile; fileRef = F5247C4C0228BBB2013DD99A /* pipboot.xpt */; };
3F44AF7D05BDFBA000CB4B08 /* pipnss.xpt in Copy Security Components */ = {isa = PBXBuildFile; fileRef = F5247C4D0228BBB2013DD99A /* pipnss.xpt */; };
- 3F44AF7F05BDFBA000CB4B08 /* pipnss.jar in Copy Security Chrome */ = {isa = PBXBuildFile; fileRef = F54EF7ED022A2F9C01A80165 /* pipnss.jar */; };
+ 3F44AF7F05BDFBA000CB4B08 /* en-US.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = F54EF7ED022A2F9C01A80165 /* en-US.jar */; };
3F44AF8705BDFBA000CB4B08 /* libxpcom.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F57F0F470209DF5301A967DF /* libxpcom.dylib */; };
3F44AF8905BDFBA000CB4B08 /* libmozjs.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD637F01B30EA301A962F7 /* libmozjs.dylib */; };
3F44AF8A05BDFBA000CB4B08 /* libnspr4.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638001B30EA301A962F7 /* libnspr4.dylib */; };
3F44AF8B05BDFBA000CB4B08 /* libplc4.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638101B30EA301A962F7 /* libplc4.dylib */; };
3F44AF8C05BDFBA000CB4B08 /* libplds4.dylib in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F6BD638201B30EA301A962F7 /* libplds4.dylib */; };
- 3F44AF8D05BDFBA000CB4B08 /* libwidget.rsrc in Copy Libraries */ = {isa = PBXBuildFile; fileRef = F5F14E9602A5A43A01A967F3 /* libwidget.rsrc */; };
- 3F44AF9305BDFBA000CB4B08 /* PrintPDE.plugin in Copy Plugins */ = {isa = PBXBuildFile; fileRef = 7919FCF0044631350000010E /* PrintPDE.plugin */; };
3F44AF9605BDFBA000CB4B08 /* libembed_base_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F51D9B2D0209573701A80166 /* libembed_base_s.a */; };
3F44AF9705BDFBA000CB4B08 /* libnecko.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F242602AC706801A967F3 /* libnecko.a */; };
3F44AF9905BDFBA000CB4B08 /* libuconv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F242B02AC706801A967F3 /* libuconv.a */; };
3F44AF9A05BDFBA000CB4B08 /* libxpconnect.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F243302AC706801A967F3 /* libxpconnect.a */; };
3F44AF9B05BDFBA000CB4B08 /* libcaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F244502AC714601A967F3 /* libcaps.a */; };
3F44AF9C05BDFBA000CB4B08 /* libchrome.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F244602AC714601A967F3 /* libchrome.a */; };
3F44AF9E05BDFBA000CB4B08 /* libhtmlpars.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F244902AC714601A967F3 /* libhtmlpars.a */; };
3F44AF9F05BDFBA000CB4B08 /* libimglib2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F244D02AC714601A967F3 /* libimglib2.a */; };
3F44AFA005BDFBA000CB4B08 /* libpref.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F245002AC714601A967F3 /* libpref.a */; };
3F44AFA105BDFBA000CB4B08 /* librdf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F245102AC714601A967F3 /* librdf.a */; };
3F44AFA205BDFBA000CB4B08 /* libdocshell.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F246002AC723001A967F3 /* libdocshell.a */; };
3F44AFA405BDFBA000CB4B08 /* libembedcomponents.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F246202AC723001A967F3 /* libembedcomponents.a */; };
3F44AFA505BDFBA000CB4B08 /* libgklayout.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F246402AC723001A967F3 /* libgklayout.a */; };
3F44AFA605BDFBA000CB4B08 /* libgkplugin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F246502AC723001A967F3 /* libgkplugin.a */; };
- 3F44AFA805BDFBA000CB4B08 /* libmork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F246B02AC723001A967F3 /* libmork.a */; };
3F44AFAA05BDFBA000CB4B08 /* libtxmgr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F247002AC723001A967F3 /* libtxmgr.a */; };
3F44AFAB05BDFBA000CB4B08 /* libwebbrwsr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F247302AC723001A967F3 /* libwebbrwsr.a */; };
3F44AFAC05BDFBA000CB4B08 /* libwidget_mac.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F247402AC723001A967F3 /* libwidget_mac.a */; };
3F44AFAD05BDFBA000CB4B08 /* libappcomps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F248B02AC729901A967F3 /* libappcomps.a */; };
- 3F44AFAD05BDFBA000CB4B09 /* libxpautocomplete.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F248B02AC729901A967F4 /* libxpautocomplete.a */; };
3F44AFAE05BDFBA000CB4B08 /* libcookie.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F248C02AC729901A967F3 /* libcookie.a */; };
3F44AFAF05BDFBA000CB4B08 /* libpipboot.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F248F02AC729901A967F3 /* libpipboot.a */; };
3F44AFB005BDFBA000CB4B08 /* libpipnss.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F249002AC729901A967F3 /* libpipnss.a */; };
- 3F44AFB105BDFBA000CB4B08 /* libxmlextras.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F56F249402AC729901A967F3 /* libxmlextras.a */; };
3F44AFB205BDFBA000CB4B08 /* libcrmf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F507423C02AD808201A967F3 /* libcrmf.a */; };
3F44AFB305BDFBA000CB4B08 /* libgkgfx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F524EF6702AD8B9301A967F3 /* libgkgfx.a */; };
3F44AFB405BDFBA000CB4B08 /* libunicharutil_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F5C2CDA702383CE601A967DF /* libunicharutil_s.a */; };
3F44AFB505BDFBA000CB4B08 /* liboji.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F54AD84402C115D901A967F3 /* liboji.a */; };
3F44AFB605BDFBA000CB4B08 /* libuniversalchardet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F5E47654030C5FD501A967F3 /* libuniversalchardet.a */; };
- 3F44AFB705BDFBA000CB4B08 /* libsuitetypeaheadfind.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7FD31C90466004E00A80196 /* libsuitetypeaheadfind.a */; };
3F44AFB805BDFBA000CB4B08 /* libi18n.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7E5D960041A07C900A967F8 /* libi18n.a */; };
3F44AFB905BDFBA000CB4B08 /* libjar50.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7C1276F0495618300A967F8 /* libjar50.a */; };
- 3F44AFBA05BDFBA000CB4B08 /* libgfxshared_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A72CB3D8041A0BA100A967F8 /* libgfxshared_s.a */; };
3F44AFBB05BDFBA000CB4B08 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
3F44AFBC05BDFBA000CB4B08 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F557193A022B4102010001CA /* PreferencePanes.framework */; };
3F44AFBD05BDFBA000CB4B08 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F52D5CDB027D412A01A80166 /* Carbon.framework */; };
3F44AFBE05BDFBA000CB4B08 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5FEDBCB02AD8DD101A967F3 /* QuickTime.framework */; };
3F44AFBF05BDFBA000CB4B08 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F52D5CDC027D412A01A80166 /* CoreFoundation.framework */; };
3F44AFC005BDFBA000CB4B08 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F52D5CDD027D412A01A80166 /* SystemConfiguration.framework */; };
3F44AFC205BDFBA000CB4B08 /* libucvutil_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FEBFCA1044F989900A96652 /* libucvutil_s.a */; };
3F44AFC305BDFBA000CB4B08 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F558E950552122E006156FD /* IOKit.framework */; };
@@ -916,18 +895,18 @@
4D29957E0869C44B00E84287 /* libxpcom.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F57F0F470209DF5301A967DF /* libxpcom.dylib */; };
4D2995800869C44B00E84287 /* libxpcom_core.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F12FC56072E8ECB00995ED9 /* libxpcom_core.dylib */; };
4D2996660869C5FA00E84287 /* libmozz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FE5B9FC068A090F0001CECD /* libmozz.dylib */; };
4D2996670869C5FA00E84287 /* libnspr4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F6BD638001B30EA301A962F7 /* libnspr4.dylib */; };
4D2996680869C5FA00E84287 /* libplc4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F6BD638101B30EA301A962F7 /* libplc4.dylib */; };
4D2996690869C5FA00E84287 /* libplds4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F6BD638201B30EA301A962F7 /* libplds4.dylib */; };
4D29966A0869C5FA00E84287 /* libxpcom.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F57F0F470209DF5301A967DF /* libxpcom.dylib */; };
4D29966B0869C5FA00E84287 /* libxpcom_core.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F12FC56072E8ECB00995ED9 /* libxpcom_core.dylib */; };
- 4D5881770864B28D001305B3 /* Default Plugin.plugin in Copy Gecko Plugins */ = {isa = PBXBuildFile; fileRef = F56610BC0394775201A9666E /* Default Plugin.plugin */; };
- 4D58817B0864B2AE001305B3 /* Default Plugin.plugin in Copy Gecko Plugins */ = {isa = PBXBuildFile; fileRef = F56610BC0394775201A9666E /* Default Plugin.plugin */; };
+ 4D5881770864B28D001305B3 /* DefaultPlugin.plugin in Copy Gecko Plugins */ = {isa = PBXBuildFile; fileRef = F56610BC0394775201A9666E /* DefaultPlugin.plugin */; };
+ 4D58817B0864B2AE001305B3 /* DefaultPlugin.plugin in Copy Gecko Plugins */ = {isa = PBXBuildFile; fileRef = F56610BC0394775201A9666E /* DefaultPlugin.plugin */; };
4DC28F5E099184B80081939B /* libucvmath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC28F5D099184B80081939B /* libucvmath.a */; };
4DC41D3F0869D7A400947044 /* libjsj.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC41D3C0869D7A400947044 /* libjsj.a */; };
4DC41D400869D7A400947044 /* libmozjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC41D3D0869D7A400947044 /* libmozjpeg.a */; };
4DC41D410869D7A400947044 /* libmozpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC41D3E0869D7A400947044 /* libmozpng.a */; };
4DC41D410869D7A400947045 /* libmozcairo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC41D3E0869D7A400947045 /* libmozcairo.a */; };
4DC41D410869D7A400947046 /* libmozlibpixman.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC41D3E0869D7A400947046 /* libmozlibpixman.a */; };
4DD0EFF709918B3200B6BBFD /* mathml.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = 0E6A9886097DFFD4007962C1 /* mathml.css */; };
4DD0EFF809918BCF00B6BBFD /* mathml.dtd in Copy Gecko DTDs */ = {isa = PBXBuildFile; fileRef = 0E6A9888097DFFF4007962C1 /* mathml.dtd */; };
@@ -1003,20 +982,29 @@
82CE28BC0736618A00B4DE07 /* table-remove-row.gif in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = 82CE28830736615300B4DE07 /* table-remove-row.gif */; };
82CE28C0073661F600B4DE07 /* EditorOverride.css in Copy Gecko Resources */ = {isa = PBXBuildFile; fileRef = 82CE28BD073661E300B4DE07 /* EditorOverride.css */; };
82CE28C7073662B400B4DE07 /* composer.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = 82CE28C40736625800B4DE07 /* composer.xpt */; };
82CE28CB0736634A00B4DE07 /* txmgr.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = 82CE28C80736633900B4DE07 /* txmgr.xpt */; };
B3128A110E5D14C8009F0595 /* pageBigger.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B3757F860E5D0FE70006EDF1 /* pageBigger.tiff */; };
B3128A120E5D14C8009F0595 /* pageBigger.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B3757F860E5D0FE70006EDF1 /* pageBigger.tiff */; };
B3128A130E5D14CD009F0595 /* pageSmaller.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B3757F870E5D0FE70006EDF1 /* pageSmaller.tiff */; };
B3128A140E5D14CE009F0595 /* pageSmaller.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B3757F870E5D0FE70006EDF1 /* pageSmaller.tiff */; };
+ B33032C910AE16D7002FA0A7 /* libmorkreader_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B33032C810AE16D7002FA0A7 /* libmorkreader_s.a */; };
+ B33032CA10AE16D7002FA0A7 /* libmorkreader_s.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B33032C810AE16D7002FA0A7 /* libmorkreader_s.a */; };
+ B33032CC10AE178E002FA0A7 /* places.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = B33032AE10AE166F002FA0A7 /* places.xpt */; };
+ B33032D510AE17A7002FA0A7 /* places.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = B33032AE10AE166F002FA0A7 /* places.xpt */; };
+ B33032F610AE17C9002FA0A7 /* nsLivemarkService.js in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = B33032AA10AE15EA002FA0A7 /* nsLivemarkService.js */; };
+ B33032F710AE17F1002FA0A7 /* nsLivemarkService.js in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = B33032AA10AE15EA002FA0A7 /* nsLivemarkService.js */; };
+ B330336310AE1C60002FA0A7 /* libplaces.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = B330336010AE1C4C002FA0A7 /* libplaces.dylib */; };
B386FC3110CF5AF30094DAAB /* NSMenu+Gecko.mm in Sources */ = {isa = PBXBuildFile; fileRef = B386FC3010CF5AF30094DAAB /* NSMenu+Gecko.mm */; };
B386FC3210CF5AF30094DAAB /* NSMenu+Gecko.mm in Sources */ = {isa = PBXBuildFile; fileRef = B386FC3010CF5AF30094DAAB /* NSMenu+Gecko.mm */; };
B3886D880F79D53700D8E015 /* FlashblockWhitelistManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3886D870F79D53700D8E015 /* FlashblockWhitelistManager.mm */; };
B3886D890F79D53700D8E015 /* FlashblockWhitelistManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3886D870F79D53700D8E015 /* FlashblockWhitelistManager.mm */; };
+ B3C5B28B1123BA15002E4C7B /* nsPlacesDBFlush.js in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = B3C5B25C1123B9A5002E4C7B /* nsPlacesDBFlush.js */; };
+ B3C5B2B11123BA33002E4C7B /* nsPlacesDBFlush.js in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = B3C5B25C1123B9A5002E4C7B /* nsPlacesDBFlush.js */; };
C713F0900E9AF7DB002313B3 /* CHSlidingViewAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C713F08E0E9AF7DB002313B3 /* CHSlidingViewAnimation.m */; };
C713F0910E9AF7DB002313B3 /* CHSlidingViewAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C713F08E0E9AF7DB002313B3 /* CHSlidingViewAnimation.m */; };
C79573880D35314D0028A773 /* XMLSearchPluginParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C79573840D35314D0028A773 /* XMLSearchPluginParser.mm */; };
C795738A0D35314D0028A773 /* OpenSearchParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C79573860D35314D0028A773 /* OpenSearchParser.mm */; };
C795738C0D35314D0028A773 /* XMLSearchPluginParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C79573840D35314D0028A773 /* XMLSearchPluginParser.mm */; };
C795738E0D35314D0028A773 /* OpenSearchParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C79573860D35314D0028A773 /* OpenSearchParser.mm */; };
C7AB1EA00EEC5FEB0053A08A /* NSTextView+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = C7AB1E9E0EEC5FEB0053A08A /* NSTextView+Utils.m */; };
C7AB1EA10EEC5FEB0053A08A /* NSTextView+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = C7AB1E9E0EEC5FEB0053A08A /* NSTextView+Utils.m */; };
@@ -1061,16 +1049,35 @@
DE1EBDBF0D066F5100BE9ECC /* mathfontSTIXSize1.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBB0D066F5100BE9ECC /* mathfontSTIXSize1.properties */; };
DE1EBDC00D066F5100BE9ECC /* mathfontSTIXNonUnicode.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBC0D066F5100BE9ECC /* mathfontSTIXNonUnicode.properties */; };
DE1EBDC10D066F5100BE9ECC /* mathfontStandardSymbolsL.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBD0D066F5100BE9ECC /* mathfontStandardSymbolsL.properties */; };
DE1EBDC20D066F5100BE9ECC /* mathfontUnicode.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBA0D066F5100BE9ECC /* mathfontUnicode.properties */; };
DE1EBDC30D066F5100BE9ECC /* mathfontSTIXSize1.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBB0D066F5100BE9ECC /* mathfontSTIXSize1.properties */; };
DE1EBDC40D066F5100BE9ECC /* mathfontSTIXNonUnicode.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBC0D066F5100BE9ECC /* mathfontSTIXNonUnicode.properties */; };
DE1EBDC50D066F5100BE9ECC /* mathfontStandardSymbolsL.properties in Copy Gecko Fonts */ = {isa = PBXBuildFile; fileRef = DE1EBDBD0D066F5100BE9ECC /* mathfontStandardSymbolsL.properties */; };
DE2AC7180F33EBAB009C0A42 /* libcaminosafebrowsing.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DE2AC6EC0F33EB8F009C0A42 /* libcaminosafebrowsing.a */; };
+ DE317877111E3D7F00A9D40A /* classic.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE317876111E3D7F00A9D40A /* classic.jar */; };
+ DE317878111E3D7F00A9D40A /* classic.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE317876111E3D7F00A9D40A /* classic.jar */; };
+ DE317881111E3E6700A9D40A /* flashblock.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787B111E3E6700A9D40A /* flashblock.manifest */; };
+ DE317882111E3E6700A9D40A /* toolkit.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787C111E3E6700A9D40A /* toolkit.manifest */; };
+ DE317883111E3E6700A9D40A /* en-US.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787D111E3E6700A9D40A /* en-US.manifest */; };
+ DE317884111E3E6700A9D40A /* comm.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787E111E3E6700A9D40A /* comm.manifest */; };
+ DE317885111E3E6700A9D40A /* comm.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787F111E3E6700A9D40A /* comm.jar */; };
+ DE317886111E3E6700A9D40A /* classic.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE317880111E3E6700A9D40A /* classic.manifest */; };
+ DE317887111E3E6700A9D40A /* flashblock.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787B111E3E6700A9D40A /* flashblock.manifest */; };
+ DE317888111E3E6700A9D40A /* toolkit.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787C111E3E6700A9D40A /* toolkit.manifest */; };
+ DE317889111E3E6700A9D40A /* en-US.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787D111E3E6700A9D40A /* en-US.manifest */; };
+ DE31788A111E3E6700A9D40A /* comm.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787E111E3E6700A9D40A /* comm.manifest */; };
+ DE31788B111E3E6700A9D40A /* comm.jar in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE31787F111E3E6700A9D40A /* comm.jar */; };
+ DE31788C111E3E6700A9D40A /* classic.manifest in Copy Chrome */ = {isa = PBXBuildFile; fileRef = DE317880111E3E6700A9D40A /* classic.manifest */; };
+ DE317964111E87E700A9D40A /* libmozqcms.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DE317963111E87E700A9D40A /* libmozqcms.a */; };
+ DE3179DA111E91E100A9D40A /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE3179D9111E91E100A9D40A /* AudioUnit.framework */; };
+ DE317B89111F71F000A9D40A /* libplaces.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DE317B88111F71F000A9D40A /* libplaces.a */; };
+ DE317C3A111F7DF300A9D40A /* dom_threads.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = DE317C39111F7DF300A9D40A /* dom_threads.xpt */; };
+ DE317C3B111F7DF300A9D40A /* dom_threads.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = DE317C39111F7DF300A9D40A /* dom_threads.xpt */; };
DE4025950FF4345D00568817 /* ServicesMenu.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE4025930FF4345D00568817 /* ServicesMenu.strings */; };
DE4025960FF4345D00568817 /* ServicesMenu.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE4025930FF4345D00568817 /* ServicesMenu.strings */; };
DE40444B0ED09D1E00057E17 /* pipnss_locale_security_properties.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE4044060ED09D1E00057E17 /* pipnss_locale_security_properties.strings */; };
DE40444C0ED09D1E00057E17 /* global_locale_layout_MediaDocument_properties.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE4044080ED09D1E00057E17 /* global_locale_layout_MediaDocument_properties.strings */; };
DE40444D0ED09D1E00057E17 /* global_locale_plugins_properties.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE40440A0ED09D1E00057E17 /* global_locale_plugins_properties.strings */; };
DE40444F0ED09D1E00057E17 /* global_locale_css_properties.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE40440E0ED09D1E00057E17 /* global_locale_css_properties.strings */; };
DE4044510ED09D1E00057E17 /* global_locale_layout_xmlparser_properties.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE4044120ED09D1E00057E17 /* global_locale_layout_xmlparser_properties.strings */; };
DE4044530ED09D1E00057E17 /* pipnss_locale_pipnss_properties.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE4044160ED09D1E00057E17 /* pipnss_locale_pipnss_properties.strings */; };
@@ -1169,16 +1176,18 @@
DEDDE2930ABFB4B400D415F2 /* libchardet.dylib in Copy Component Libraries */ = {isa = PBXBuildFile; fileRef = DEDDE22D0ABFB21A00D415F2 /* libchardet.dylib */; };
DEDDE3CC0ABFB97A00D415F2 /* libchardet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DEDDE3310ABFB7E500D415F2 /* libchardet.a */; };
DEE34A570B84F5E100BCD687 /* FileChangeWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = DEE34A560B84F5E100BCD687 /* FileChangeWatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-exceptions"; }; };
DEE34A580B84F5E100BCD687 /* FileChangeWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = DEE34A560B84F5E100BCD687 /* FileChangeWatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-exceptions"; }; };
DEE8101E0EFB7D2E006ACC7D /* aquaSelect.css in Resources */ = {isa = PBXBuildFile; fileRef = DEE8101D0EFB7D2E006ACC7D /* aquaSelect.css */; };
DEE8101F0EFB7D2E006ACC7D /* aquaSelect.css in Resources */ = {isa = PBXBuildFile; fileRef = DEE8101D0EFB7D2E006ACC7D /* aquaSelect.css */; };
DEE9EBA70AF5C390002BC511 /* SessionManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = DEE9EBA60AF5C390002BC511 /* SessionManager.mm */; };
DEE9EBA80AF5C390002BC511 /* SessionManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = DEE9EBA60AF5C390002BC511 /* SessionManager.mm */; };
+ DEF2115E1128FF4B00C32DAA /* PlacesDBUtils.jsm in Copy Gecko Modules */ = {isa = PBXBuildFile; fileRef = DEF2115D1128FF4B00C32DAA /* PlacesDBUtils.jsm */; };
+ DEF2115F1128FF4B00C32DAA /* PlacesDBUtils.jsm in Copy Gecko Modules */ = {isa = PBXBuildFile; fileRef = DEF2115D1128FF4B00C32DAA /* PlacesDBUtils.jsm */; };
DEFAA3440F241C1600BD51C1 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEFAA3430F241C1600BD51C1 /* Growl.framework */; };
DEFAA3450F241C1600BD51C1 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEFAA3430F241C1600BD51C1 /* Growl.framework */; };
DEFAA34D0F241C3C00BD51C1 /* Growl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = DEFAA3430F241C1600BD51C1 /* Growl.framework */; };
DEFAA34F0F241C4F00BD51C1 /* Growl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = DEFAA3430F241C1600BD51C1 /* Growl.framework */; };
DEFD23500D021C3A006899B9 /* dom_loadsave.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = DEFD234F0D021C3A006899B9 /* dom_loadsave.xpt */; };
DEFD23510D021C3A006899B9 /* dom_loadsave.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = DEFD234F0D021C3A006899B9 /* dom_loadsave.xpt */; };
DEFD23530D021C48006899B9 /* dom_storage.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = DEFD23520D021C48006899B9 /* dom_storage.xpt */; };
DEFD23540D021C48006899B9 /* dom_storage.xpt in Copy Component XPTs */ = {isa = PBXBuildFile; fileRef = DEFD23520D021C48006899B9 /* dom_storage.xpt */; };
@@ -1630,27 +1639,29 @@
/* Begin PBXCopyFilesBuildPhase section */
0098B17D0CAEA96800DA0F2F /* Copy Gecko Modules */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = modules;
dstSubfolderSpec = 6;
files = (
+ DEF2115F1128FF4B00C32DAA /* PlacesDBUtils.jsm in Copy Gecko Modules */,
0098B1800CAEA9DC00DA0F2F /* XPCOMUtils.jsm in Copy Gecko Modules */,
);
name = "Copy Gecko Modules";
runOnlyForDeploymentPostprocessing = 0;
};
0098B1810CAEA9EA00DA0F2F /* Copy Gecko Modules */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = modules;
dstSubfolderSpec = 6;
files = (
+ DEF2115E1128FF4B00C32DAA /* PlacesDBUtils.jsm in Copy Gecko Modules */,
0098B1830CAEAA0200DA0F2F /* XPCOMUtils.jsm in Copy Gecko Modules */,
);
name = "Copy Gecko Modules";
runOnlyForDeploymentPostprocessing = 0;
};
0098B1F60CAEC4FD00DA0F2F /* Copy Profile Defaults */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -1689,49 +1700,48 @@
runOnlyForDeploymentPostprocessing = 0;
};
0F66E4AC07D6D9B000444E2A /* Copy Component Libraries */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = components;
dstSubfolderSpec = 6;
files = (
+ B33032F610AE17C9002FA0A7 /* nsLivemarkService.js in Copy Component Libraries */,
+ B3C5B28B1123BA15002E4C7B /* nsPlacesDBFlush.js in Copy Component Libraries */,
+ B330336310AE1C60002FA0A7 /* libplaces.dylib in Copy Component Libraries */,
DE62E4300B72B3D200142851 /* libauth.dylib in Copy Component Libraries */,
E4C7D98C0A32108500B455AD /* libspellchecker.dylib in Copy Component Libraries */,
DEDDE2930ABFB4B400D415F2 /* libchardet.dylib in Copy Component Libraries */,
008115480B1811F0001CB3F0 /* libgkgfxthebes.dylib in Copy Component Libraries */,
0E6A98A1097E0091007962C1 /* libucvmath.dylib in Copy Component Libraries */,
82180ACB07368BF2002EFA6D /* libcomposer.dylib in Copy Component Libraries */,
3F44ACD605BDFB9F00CB4B08 /* libappcomps.dylib in Copy Component Libraries */,
- 3F44ACD605BDFB9F00CB4B09 /* libxpautocomplete.dylib in Copy Component Libraries */,
3F44ACD805BDFB9F00CB4B08 /* libtxmgr.dylib in Copy Component Libraries */,
3F44ACE705BDFB9F00CB4B08 /* libcaps.dylib in Copy Component Libraries */,
3F44ACE805BDFB9F00CB4B08 /* libchrome.dylib in Copy Component Libraries */,
3F44ACE905BDFB9F00CB4B08 /* libcookie.dylib in Copy Component Libraries */,
3F44ACEA05BDFB9F00CB4B08 /* libdocshell.dylib in Copy Component Libraries */,
3F44ACEC05BDFB9F00CB4B08 /* libembedcomponents.dylib in Copy Component Libraries */,
- 3F44ACEE05BDFB9F00CB4B08 /* libmork.dylib in Copy Component Libraries */,
3F44ACEF05BDFB9F00CB4B08 /* libwebbrwsr.dylib in Copy Component Libraries */,
3F44ACFA05BDFB9F00CB4B08 /* libgklayout.dylib in Copy Component Libraries */,
3F44ACFB05BDFB9F00CB4B08 /* libhtmlpars.dylib in Copy Component Libraries */,
3F44ACFC05BDFB9F00CB4B08 /* libjar50.dylib in Copy Component Libraries */,
3F44ACFD05BDFB9F00CB4B08 /* libnecko.dylib in Copy Component Libraries */,
DED015FA0D84C5B00017CFE5 /* libimgicon.dylib in Copy Component Libraries */,
3F44AD0B05BDFB9F00CB4B08 /* libimglib2.dylib in Copy Component Libraries */,
3F44AD0C05BDFB9F00CB4B08 /* libpref.dylib in Copy Component Libraries */,
3F44AD0E05BDFB9F00CB4B08 /* librdf.dylib in Copy Component Libraries */,
3F44AD0F05BDFB9F00CB4B08 /* libuconv.dylib in Copy Component Libraries */,
3F44AD1005BDFB9F00CB4B08 /* libuniversalchardet.dylib in Copy Component Libraries */,
3F44AD1105BDFB9F00CB4B08 /* libwidget_mac.dylib in Copy Component Libraries */,
3F44AD1205BDFB9F00CB4B08 /* libxpconnect.dylib in Copy Component Libraries */,
3F44AD2305BDFB9F00CB4B08 /* libgkplugin.dylib in Copy Component Libraries */,
3F44AD2605BDFB9F00CB4B08 /* liboji.dylib in Copy Component Libraries */,
3F44AD2905BDFB9F00CB4B08 /* libi18n.dylib in Copy Component Libraries */,
- 3F44AD2A05BDFB9F00CB4B08 /* libxmlextras.dylib in Copy Component Libraries */,
- 3F44AD2B05BDFB9F00CB4B08 /* libsuitetypeaheadfind.dylib in Copy Component Libraries */,
0F518833088592020091F3FB /* libpermissions.dylib in Copy Component Libraries */,
DEC87B100C2882DC002EB106 /* libstoragecomps.dylib in Copy Component Libraries */,
C7DE8E2F0F30D2AD00CD3872 /* libcaminosafebrowsing.dylib in Copy Component Libraries */,
3F44AD2705BDFB9F00CB4B08 /* nsProxyAutoConfig.js in Copy Component Libraries */,
0098B1230CAEA77500DA0F2F /* nsHandlerService.js in Copy Component Libraries */,
C7DE8E300F30D2C100CD3872 /* nsUrlClassifierListManager.js in Copy Component Libraries */,
C7DE8E310F30D2C100CD3872 /* nsUrlClassifierLib.js in Copy Component Libraries */,
);
@@ -1765,30 +1775,33 @@
runOnlyForDeploymentPostprocessing = 0;
};
3386CD380CB18D6A00B8E89D /* Copy Component Libraries */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = components;
dstSubfolderSpec = 6;
files = (
+ B33032F710AE17F1002FA0A7 /* nsLivemarkService.js in Copy Component Libraries */,
+ B3C5B2B11123BA33002E4C7B /* nsPlacesDBFlush.js in Copy Component Libraries */,
3F44AF4405BDFBA000CB4B08 /* nsProxyAutoConfig.js in Copy Component Libraries */,
0098B12A0CAEA81700DA0F2F /* nsHandlerService.js in Copy Component Libraries */,
C7DE8E4B0F30D41500CD3872 /* nsUrlClassifierListManager.js in Copy Component Libraries */,
C7DE8E4C0F30D41500CD3872 /* nsUrlClassifierLib.js in Copy Component Libraries */,
);
name = "Copy Component Libraries";
runOnlyForDeploymentPostprocessing = 0;
};
3F44ACCF05BDFB9E00CB4B08 /* Copy Component XPTs */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = components;
dstSubfolderSpec = 6;
files = (
+ B33032CC10AE178E002FA0A7 /* places.xpt in Copy Component XPTs */,
E4C7D99F0A32109D00B455AD /* spellchecker.xpt in Copy Component XPTs */,
0F66E4A807D6D8D500444E2A /* intl.xpt in Copy Component XPTs */,
82180AC607368B03002EFA6D /* txmgr.xpt in Copy Component XPTs */,
82180AC707368B03002EFA6D /* composer.xpt in Copy Component XPTs */,
82AC0D65065A602200776B02 /* dom_xpath.xpt in Copy Component XPTs */,
DEFD23590D021C63006899B9 /* content_html.xpt in Copy Component XPTs */,
DEFD235A0D021C63006899B9 /* content_htmldoc.xpt in Copy Component XPTs */,
DEFD23580D021C63006899B9 /* content_xmldoc.xpt in Copy Component XPTs */,
@@ -1803,16 +1816,17 @@
3F44ACDD05BDFB9F00CB4B08 /* dom_events.xpt in Copy Component XPTs */,
3F44ACDE05BDFB9F00CB4B08 /* dom_html.xpt in Copy Component XPTs */,
DE8EEA0C0D39A2A500BB96C1 /* dom_json.xpt in Copy Component XPTs */,
DEFD23500D021C3A006899B9 /* dom_loadsave.xpt in Copy Component XPTs */,
3F44ACDF05BDFB9F00CB4B08 /* dom_range.xpt in Copy Component XPTs */,
DEFD23530D021C48006899B9 /* dom_storage.xpt in Copy Component XPTs */,
3F44ACE005BDFB9F00CB4B08 /* dom_stylesheets.xpt in Copy Component XPTs */,
3F44ACE005BDFB9F00CB4C08 /* dom_svg.xpt in Copy Component XPTs */,
+ DE317C3B111F7DF300A9D40A /* dom_threads.xpt in Copy Component XPTs */,
3F44ACE105BDFB9F00CB4B08 /* dom_traversal.xpt in Copy Component XPTs */,
3F44ACE205BDFB9F00CB4B08 /* dom_views.xpt in Copy Component XPTs */,
3F44ACE305BDFB9F00CB4B08 /* dom_xbl.xpt in Copy Component XPTs */,
3F44ACE405BDFB9F00CB4B08 /* dom_xul.xpt in Copy Component XPTs */,
3F44ACE505BDFB9F00CB4B08 /* dom.xpt in Copy Component XPTs */,
DE878FCD0C175ABB00153511 /* dom_offline.xpt in Copy Component XPTs */,
0098B19F0CAEAB0100DA0F2F /* exthandler.xpt in Copy Component XPTs */,
3F44ACE605BDFB9F00CB4B08 /* gfx.xpt in Copy Component XPTs */,
@@ -1853,17 +1867,16 @@
3F44AD1D05BDFB9F00CB4B08 /* xpcom_io.xpt in Copy Component XPTs */,
DEC17FE70F9E8269001E43F1 /* xpcom_system.xpt in Copy Component XPTs */,
3F44AD1E05BDFB9F00CB4B08 /* xpcom_threads.xpt in Copy Component XPTs */,
3F44AD1F05BDFB9F00CB4B08 /* xpcom_xpti.xpt in Copy Component XPTs */,
3F44AD2005BDFB9F00CB4B08 /* xpconnect.xpt in Copy Component XPTs */,
3F44AD2105BDFB9F00CB4B08 /* embed_base.xpt in Copy Component XPTs */,
3F44AD2205BDFB9F00CB4B08 /* imglib2.xpt in Copy Component XPTs */,
3F44AD2405BDFB9F00CB4B08 /* xuldoc.xpt in Copy Component XPTs */,
- 3F44AD2C05BDFB9F00CB4B08 /* suitetypeaheadfind.xpt in Copy Component XPTs */,
3F44ADB105BDFB9F00CB4B08 /* layout_printing.xpt in Copy Component XPTs */,
33E1EA990D358DFA00910BBD /* caminosearch.xpt in Copy Component XPTs */,
);
name = "Copy Component XPTs";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AD2D05BDFB9F00CB4B08 /* Copy Gecko Resources */ = {
isa = PBXCopyFilesBuildPhase;
@@ -1892,18 +1905,18 @@
82180AC107368AD7002EFA6D /* table-remove-row-active.gif in Copy Gecko Resources */,
82180AC207368AD7002EFA6D /* table-remove-row-hover.gif in Copy Gecko Resources */,
82180AC307368AD7002EFA6D /* table-remove-row.gif in Copy Gecko Resources */,
3F44AD2E05BDFB9F00CB4B08 /* charsetalias.properties in Copy Gecko Resources */,
3F44AD2F05BDFB9F00CB4B08 /* charsetData.properties in Copy Gecko Resources */,
3F44AD3005BDFB9F00CB4B08 /* langGroups.properties in Copy Gecko Resources */,
3F44AD3105BDFB9F00CB4B08 /* language.properties in Copy Gecko Resources */,
3F44AD3205BDFB9F00CB4B08 /* maccharset.properties in Copy Gecko Resources */,
- 3F44AD3305BDFB9F00CB4B08 /* broken-image.gif in Copy Gecko Resources */,
- 3F44AD3405BDFB9F00CB4B08 /* loading-image.gif in Copy Gecko Resources */,
+ 3F44AD3305BDFB9F00CB4B08 /* broken-image.png in Copy Gecko Resources */,
+ 3F44AD3405BDFB9F00CB4B08 /* loading-image.png in Copy Gecko Resources */,
3F44AD3505BDFB9F00CB4B08 /* forms.css in Copy Gecko Resources */,
3312BF360C84C2D4000E6965 /* arrow.gif in Copy Gecko Resources */,
3312BF370C84C2D4000E6965 /* arrowd.gif in Copy Gecko Resources */,
3F44AD3705BDFB9F00CB4B08 /* html.css in Copy Gecko Resources */,
3F44AD3805BDFB9F00CB4B08 /* quirk.css in Copy Gecko Resources */,
3F44AD3805BDFB9F00CB4C08 /* svg.css in Copy Gecko Resources */,
3F44AD3905BDFB9F00CB4B08 /* ua.css in Copy Gecko Resources */,
3F44AD3A05BDFB9F00CB4B08 /* viewsource.css in Copy Gecko Resources */,
@@ -1964,19 +1977,26 @@
runOnlyForDeploymentPostprocessing = 0;
};
3F44AD5705BDFB9F00CB4B08 /* Copy Chrome */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = chrome;
dstSubfolderSpec = 6;
files = (
- 3F44AD5805BDFB9F00CB4B08 /* embed.jar in Copy Chrome */,
+ DE317877111E3D7F00A9D40A /* classic.jar in Copy Chrome */,
+ DE317885111E3E6700A9D40A /* comm.jar in Copy Chrome */,
+ 3F44AD7005BDFB9F00CB4B08 /* en-US.jar in Copy Chrome */,
3F44AD5805BDFB9F00CB4B18 /* flashblock.jar in Copy Chrome */,
- 3F44AD5905BDFB9F00CB4B08 /* installed-chrome.txt in Copy Chrome */,
+ 3F44AD5805BDFB9F00CB4B08 /* toolkit.jar in Copy Chrome */,
+ DE317886111E3E6700A9D40A /* classic.manifest in Copy Chrome */,
+ DE317884111E3E6700A9D40A /* comm.manifest in Copy Chrome */,
+ DE317883111E3E6700A9D40A /* en-US.manifest in Copy Chrome */,
+ DE317881111E3E6700A9D40A /* flashblock.manifest in Copy Chrome */,
+ DE317882111E3E6700A9D40A /* toolkit.manifest in Copy Chrome */,
);
name = "Copy Chrome";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AD5A05BDFB9F00CB4B08 /* Copy Security Libraries */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -2005,19 +2025,17 @@
3FE5BA0D068A1A6F0001CECD /* libmozz.dylib in Copy Libraries */,
3F44AD6105BDFB9F00CB4B08 /* libxpcom.dylib in Copy Libraries */,
3F44AD6305BDFB9F00CB4B08 /* libmozjs.dylib in Copy Libraries */,
3F44AD6405BDFB9F00CB4B08 /* libnspr4.dylib in Copy Libraries */,
3F44AD6505BDFB9F00CB4B08 /* libplc4.dylib in Copy Libraries */,
3F44AD6605BDFB9F00CB4B08 /* libplds4.dylib in Copy Libraries */,
33B7763C0C4EB32C00A6D67F /* libsqlite3.dylib in Copy Libraries */,
3F44AD6705BDFB9F00CB4B08 /* libgkgfx.dylib in Copy Libraries */,
- 3F44AD6805BDFB9F00CB4B08 /* libwidget.rsrc in Copy Libraries */,
3F44AD6905BDFB9F00CB4B08 /* libjsj.dylib in Copy Libraries */,
- 33B777980C55853B00A6D67F /* libmozlcms.dylib in Copy Libraries */,
);
name = "Copy Libraries";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AD6A05BDFB9F00CB4B08 /* Copy Security Components */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = components;
@@ -2026,27 +2044,16 @@
3F44AD6B05BDFB9F00CB4B08 /* pipboot.xpt in Copy Security Components */,
3F44AD6C05BDFB9F00CB4B08 /* pipnss.xpt in Copy Security Components */,
3F44AD6D05BDFB9F00CB4B08 /* libpipboot.dylib in Copy Security Components */,
3F44AD6E05BDFB9F00CB4B08 /* libpipnss.dylib in Copy Security Components */,
);
name = "Copy Security Components";
runOnlyForDeploymentPostprocessing = 0;
};
- 3F44AD6F05BDFB9F00CB4B08 /* Copy Security Chrome */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = chrome;
- dstSubfolderSpec = 6;
- files = (
- 3F44AD7005BDFB9F00CB4B08 /* pipnss.jar in Copy Security Chrome */,
- );
- name = "Copy Security Chrome";
- runOnlyForDeploymentPostprocessing = 0;
- };
3F44AD7705BDFB9F00CB4B08 /* Copy Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 12;
dstPath = "";
dstSubfolderSpec = 10;
files = (
7BAEF8120CCFDF3400384F4E /* Sparkle.framework in Copy Frameworks */,
DEFAA34D0F241C3C00BD51C1 /* Growl.framework in Copy Frameworks */,
@@ -2056,27 +2063,27 @@
runOnlyForDeploymentPostprocessing = 0;
};
3F44AD7A05BDFB9F00CB4B08 /* Copy Plugins */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
- 3F44AD7B05BDFB9F00CB4B08 /* PrintPDE.plugin in Copy Plugins */,
);
name = "Copy Plugins";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AF0905BDFBA000CB4B08 /* Copy Component XPTs */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = components;
dstSubfolderSpec = 6;
files = (
+ B33032D510AE17A7002FA0A7 /* places.xpt in Copy Component XPTs */,
E4C7D9A00A32109D00B455AD /* spellchecker.xpt in Copy Component XPTs */,
82CE28CB0736634A00B4DE07 /* txmgr.xpt in Copy Component XPTs */,
82CE28C7073662B400B4DE07 /* composer.xpt in Copy Component XPTs */,
828FBD97065A986900B3D52A /* dom_xpath.xpt in Copy Component XPTs */,
DEFD235C0D021C63006899B9 /* content_html.xpt in Copy Component XPTs */,
DEFD235D0D021C63006899B9 /* content_htmldoc.xpt in Copy Component XPTs */,
DEFD235B0D021C63006899B9 /* content_xmldoc.xpt in Copy Component XPTs */,
828FBD98065A986900B3D52A /* content_xslt.xpt in Copy Component XPTs */,
@@ -2090,16 +2097,17 @@
3F44AF1305BDFBA000CB4B08 /* dom_events.xpt in Copy Component XPTs */,
3F44AF1405BDFBA000CB4B08 /* dom_html.xpt in Copy Component XPTs */,
DE8EEA0D0D39A2A500BB96C1 /* dom_json.xpt in Copy Component XPTs */,
DEFD23510D021C3A006899B9 /* dom_loadsave.xpt in Copy Component XPTs */,
3F44AF1505BDFBA000CB4B08 /* dom_range.xpt in Copy Component XPTs */,
DEFD23540D021C48006899B9 /* dom_storage.xpt in Copy Component XPTs */,
3F44AF1605BDFBA000CB4B08 /* dom_stylesheets.xpt in Copy Component XPTs */,
3F44AF1605BDFBA000CB4C08 /* dom_svg.xpt in Copy Component XPTs */,
+ DE317C3A111F7DF300A9D40A /* dom_threads.xpt in Copy Component XPTs */,
3F44AF1705BDFBA000CB4B08 /* dom_traversal.xpt in Copy Component XPTs */,
3F44AF1805BDFBA000CB4B08 /* dom_views.xpt in Copy Component XPTs */,
3F44AF1905BDFBA000CB4B08 /* dom_xbl.xpt in Copy Component XPTs */,
3F44AF1A05BDFBA000CB4B08 /* dom_xul.xpt in Copy Component XPTs */,
3F44AF1B05BDFBA000CB4B08 /* dom.xpt in Copy Component XPTs */,
DE878FCC0C175ABB00153511 /* dom_offline.xpt in Copy Component XPTs */,
0098B1A00CAEAB1500DA0F2F /* exthandler.xpt in Copy Component XPTs */,
3F44AF1C05BDFBA000CB4B08 /* gfx.xpt in Copy Component XPTs */,
@@ -2140,17 +2148,16 @@
3F44AF3D05BDFBA000CB4B08 /* xpcom_io.xpt in Copy Component XPTs */,
DEC17FE20F9E81D2001E43F1 /* xpcom_system.xpt in Copy Component XPTs */,
3F44AF3E05BDFBA000CB4B08 /* xpcom_threads.xpt in Copy Component XPTs */,
3F44AF3F05BDFBA000CB4B08 /* xpcom_xpti.xpt in Copy Component XPTs */,
3F44AF4005BDFBA000CB4B08 /* xpconnect.xpt in Copy Component XPTs */,
3F44AF4105BDFBA000CB4B08 /* embed_base.xpt in Copy Component XPTs */,
3F44AF4205BDFBA000CB4B08 /* imglib2.xpt in Copy Component XPTs */,
3F44AF4305BDFBA000CB4B08 /* xuldoc.xpt in Copy Component XPTs */,
- 3F44AF4705BDFBA000CB4B08 /* suitetypeaheadfind.xpt in Copy Component XPTs */,
3F44AFF905BDFBA000CB4B08 /* layout_printing.xpt in Copy Component XPTs */,
0F66E4A907D6D90500444E2A /* intl.xpt in Copy Component XPTs */,
33E1EA9A0D358E0C00910BBD /* caminosearch.xpt in Copy Component XPTs */,
);
name = "Copy Component XPTs";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AF4805BDFBA000CB4B08 /* Copy Gecko Resources */ = {
@@ -2179,18 +2186,18 @@
82CE28BA0736618A00B4DE07 /* table-remove-row-active.gif in Copy Gecko Resources */,
82CE28BB0736618A00B4DE07 /* table-remove-row-hover.gif in Copy Gecko Resources */,
82CE28BC0736618A00B4DE07 /* table-remove-row.gif in Copy Gecko Resources */,
3F44AF4905BDFBA000CB4B08 /* charsetalias.properties in Copy Gecko Resources */,
3F44AF4A05BDFBA000CB4B08 /* charsetData.properties in Copy Gecko Resources */,
3F44AF4B05BDFBA000CB4B08 /* langGroups.properties in Copy Gecko Resources */,
3F44AF4C05BDFBA000CB4B08 /* language.properties in Copy Gecko Resources */,
3F44AF4D05BDFBA000CB4B08 /* maccharset.properties in Copy Gecko Resources */,
- 3F44AF4E05BDFBA000CB4B08 /* loading-image.gif in Copy Gecko Resources */,
- 3F44AF4F05BDFBA000CB4B08 /* broken-image.gif in Copy Gecko Resources */,
+ 3F44AF4E05BDFBA000CB4B08 /* loading-image.png in Copy Gecko Resources */,
+ 3F44AF4F05BDFBA000CB4B08 /* broken-image.png in Copy Gecko Resources */,
3F44AF5005BDFBA000CB4B08 /* forms.css in Copy Gecko Resources */,
3312BF450C84C35C000E6965 /* arrow.gif in Copy Gecko Resources */,
3312BF460C84C35C000E6965 /* arrowd.gif in Copy Gecko Resources */,
3F44AF5205BDFBA000CB4B08 /* html.css in Copy Gecko Resources */,
3F44AF5305BDFBA000CB4B08 /* quirk.css in Copy Gecko Resources */,
3F44AF5305BDFBA000CB4C08 /* svg.css in Copy Gecko Resources */,
3F44AF5405BDFBA000CB4B08 /* ua.css in Copy Gecko Resources */,
3F44AF5505BDFBA000CB4B08 /* viewsource.css in Copy Gecko Resources */,
@@ -2252,19 +2259,26 @@
runOnlyForDeploymentPostprocessing = 0;
};
3F44AF7205BDFBA000CB4B08 /* Copy Chrome */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = chrome;
dstSubfolderSpec = 6;
files = (
- 3F44AF7305BDFBA000CB4B08 /* embed.jar in Copy Chrome */,
+ DE317878111E3D7F00A9D40A /* classic.jar in Copy Chrome */,
+ DE31788B111E3E6700A9D40A /* comm.jar in Copy Chrome */,
+ 3F44AF7F05BDFBA000CB4B08 /* en-US.jar in Copy Chrome */,
3F44AF7305BDFBA000CB4B18 /* flashblock.jar in Copy Chrome */,
- 3F44AF7405BDFBA000CB4B08 /* installed-chrome.txt in Copy Chrome */,
+ 3F44AF7305BDFBA000CB4B08 /* toolkit.jar in Copy Chrome */,
+ DE31788C111E3E6700A9D40A /* classic.manifest in Copy Chrome */,
+ DE31788A111E3E6700A9D40A /* comm.manifest in Copy Chrome */,
+ DE317889111E3E6700A9D40A /* en-US.manifest in Copy Chrome */,
+ DE317887111E3E6700A9D40A /* flashblock.manifest in Copy Chrome */,
+ DE317888111E3E6700A9D40A /* toolkit.manifest in Copy Chrome */,
);
name = "Copy Chrome";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AF7505BDFBA000CB4B08 /* Copy Security Libraries */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -2289,41 +2303,29 @@
dstSubfolderSpec = 6;
files = (
3F44AF7C05BDFBA000CB4B08 /* pipboot.xpt in Copy Security Components */,
3F44AF7D05BDFBA000CB4B08 /* pipnss.xpt in Copy Security Components */,
);
name = "Copy Security Components";
runOnlyForDeploymentPostprocessing = 0;
};
- 3F44AF7E05BDFBA000CB4B08 /* Copy Security Chrome */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = chrome;
- dstSubfolderSpec = 6;
- files = (
- 3F44AF7F05BDFBA000CB4B08 /* pipnss.jar in Copy Security Chrome */,
- );
- name = "Copy Security Chrome";
- runOnlyForDeploymentPostprocessing = 0;
- };
3F44AF8605BDFBA000CB4B08 /* Copy Libraries */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 6;
files = (
3F12FD3107312CCD00995ED9 /* libxpcom_core.dylib in Copy Libraries */,
3F44AF8705BDFBA000CB4B08 /* libxpcom.dylib in Copy Libraries */,
3F44AF8905BDFBA000CB4B08 /* libmozjs.dylib in Copy Libraries */,
3F44AF8A05BDFBA000CB4B08 /* libnspr4.dylib in Copy Libraries */,
3F44AF8B05BDFBA000CB4B08 /* libplc4.dylib in Copy Libraries */,
3F44AF8C05BDFBA000CB4B08 /* libplds4.dylib in Copy Libraries */,
33B7763D0C4EB34300A6D67F /* libsqlite3.dylib in Copy Libraries */,
- 3F44AF8D05BDFBA000CB4B08 /* libwidget.rsrc in Copy Libraries */,
);
name = "Copy Libraries";
runOnlyForDeploymentPostprocessing = 0;
};
3F44AF9005BDFBA000CB4B08 /* Copy Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -2337,17 +2339,16 @@
runOnlyForDeploymentPostprocessing = 0;
};
3F44AF9205BDFBA000CB4B08 /* Copy Plugins */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
- 3F44AF9305BDFBA000CB4B08 /* PrintPDE.plugin in Copy Plugins */,
);
name = "Copy Plugins";
runOnlyForDeploymentPostprocessing = 0;
};
3FBDC88908253CCC00D7F8E0 /* Copy Wallet Resources */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = defaults/wallet;
@@ -2384,30 +2385,30 @@
4D5881750864B276001305B3 /* Copy Gecko Plugins */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = plugins;
dstSubfolderSpec = 6;
files = (
3FEBB09D0899C0F700BD8373 /* JavaEmbeddingPlugin.bundle in Copy Gecko Plugins */,
3FEBB0F90899C18600BD8373 /* MRJPlugin.plugin in Copy Gecko Plugins */,
- 4D5881770864B28D001305B3 /* Default Plugin.plugin in Copy Gecko Plugins */,
+ 4D5881770864B28D001305B3 /* DefaultPlugin.plugin in Copy Gecko Plugins */,
);
name = "Copy Gecko Plugins";
runOnlyForDeploymentPostprocessing = 0;
};
4D5881790864B297001305B3 /* Copy Gecko Plugins */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = plugins;
dstSubfolderSpec = 6;
files = (
3FEBB0A70899C0F700BD8373 /* JavaEmbeddingPlugin.bundle in Copy Gecko Plugins */,
3FEBB0FA0899C18600BD8373 /* MRJPlugin.plugin in Copy Gecko Plugins */,
- 4D58817B0864B2AE001305B3 /* Default Plugin.plugin in Copy Gecko Plugins */,
+ 4D58817B0864B2AE001305B3 /* DefaultPlugin.plugin in Copy Gecko Plugins */,
);
name = "Copy Gecko Plugins";
runOnlyForDeploymentPostprocessing = 0;
};
4DD0EFFA09918BE100B6BBFD /* Copy Gecko Fonts */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = res/fonts;
@@ -2484,26 +2485,26 @@
/* Begin PBXFileReference section */
000D0A980ED9BD7000A6C2F0 /* tabOverview.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = tabOverview.tiff; path = resources/images/toolbar/tabOverview.tiff; sourceTree = ""; };
0017874B0E6B3BFB00583A98 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = English; path = resources/localized/English.lproj/Localizable.strings.in; sourceTree = ""; };
0017874E0E6B3C7500583A98 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = English; path = resources/localized/English.lproj/CertificateDialogs.strings.in; sourceTree = ""; };
001787500E6B3C7500583A98 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = English; path = resources/localized/English.lproj/InfoPlist.strings.in; sourceTree = ""; };
001D4A240D75B0B100464BE4 /* MoveCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MoveCommand.h; path = src/appleevents/MoveCommand.h; sourceTree = ""; };
001D4A250D75B0B100464BE4 /* MoveCommand.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MoveCommand.mm; path = src/appleevents/MoveCommand.mm; sourceTree = ""; };
- 001FFD930C795D3300D9C2C8 /* contenteditable.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = contenteditable.css; path = ../dist/Embed/res/contenteditable.css; sourceTree = SOURCE_ROOT; };
- 001FFD940C795D3300D9C2C8 /* designmode.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = designmode.css; path = ../dist/Embed/res/designmode.css; sourceTree = SOURCE_ROOT; };
+ 001FFD930C795D3300D9C2C8 /* contenteditable.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = contenteditable.css; path = ../dist/bin/res/contenteditable.css; sourceTree = SOURCE_ROOT; };
+ 001FFD940C795D3300D9C2C8 /* designmode.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = designmode.css; path = ../dist/bin/res/designmode.css; sourceTree = SOURCE_ROOT; };
00335B8B0C655ABC00A607F2 /* WebSearchField.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = WebSearchField.h; path = src/browser/WebSearchField.h; sourceTree = ""; };
00335B8C0C655ABC00A607F2 /* WebSearchField.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = WebSearchField.mm; path = src/browser/WebSearchField.mm; sourceTree = ""; };
00450522100A8E140096B649 /* bookmark_group_badge.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bookmark_group_badge.tiff; path = resources/images/chrome/bookmark_group_badge.tiff; sourceTree = ""; };
005F387D0E50852D00D8E7A6 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/InvalidCertOverrideDialog.nib; sourceTree = ""; };
0081150A0B180DDE001CB3F0 /* libthebes.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libthebes.a; path = ../staticlib/libthebes.a; sourceTree = SOURCE_ROOT; };
0081150C0B180DFA001CB3F0 /* libgkgfxthebes.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgkgfxthebes.a; path = ../gfx/src/thebes/libgkgfxthebes.a; sourceTree = SOURCE_ROOT; };
- 008115420B180F35001CB3F0 /* libthebes.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libthebes.dylib; path = ../dist/Embed/libthebes.dylib; sourceTree = SOURCE_ROOT; };
- 008115470B1811F0001CB3F0 /* libgkgfxthebes.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; name = libgkgfxthebes.dylib; path = ../dist/Embed/components/libgkgfxthebes.dylib; sourceTree = SOURCE_ROOT; };
+ 008115420B180F35001CB3F0 /* libthebes.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libthebes.dylib; path = ../dist/bin/libthebes.dylib; sourceTree = SOURCE_ROOT; };
+ 008115470B1811F0001CB3F0 /* libgkgfxthebes.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; name = libgkgfxthebes.dylib; path = ../dist/bin/components/libgkgfxthebes.dylib; sourceTree = SOURCE_ROOT; };
0095FAC70D9C99880039B3D8 /* CHBrowserView+Spelling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CHBrowserView+Spelling.h"; path = "src/embedding/CHBrowserView+Spelling.h"; sourceTree = ""; };
0095FAC80D9C99880039B3D8 /* CHBrowserView+Spelling.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "CHBrowserView+Spelling.mm"; path = "src/embedding/CHBrowserView+Spelling.mm"; sourceTree = ""; };
0098B11D0CAEA75700DA0F2F /* nsHandlerService.js */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.javascript; name = nsHandlerService.js; path = ../dist/bin/components/nsHandlerService.js; sourceTree = SOURCE_ROOT; };
0098B17F0CAEA9CF00DA0F2F /* XPCOMUtils.jsm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = XPCOMUtils.jsm; path = ../dist/bin/modules/XPCOMUtils.jsm; sourceTree = SOURCE_ROOT; };
0098B19E0CAEAAE800DA0F2F /* exthandler.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = exthandler.xpt; path = ../dist/bin/components/exthandler.xpt; sourceTree = SOURCE_ROOT; };
0098B20C0CAEC6C600DA0F2F /* mimeTypes.rdf */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = mimeTypes.rdf; path = resources/application/mimeTypes.rdf; sourceTree = ""; };
0098B2980CAECEBA00DA0F2F /* necko_file.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = necko_file.xpt; path = ../dist/bin/components/necko_file.xpt; sourceTree = SOURCE_ROOT; };
009A854A0F892F1200C9892B /* CHCertificateOverrideManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CHCertificateOverrideManager.h; path = src/embedding/CHCertificateOverrideManager.h; sourceTree = ""; };
@@ -2537,18 +2538,18 @@
03E2D8530771F73F00BD2443 /* Tabs.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tabs.prefPane; sourceTree = BUILT_PRODUCTS_DIR; };
03E2D8540771F73F00BD2443 /* Info-TabsPrefPane.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-TabsPrefPane.plist"; sourceTree = ""; };
03E2D85B0771F78500BD2443 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = generated/PreferencePanes/Tabs/English.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; };
03E2D85D0771F78500BD2443 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Tabs.nib; sourceTree = ""; };
03E2D85E0771F78500BD2443 /* Tabs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Tabs.h; sourceTree = ""; };
03E2D85F0771F78500BD2443 /* Tabs.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = Tabs.mm; sourceTree = ""; };
03E2D8600771F78500BD2443 /* Tabs.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Tabs.tiff; sourceTree = ""; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = generated/resources/localized/English.lproj/InfoPlist.strings; sourceTree = SOURCE_ROOT; };
- 0E6A9882097DFF9A007962C1 /* libucvmath.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; name = libucvmath.dylib; path = ../dist/Embed/components/libucvmath.dylib; sourceTree = SOURCE_ROOT; };
- 0E6A9886097DFFD4007962C1 /* mathml.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = mathml.css; path = ../dist/Embed/res/mathml.css; sourceTree = SOURCE_ROOT; };
+ 0E6A9882097DFF9A007962C1 /* libucvmath.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; name = libucvmath.dylib; path = ../dist/bin/components/libucvmath.dylib; sourceTree = SOURCE_ROOT; };
+ 0E6A9886097DFFD4007962C1 /* mathml.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = mathml.css; path = ../dist/bin/res/mathml.css; sourceTree = SOURCE_ROOT; };
0E6A9888097DFFF4007962C1 /* mathml.dtd */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = mathml.dtd; sourceTree = ""; };
0E6A988E097E0044007962C1 /* mathfont.properties */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = mathfont.properties; sourceTree = ""; };
0F01117308F2FE7C00423C02 /* bm_separator.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bm_separator.tiff; path = chrome/bm_separator.tiff; sourceTree = ""; };
0F08FB1408D37DA90022DD45 /* NSWorkspace+Utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "NSWorkspace+Utils.h"; path = "src/extensions/NSWorkspace+Utils.h"; sourceTree = ""; };
0F08FB1708D37DB30022DD45 /* NSWorkspace+Utils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = "NSWorkspace+Utils.m"; path = "src/extensions/NSWorkspace+Utils.m"; sourceTree = ""; };
0F0AD72D08CA3682002782ED /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/CreatePasswordDialog.nib; sourceTree = ""; };
0F0F5E3908FC65FB00B4EBCD /* CHISupportsOwner.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = CHISupportsOwner.mm; path = src/extensions/CHISupportsOwner.mm; sourceTree = ""; };
0F0F5E3C08FC660300B4EBCD /* CHISupportsOwner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CHISupportsOwner.h; path = src/extensions/CHISupportsOwner.h; sourceTree = ""; };
@@ -2570,23 +2571,22 @@
0FA9712F092AF9A0005C1CA6 /* action_button.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = action_button.tiff; path = PreferencePanes/Privacy/images/action_button.tiff; sourceTree = SOURCE_ROOT; };
0FACBFED07DC020D00DEE23A /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/AddBookmark.nib; sourceTree = ""; };
0FB6D99A089B276100414498 /* bm_favicon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bm_favicon.tiff; path = chrome/bm_favicon.tiff; sourceTree = ""; };
0FBC0ECA0798F92600E8E0E2 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/BookmarksEditing.nib; sourceTree = ""; };
0FBC0ECD0798F94900E8E0E2 /* NSDate+Utils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = "NSDate+Utils.m"; path = "src/extensions/NSDate+Utils.m"; sourceTree = ""; };
0FBC0ED00798F95400E8E0E2 /* NSMenu+Utils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = "NSMenu+Utils.m"; path = "src/extensions/NSMenu+Utils.m"; sourceTree = ""; };
0FBC0ED30798F96100E8E0E2 /* NSMenu+Utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "NSMenu+Utils.h"; path = "src/extensions/NSMenu+Utils.h"; sourceTree = ""; };
0FBC0ED40798F96100E8E0E2 /* NSDate+Utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "NSDate+Utils.h"; path = "src/extensions/NSDate+Utils.h"; sourceTree = ""; };
- 0FBC0ED90798F9A000E8E0E2 /* nsSimpleGlobalHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = nsSimpleGlobalHistory.cpp; path = src/history/nsSimpleGlobalHistory.cpp; sourceTree = ""; };
0FBC0EDC0798F9B400E8E0E2 /* HistoryOutlineViewDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = HistoryOutlineViewDelegate.mm; path = src/history/HistoryOutlineViewDelegate.mm; sourceTree = ""; };
0FBC0EDF0798FA1900E8E0E2 /* PopupMenuButton.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PopupMenuButton.m; path = src/extensions/PopupMenuButton.m; sourceTree = ""; };
0FBC0EE20798FA2700E8E0E2 /* PopupMenuButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PopupMenuButton.h; path = src/extensions/PopupMenuButton.h; sourceTree = ""; };
0FC4B33D08941B4F009C5F41 /* ChimeraUtils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ChimeraUtils.h; path = src/includes/ChimeraUtils.h; sourceTree = ""; };
- 0FCCE56707D6D7DA006DD3D1 /* intl.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = intl.xpt; path = ../dist/Embed/components/intl.xpt; sourceTree = SOURCE_ROOT; };
- 0FCD858708C4D45400A1923B /* layout_xul_tree.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = layout_xul_tree.xpt; path = ../dist/Embed/components/layout_xul_tree.xpt; sourceTree = SOURCE_ROOT; };
+ 0FCCE56707D6D7DA006DD3D1 /* intl.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = intl.xpt; path = ../dist/bin/components/intl.xpt; sourceTree = SOURCE_ROOT; };
+ 0FCD858708C4D45400A1923B /* layout_xul_tree.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = layout_xul_tree.xpt; path = ../dist/bin/components/layout_xul_tree.xpt; sourceTree = SOURCE_ROOT; };
0FCD85CA08C4D6D900A1923B /* ViewCertificateDialogController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = ViewCertificateDialogController.mm; path = src/security/ViewCertificateDialogController.mm; sourceTree = SOURCE_ROOT; };
0FCD85CB08C4D6D900A1923B /* BrowserSecurityDialogs.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = BrowserSecurityDialogs.mm; path = src/security/BrowserSecurityDialogs.mm; sourceTree = ""; };
0FCD85D108C4D6EE00A1923B /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = generated/resources/localized/English.lproj/CertificateDialogs.strings; sourceTree = SOURCE_ROOT; };
0FCD85DB08C4D7C000A1923B /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/ViewCertificateDialog.nib; sourceTree = ""; };
0FCD868C08C4E83100A1923B /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/CertificatesWindow.nib; sourceTree = ""; };
0FCD86DF08C4E8AA00A1923B /* CertificatesWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = CertificatesWindowController.mm; path = src/security/CertificatesWindowController.mm; sourceTree = SOURCE_ROOT; };
0FCD888808C52A9900A1923B /* certificate.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = certificate.tiff; path = resources/images/chrome/certificate.tiff; sourceTree = SOURCE_ROOT; };
0FCD888908C52A9900A1923B /* mini_cert_invalid.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = mini_cert_invalid.tiff; path = resources/images/chrome/mini_cert_invalid.tiff; sourceTree = SOURCE_ROOT; };
@@ -2604,17 +2604,17 @@
0FE7712A08C7C42F00AFB850 /* CertificateView.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = CertificateView.mm; path = src/security/CertificateView.mm; sourceTree = SOURCE_ROOT; };
0FE7721B08C7E6B700AFB850 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/DownloadCACertDialog.nib; sourceTree = ""; };
0FE772B908C7FF4100AFB850 /* mini_cert_untrusted.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = mini_cert_untrusted.tiff; path = resources/images/chrome/mini_cert_untrusted.tiff; sourceTree = SOURCE_ROOT; };
0FEA7DDD0926BBEA00B06154 /* NSFileManager+Utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "NSFileManager+Utils.h"; path = "src/extensions/NSFileManager+Utils.h"; sourceTree = ""; };
0FEA7DE00926BBF500B06154 /* NSFileManager+Utils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager+Utils.m"; path = "src/extensions/NSFileManager+Utils.m"; sourceTree = ""; };
0FEA7DE30926BC0C00B06154 /* SiteIconCache.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = SiteIconCache.mm; path = src/browser/SiteIconCache.mm; sourceTree = SOURCE_ROOT; };
0FEA7E640926BFC600B06154 /* unknown_file_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = unknown_file_icon.tiff; path = resources/images/chrome/unknown_file_icon.tiff; sourceTree = SOURCE_ROOT; };
0FEBFCA1044F989900A96652 /* libucvutil_s.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libucvutil_s.a; path = ../intl/uconv/util/libucvutil_s.a; sourceTree = SOURCE_ROOT; };
- 0FF288540961EDDD007527B4 /* libfreebl3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfreebl3.dylib; path = ../dist/Embed/libfreebl3.dylib; sourceTree = SOURCE_ROOT; };
+ 0FF288540961EDDD007527B4 /* libfreebl3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfreebl3.dylib; path = ../dist/bin/libfreebl3.dylib; sourceTree = SOURCE_ROOT; };
0FFE0A7E079B147F00966027 /* bm_sort.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bm_sort.tiff; path = chrome/bm_sort.tiff; sourceTree = ""; };
0FFE0A7F079B147F00966027 /* bm_add.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bm_add.tiff; path = chrome/bm_add.tiff; sourceTree = ""; };
0FFE0A80079B147F00966027 /* bm_action.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bm_action.tiff; path = chrome/bm_action.tiff; sourceTree = ""; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
1B825D020C5D268600CB4343 /* Camino.sdef */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.sdef; name = Camino.sdef; path = resources/application/Camino.sdef; sourceTree = ""; };
1F8407030C5705CC007B893D /* TabThumbnailGridView.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = TabThumbnailGridView.mm; path = src/browser/TabThumbnailGridView.mm; sourceTree = ""; };
1F8407040C5705CC007B893D /* TabThumbnailGridView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = TabThumbnailGridView.h; path = src/browser/TabThumbnailGridView.h; sourceTree = ""; };
1F8407050C5705CC007B893D /* ThumbnailView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ThumbnailView.h; path = src/browser/ThumbnailView.h; sourceTree = ""; };
@@ -2622,18 +2622,18 @@
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = main.m; path = src/application/main.m; sourceTree = SOURCE_ROOT; };
29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/MainMenu.nib; sourceTree = SOURCE_ROOT; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
2E2939FF027F33604B000102 /* PageProxyIcon.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = PageProxyIcon.mm; path = src/browser/PageProxyIcon.mm; sourceTree = ""; };
2E293A00027F33604B000102 /* PageProxyIcon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PageProxyIcon.h; path = src/browser/PageProxyIcon.h; sourceTree = ""; };
2E748B72029A448D4B000102 /* HistoryMenu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = HistoryMenu.h; path = src/browser/HistoryMenu.h; sourceTree = ""; };
2E748B73029A448D4B000102 /* HistoryMenu.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = HistoryMenu.mm; path = src/browser/HistoryMenu.mm; sourceTree = ""; };
- 3312BF340C84C2B4000E6965 /* arrow.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = arrow.gif; path = ../dist/Embed/res/arrow.gif; sourceTree = SOURCE_ROOT; };
- 3312BF350C84C2B4000E6965 /* arrowd.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = arrowd.gif; path = ../dist/Embed/res/arrowd.gif; sourceTree = SOURCE_ROOT; };
+ 3312BF340C84C2B4000E6965 /* arrow.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = arrow.gif; path = ../dist/bin/res/arrow.gif; sourceTree = SOURCE_ROOT; };
+ 3312BF350C84C2B4000E6965 /* arrowd.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = arrowd.gif; path = ../dist/bin/res/arrowd.gif; sourceTree = SOURCE_ROOT; };
3316F4470D11F1900025ED19 /* TabButtonView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = TabButtonView.h; path = src/browser/TabButtonView.h; sourceTree = ""; };
3316F4480D11F1900025ED19 /* TabButtonView.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = TabButtonView.mm; path = src/browser/TabButtonView.mm; sourceTree = ""; };
332377970C4D0FBD00A34879 /* Camino.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = Camino.xcconfig; path = config/Camino.xcconfig; sourceTree = ""; };
332377CF0C4D886800A34879 /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = config/Debug.xcconfig; sourceTree = ""; };
332377D00C4D887600A34879 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = config/Release.xcconfig; sourceTree = ""; };
332377D10C4D88D300A34879 /* PrefPane.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = PrefPane.xcconfig; path = config/PrefPane.xcconfig; sourceTree = ""; };
335638FD0C84D82200DC4D06 /* HistoryOutlineViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = HistoryOutlineViewDelegate.h; path = src/history/HistoryOutlineViewDelegate.h; sourceTree = ""; };
335639000C84DA6F00DC4D06 /* PageInfoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PageInfoWindowController.h; path = src/browser/PageInfoWindowController.h; sourceTree = ""; };
@@ -2650,18 +2650,16 @@
336234470E6BC2FB00DD5373 /* HTMLBookmarkConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTMLBookmarkConverter.m; path = src/bookmarks/HTMLBookmarkConverter.m; sourceTree = ""; };
337F2BA20CA200D100572F7D /* ContentDispatchChooser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ContentDispatchChooser.h; path = src/browser/ContentDispatchChooser.h; sourceTree = ""; };
337F2BA30CA200D100572F7D /* ContentDispatchChooser.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = ContentDispatchChooser.mm; path = src/browser/ContentDispatchChooser.mm; sourceTree = ""; };
33819AD20D938A2D00CA9F52 /* GeckoPrefConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeckoPrefConstants.h; path = src/preferences/GeckoPrefConstants.h; sourceTree = ""; };
33819AD30D938A2D00CA9F52 /* GeckoPrefConstants.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = GeckoPrefConstants.mm; path = src/preferences/GeckoPrefConstants.mm; sourceTree = ""; };
33820D980F8AA24500D2164A /* Breakpad.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Breakpad.xcodeproj; path = "google-breakpad/src/client/mac/Breakpad.xcodeproj"; sourceTree = ""; };
33820DC00F8AA31B00D2164A /* Breakpad.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Breakpad.framework; path = "google-breakpad/src/client/mac/build/Release/Breakpad.framework"; sourceTree = ""; };
33B775A90C4EAC1E00A6D67F /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = ../dist/lib/libsqlite3.dylib; sourceTree = SOURCE_ROOT; };
- 33B777950C55851800A6D67F /* libmozlcms.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmozlcms.dylib; path = ../dist/bin/libmozlcms.dylib; sourceTree = SOURCE_ROOT; };
- 33B777E10C5588E500A6D67F /* libmozlcms.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmozlcms.a; path = ../dist/lib/libmozlcms.a; sourceTree = SOURCE_ROOT; };
33B778800C55C57800A6D67F /* libnssdbm3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libnssdbm3.dylib; path = ../dist/lib/libnssdbm3.dylib; sourceTree = SOURCE_ROOT; };
33C222840D106CDD00611936 /* PreferencesWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferencesWindow.h; sourceTree = ""; };
33C222850D106CDD00611936 /* PreferencesWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreferencesWindow.m; sourceTree = ""; };
33E1EA0D0D34550A00910BBD /* AddSearchProviderHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddSearchProviderHandler.h; path = src/websearch/AddSearchProviderHandler.h; sourceTree = ""; };
33E1EA0E0D34550A00910BBD /* AddSearchProviderHandler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AddSearchProviderHandler.mm; path = src/websearch/AddSearchProviderHandler.mm; sourceTree = ""; };
33E1EA970D358DE200910BBD /* caminosearch.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = caminosearch.xpt; path = ../dist/bin/components/caminosearch.xpt; sourceTree = SOURCE_ROOT; };
33E95A750D31B6FA0054C01D /* CHCookieStorage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CHCookieStorage.h; path = src/embedding/CHCookieStorage.h; sourceTree = ""; };
33E95A760D31B6FA0054C01D /* CHCookieStorage.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = CHCookieStorage.mm; path = src/embedding/CHCookieStorage.mm; sourceTree = ""; };
@@ -2676,17 +2674,17 @@
3D94197F0F559B2F00227277 /* blockedSite.xhtml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = blockedSite.xhtml; path = resources/application/blockedSite.xhtml; sourceTree = ""; };
3D9A2AE110019F6E00CC9154 /* SafeBrowsingBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SafeBrowsingBar.mm; path = src/safebrowsing/SafeBrowsingBar.mm; sourceTree = ""; };
3D9A2AE210019F6E00CC9154 /* SafeBrowsingBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SafeBrowsingBar.h; path = src/safebrowsing/SafeBrowsingBar.h; sourceTree = ""; };
3D9A2B081001A45700CC9154 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = resources/localized/English.lproj/SafeBrowsingBar.nib; sourceTree = ""; };
3DACDAA80FBF1D1600709AC3 /* SafeBrowsingTestDataUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SafeBrowsingTestDataUpdater.h; path = src/safebrowsing/SafeBrowsingTestDataUpdater.h; sourceTree = ""; };
3DACDAA90FBF1D1600709AC3 /* SafeBrowsingTestDataUpdater.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SafeBrowsingTestDataUpdater.mm; path = src/safebrowsing/SafeBrowsingTestDataUpdater.mm; sourceTree = ""; };
3DE5B6380F6C11B300D2EF11 /* TransientBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransientBar.h; path = src/browser/TransientBar.h; sourceTree = ""; };
3DE5B6390F6C11B300D2EF11 /* TransientBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = TransientBar.mm; path = src/browser/TransientBar.mm; sourceTree = ""; };
- 3F12FC56072E8ECB00995ED9 /* libxpcom_core.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxpcom_core.dylib; path = ../dist/Embed/libxpcom_core.dylib; sourceTree = SOURCE_ROOT; };
+ 3F12FC56072E8ECB00995ED9 /* libxpcom_core.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxpcom_core.dylib; path = ../dist/bin/libxpcom_core.dylib; sourceTree = SOURCE_ROOT; };
3F22CC1303DF42A200026DCE /* Charset.dict */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = Charset.dict; path = resources/application/Charset.dict; sourceTree = ""; };
3F27D94A05DB2600007B543D /* NSSplitView+Utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "NSSplitView+Utils.h"; path = "src/extensions/NSSplitView+Utils.h"; sourceTree = ""; };
3F27D94B05DB2600007B543D /* NSSplitView+Utils.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSSplitView+Utils.mm"; path = "src/extensions/NSSplitView+Utils.mm"; sourceTree = ""; };
3F2CF8CB042A88B7005FD42F /* ImageAndTextCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ImageAndTextCell.h; path = src/extensions/ImageAndTextCell.h; sourceTree = ""; };
3F2CF8CC042A88B7005FD42F /* ImageAndTextCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ImageAndTextCell.m; path = src/extensions/ImageAndTextCell.m; sourceTree = ""; };
3F42E91A05EAD4580045A30C /* bm_folder.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bm_folder.tiff; path = resources/images/chrome/bm_folder.tiff; sourceTree = SOURCE_ROOT; };
3F42EFA705EC13F90045A30C /* throbber-01.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "throbber-01.tiff"; path = "resources/images/throbber/throbber-01.tiff"; sourceTree = SOURCE_ROOT; };
3F42EFA805EC13F90045A30C /* throbber-07.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = "throbber-07.tiff"; path = "resources/images/throbber/throbber-07.tiff"; sourceTree = SOURCE_ROOT; };
@@ -2707,17 +2705,17 @@
3F44ADF105BDFBA000CB4B08 /* Security.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Security.prefPane; sourceTree = BUILT_PRODUCTS_DIR; };
3F44AE0705BDFBA000CB4B08 /* Info-WebFeaturesPrefPane.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-WebFeaturesPrefPane.plist"; sourceTree = ""; };
3F44AE0805BDFBA000CB4B08 /* WebFeatures.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebFeatures.prefPane; sourceTree = BUILT_PRODUCTS_DIR; };
3F44AFC605BDFBA100CB4B08 /* Camino.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Camino.app; sourceTree = BUILT_PRODUCTS_DIR; };
3F558E950552122E006156FD /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
3F63719B057CE0DE00B62EE2 /* manager.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = manager.tiff; path = resources/images/toolbar/manager.tiff; sourceTree = SOURCE_ROOT; };
3F7C6CB905B4819E002FFFD3 /* HistoryItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = HistoryItem.h; path = src/history/HistoryItem.h; sourceTree = ""; };
3F7C6CBA05B4819E002FFFD3 /* HistoryItem.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = HistoryItem.mm; path = src/history/HistoryItem.mm; sourceTree = ""; };
- 3F7C6CC505B5B42E002FFFD3 /* widget.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = widget.xpt; path = ../dist/Embed/components/widget.xpt; sourceTree = SOURCE_ROOT; };
+ 3F7C6CC505B5B42E002FFFD3 /* widget.xpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = widget.xpt; path = ../dist/bin/components/widget.xpt; sourceTree = SOURCE_ROOT; };
3F8C005006800D8D00658CBC /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = generated/PreferencePanes/Security/English.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; };
3F8C005606800E1300658CBC /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = generated/PreferencePanes/WebFeatures/English.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; };
3FAA54C70587778700BBF630 /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = English; path = resources/application/English.lproj/bookmarks.plist; sourceTree = ""; };
3FB2BA7D0545EA80002B9691 /* Bookmark.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Bookmark.h; path = src/bookmarks/Bookmark.h; sourceTree = ""; };
3FB2BA7E0545EA80002B9691 /* Bookmark.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = Bookmark.mm; path = src/bookmarks/Bookmark.mm; sourceTree = ""; };
3FB2BA7F0545EA80002B9691 /* BookmarkButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = BookmarkButton.h; path = src/bookmarks/BookmarkButton.h; sourceTree = ""; };
3FB2BA800545EA80002B9691 /* BookmarkButton.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = BookmarkButton.mm; path = src/bookmarks/BookmarkButton.mm; sourceTree = ""; };
3FB2BA810545EA80002B9691 /* BookmarkFolder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = BookmarkFolder.h; path = src/bookmarks/BookmarkFolder.h; sourceTree = ""; };
@@ -2749,36 +2747,36 @@
3FB2BAE90545EBF2002B9691 /* addressbook_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = addressbook_icon.tiff; path = resources/images/chrome/addressbook_icon.tiff; sourceTree = SOURCE_ROOT; };
3FB2BAEA0545EBF2002B9691 /* bookmarkmenu_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bookmarkmenu_icon.tiff; path = resources/images/chrome/bookmarkmenu_icon.tiff; sourceTree = SOURCE_ROOT; };
3FB2BAEB0545EBF2002B9691 /* bookmarktoolbar_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = bookmarktoolbar_icon.tiff; path = resources/images/chrome/bookmarktoolbar_icon.tiff; sourceTree = SOURCE_ROOT; };
3FB2BAEC0545EBF2002B9691 /* error_page_site_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = error_page_site_icon.tiff; path = resources/images/chrome/error_page_site_icon.tiff; sourceTree = SOURCE_ROOT; };
3FB2BAEF0545EBF2002B9691 /* rendezvous_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = rendezvous_icon.tiff; path = resources/images/chrome/rendezvous_icon.tiff; sourceTree = SOURCE_ROOT; };
3FB2BAF10545EBF2002B9691 /* top10_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = top10_icon.tiff; path = resources/images/chrome/top10_icon.tiff; sourceTree = SOURCE_ROOT; };
3FBDC7D908252CF300D7F8E0 /* PhoneNumber.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = PhoneNumber.mm; path = src/formfill/PhoneNumber.mm; sourceTree = ""; };
3FBDC7DA08252CF300D7F8E0 /* wallet.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = wallet.mm; path = src/formfill/wallet.mm; sourceTree = ""; };
- 3FBDC84E08253C8B00D7F8E0 /* DistinguishedSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = DistinguishedSchema.tbl; path = wallet/tables/DistinguishedSchema.tbl; sourceTree = SOURCE_ROOT; };
- 3FBDC84F08253C8B00D7F8E0 /* FieldSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = FieldSchema.tbl; path = wallet/tables/FieldSchema.tbl; sourceTree = SOURCE_ROOT; };
- 3FBDC85008253C8B00D7F8E0 /* PositionalSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = PositionalSchema.tbl; path = wallet/tables/PositionalSchema.tbl; sourceTree = SOURCE_ROOT; };
- 3FBDC85108253C8B00D7F8E0 /* SchemaConcat.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = SchemaConcat.tbl; path = wallet/tables/SchemaConcat.tbl; sourceTree = SOURCE_ROOT; };
- 3FBDC85208253C8B00D7F8E0 /* SchemaStrings.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = SchemaStrings.tbl; path = wallet/tables/SchemaStrings.tbl; sourceTree = SOURCE_ROOT; };
- 3FBDC85308253C8B00D7F8E0 /* StateSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = StateSchema.tbl; path = wallet/tables/StateSchema.tbl; sourceTree = SOURCE_ROOT; };
- 3FBDC85408253C8B00D7F8E0 /* VcardSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = VcardSchema.tbl; path = wallet/tables/VcardSchema.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC84E08253C8B00D7F8E0 /* DistinguishedSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = DistinguishedSchema.tbl; path = resources/application/DistinguishedSchema.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC84F08253C8B00D7F8E0 /* FieldSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = FieldSchema.tbl; path = resources/application/FieldSchema.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC85008253C8B00D7F8E0 /* PositionalSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = PositionalSchema.tbl; path = resources/application/PositionalSchema.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC85108253C8B00D7F8E0 /* SchemaConcat.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = SchemaConcat.tbl; path = resources/application/SchemaConcat.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC85208253C8B00D7F8E0 /* SchemaStrings.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = SchemaStrings.tbl; path = resources/application/SchemaStrings.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC85308253C8B00D7F8E0 /* StateSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = StateSchema.tbl; path = resources/application/StateSchema.tbl; sourceTree = SOURCE_ROOT; };
+ 3FBDC85408253C8B00D7F8E0 /* VcardSchema.tbl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = VcardSchema.tbl; path = resources/application/VcardSchema.tbl; sourceTree = SOURCE_ROOT; };
3FBDC8DF0827C44B00D7F8E0 /* autofill.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = autofill.tiff; path = resources/images/toolbar/autofill.tiff; sourceTree = SOURCE_ROOT; };
3FC0FB7F05A0D2DC002F47DE /* ProgressView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ProgressView.h; path = src/download/ProgressView.h; sourceTree = ""; };
3FC0FB8005A0D2DC002F47DE /* ProgressView.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = ProgressView.mm; path = src/download/ProgressView.mm; sourceTree = ""; };
3FC0FB8305A0D2F4002F47DE /* dl_cancel.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_cancel.tiff; path = resources/images/toolbar/dl_cancel.tiff; sourceTree = SOURCE_ROOT; };
3FC0FB8405A0D2F4002F47DE /* dl_clearall.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_clearall.tiff; path = resources/images/toolbar/dl_clearall.tiff; sourceTree = SOURCE_ROOT; };
3FC0FB8505A0D2F4002F47DE /* dl_open.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_open.tiff; path = resources/images/toolbar/dl_open.tiff; sourceTree = SOURCE_ROOT; };
3FC0FB8605A0D2F4002F47DE /* dl_remove.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_remove.tiff; path = resources/images/toolbar/dl_remove.tiff; sourceTree = SOURCE_ROOT; };
3FC0FB8705A0D2F4002F47DE /* dl_reveal.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_reveal.tiff; path = resources/images/toolbar/dl_reveal.tiff; sourceTree = SOURCE_ROOT; };
3FC7EBFB05AA1D1C00C557AA /* AccessoryViews.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = AccessoryViews.nib; path = resources/localized/English.lproj/AccessoryViews.nib; sourceTree = ""; };
3FC9495F0642ED39008E2E3D /* tab_close_pressed.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = tab_close_pressed.tiff; path = resources/images/chrome/tab_close_pressed.tiff; sourceTree = SOURCE_ROOT; };
3FC949600642ED39008E2E3D /* tab_close.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = tab_close.tiff; path = resources/images/chrome/tab_close.tiff; sourceTree = SOURCE_ROOT; };
3FE4ECE9082C2D89003BF39E /* NSURL+Utils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = "NSURL+Utils.m"; path = "src/extensions/NSURL+Utils.m"; sourceTree = ""; };
- 3FE5B9FC068A090F0001CECD /* libmozz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmozz.dylib; path = ../dist/Embed/libmozz.dylib; sourceTree = SOURCE_ROOT; };
+ 3FE5B9FC068A090F0001CECD /* libmozz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmozz.dylib; path = ../dist/bin/libmozz.dylib; sourceTree = SOURCE_ROOT; };
3FE5BA0B068A1A140001CECD /* libmozz.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmozz.a; path = ../dist/lib/libmozz.a; sourceTree = SOURCE_ROOT; };
3FEBB08E0899C0F600BD8373 /* JavaEmbeddingPlugin.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = JavaEmbeddingPlugin.bundle; path = ../dist/bin/plugins/JavaEmbeddingPlugin.bundle; sourceTree = SOURCE_ROOT; };
3FEBB0E60899C18600BD8373 /* MRJPlugin.plugin */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; name = MRJPlugin.plugin; path = ../dist/bin/plugins/MRJPlugin.plugin; sourceTree = SOURCE_ROOT; };
3FEBB43B089DA88B00BD8373 /* history.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = history.tiff; path = resources/images/toolbar/history.tiff; sourceTree = SOURCE_ROOT; };
3FEBB4E708A02F2900BD8373 /* dl_pause.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_pause.tiff; path = resources/images/toolbar/dl_pause.tiff; sourceTree = SOURCE_ROOT; };
3FEBB4E808A02F2900BD8373 /* dl_resume.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = dl_resume.tiff; path = resources/images/toolbar/dl_resume.tiff; sourceTree = SOURCE_ROOT; };
3FECC8E505D1FE800068E7ED /* libprofdirserviceprovider_s.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libprofdirserviceprovider_s.a; path = ../profile/dirserviceprovider/src/libprofdirserviceprovider_s.a; sourceTree = SOURCE_ROOT; };
3FF08EF706E7CF3F001C9B19 /* BrowserTabBarView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = BrowserTabBarView.h; path = src/browser/BrowserTabBarView.h; sourceTree = ""; };
@@ -2799,21 +2797,20 @@
4DC41D3D0869D7A400947044 /* libmozjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmozjpeg.a; path = ../jpeg/libmozjpeg.a; sourceTree = SOURCE_ROOT; };
4DC41D3E0869D7A400947044 /* libmozpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmozpng.a; path = ../modules/libimg/png/libmozpng.a; sourceTree = SOURCE_ROOT; };
4DC41D3E0869D7A400947045 /* libmozcairo.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmozcairo.a; path = ../gfx/cairo/cairo/src/libmozcairo.a; sourceTree = SOURCE_ROOT; };
4DC41D3E0869D7A400947046 /* libmozlibpixman.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmozlibpixman.a; path = ../gfx/cairo/libpixman/src/libmozlibpixman.a; sourceTree = SOURCE_ROOT; };
506770F60C823B090050EF73 /* CHSelectHandler.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = CHSelectHandler.mm; path = src/embedding/CHSelectHandler.mm; sourceTree = "