mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
85f69d8b98
--HG-- rename : toolkit/components/alerts/src/mac/Makefile.in => toolkit/components/alerts/mac/Makefile.in rename : toolkit/components/alerts/src/mac/growl/CFGrowlAdditions.c => toolkit/components/alerts/mac/growl/CFGrowlAdditions.c rename : toolkit/components/alerts/src/mac/growl/CFGrowlAdditions.h => toolkit/components/alerts/mac/growl/CFGrowlAdditions.h rename : toolkit/components/alerts/src/mac/growl/CFGrowlDefines.h => toolkit/components/alerts/mac/growl/CFGrowlDefines.h rename : toolkit/components/alerts/src/mac/growl/CFMutableDictionaryAdditions.c => toolkit/components/alerts/mac/growl/CFMutableDictionaryAdditions.c rename : toolkit/components/alerts/src/mac/growl/CFMutableDictionaryAdditions.h => toolkit/components/alerts/mac/growl/CFMutableDictionaryAdditions.h rename : toolkit/components/alerts/src/mac/growl/CFURLAdditions.c => toolkit/components/alerts/mac/growl/CFURLAdditions.c rename : toolkit/components/alerts/src/mac/growl/CFURLAdditions.h => toolkit/components/alerts/mac/growl/CFURLAdditions.h rename : toolkit/components/alerts/src/mac/growl/GrowlAbstractSingletonObject.h => toolkit/components/alerts/mac/growl/GrowlAbstractSingletonObject.h rename : toolkit/components/alerts/src/mac/growl/GrowlApplicationBridge.h => toolkit/components/alerts/mac/growl/GrowlApplicationBridge.h rename : toolkit/components/alerts/src/mac/growl/GrowlApplicationBridge.m => toolkit/components/alerts/mac/growl/GrowlApplicationBridge.m rename : toolkit/components/alerts/src/mac/growl/GrowlDefines.h => toolkit/components/alerts/mac/growl/GrowlDefines.h rename : toolkit/components/alerts/src/mac/growl/GrowlDefinesInternal.h => toolkit/components/alerts/mac/growl/GrowlDefinesInternal.h rename : toolkit/components/alerts/src/mac/growl/GrowlPathUtilities.h => toolkit/components/alerts/mac/growl/GrowlPathUtilities.h rename : toolkit/components/alerts/src/mac/growl/GrowlPathUtilities.m => toolkit/components/alerts/mac/growl/GrowlPathUtilities.m rename : toolkit/components/alerts/src/mac/growl/GrowlPathway.h => toolkit/components/alerts/mac/growl/GrowlPathway.h rename : toolkit/components/alerts/src/mac/growl/GrowlPreferencesController.h => toolkit/components/alerts/mac/growl/GrowlPreferencesController.h rename : toolkit/components/alerts/src/mac/growl/GrowlTicketController.h => toolkit/components/alerts/mac/growl/GrowlTicketController.h rename : toolkit/components/alerts/src/mac/growl/Makefile.in => toolkit/components/alerts/mac/growl/Makefile.in rename : toolkit/components/alerts/src/mac/growl/license.txt => toolkit/components/alerts/mac/growl/license.txt rename : toolkit/components/alerts/src/mac/mozGrowlDelegate.h => toolkit/components/alerts/mac/mozGrowlDelegate.h rename : toolkit/components/alerts/src/mac/mozGrowlDelegate.mm => toolkit/components/alerts/mac/mozGrowlDelegate.mm rename : toolkit/components/alerts/src/mac/nsAlertsImageLoadListener.h => toolkit/components/alerts/mac/nsAlertsImageLoadListener.h rename : toolkit/components/alerts/src/mac/nsAlertsImageLoadListener.mm => toolkit/components/alerts/mac/nsAlertsImageLoadListener.mm rename : toolkit/components/alerts/src/mac/nsAlertsService.h => toolkit/components/alerts/mac/nsAlertsService.h rename : toolkit/components/alerts/src/mac/nsAlertsService.mm => toolkit/components/alerts/mac/nsAlertsService.mm rename : toolkit/components/alerts/src/mac/nsAlertsServiceModule.cpp => toolkit/components/alerts/mac/nsAlertsServiceModule.cpp rename : toolkit/components/alerts/src/mac/nsNotificationsList.h => toolkit/components/alerts/mac/nsNotificationsList.h rename : toolkit/components/alerts/src/mac/nsNotificationsList.mm => toolkit/components/alerts/mac/nsNotificationsList.mm rename : toolkit/components/alerts/src/nsAlertsService.cpp => toolkit/components/alerts/nsAlertsService.cpp rename : toolkit/components/alerts/src/nsAlertsService.h => toolkit/components/alerts/nsAlertsService.h rename : toolkit/components/alerts/public/nsIAlertsService.idl => toolkit/components/alerts/nsIAlertsService.idl rename : toolkit/components/alerts/public/nsINotificationsList.idl => toolkit/components/alerts/nsINotificationsList.idl rename : toolkit/components/autocomplete/src/nsAutoCompleteController.cpp => toolkit/components/autocomplete/nsAutoCompleteController.cpp rename : toolkit/components/autocomplete/src/nsAutoCompleteController.h => toolkit/components/autocomplete/nsAutoCompleteController.h rename : toolkit/components/autocomplete/src/nsAutoCompleteSimpleResult.cpp => toolkit/components/autocomplete/nsAutoCompleteSimpleResult.cpp rename : toolkit/components/autocomplete/src/nsAutoCompleteSimpleResult.h => toolkit/components/autocomplete/nsAutoCompleteSimpleResult.h rename : toolkit/components/autocomplete/public/nsIAutoCompleteController.idl => toolkit/components/autocomplete/nsIAutoCompleteController.idl rename : toolkit/components/autocomplete/public/nsIAutoCompleteInput.idl => toolkit/components/autocomplete/nsIAutoCompleteInput.idl rename : toolkit/components/autocomplete/public/nsIAutoCompletePopup.idl => toolkit/components/autocomplete/nsIAutoCompletePopup.idl rename : toolkit/components/autocomplete/public/nsIAutoCompleteResult.idl => toolkit/components/autocomplete/nsIAutoCompleteResult.idl rename : toolkit/components/autocomplete/public/nsIAutoCompleteSearch.idl => toolkit/components/autocomplete/nsIAutoCompleteSearch.idl rename : toolkit/components/autocomplete/public/nsIAutoCompleteSimpleResult.idl => toolkit/components/autocomplete/nsIAutoCompleteSimpleResult.idl rename : toolkit/components/commandlines/src/nsCommandLine.cpp => toolkit/components/commandlines/nsCommandLine.cpp rename : toolkit/components/commandlines/public/nsICommandLine.idl => toolkit/components/commandlines/nsICommandLine.idl rename : toolkit/components/commandlines/public/nsICommandLineHandler.idl => toolkit/components/commandlines/nsICommandLineHandler.idl rename : toolkit/components/commandlines/public/nsICommandLineRunner.idl => toolkit/components/commandlines/nsICommandLineRunner.idl rename : toolkit/components/commandlines/public/nsICommandLineValidator.idl => toolkit/components/commandlines/nsICommandLineValidator.idl rename : toolkit/components/contentprefs/src/nsContentPrefService.js => toolkit/components/contentprefs/nsContentPrefService.js rename : toolkit/components/contentprefs/src/nsContentPrefService.manifest => toolkit/components/contentprefs/nsContentPrefService.manifest rename : toolkit/components/downloads/src/nsDownloadManager.cpp => toolkit/components/downloads/nsDownloadManager.cpp rename : toolkit/components/downloads/src/nsDownloadManager.h => toolkit/components/downloads/nsDownloadManager.h rename : toolkit/components/downloads/src/nsDownloadManagerUI.js => toolkit/components/downloads/nsDownloadManagerUI.js rename : toolkit/components/downloads/src/nsDownloadManagerUI.manifest => toolkit/components/downloads/nsDownloadManagerUI.manifest rename : toolkit/components/downloads/src/nsDownloadProxy.h => toolkit/components/downloads/nsDownloadProxy.h rename : toolkit/components/downloads/src/nsDownloadScanner.cpp => toolkit/components/downloads/nsDownloadScanner.cpp rename : toolkit/components/downloads/src/nsDownloadScanner.h => toolkit/components/downloads/nsDownloadScanner.h rename : toolkit/components/downloads/public/nsIDownload.idl => toolkit/components/downloads/nsIDownload.idl rename : toolkit/components/downloads/public/nsIDownloadManager.idl => toolkit/components/downloads/nsIDownloadManager.idl rename : toolkit/components/downloads/public/nsIDownloadManagerUI.idl => toolkit/components/downloads/nsIDownloadManagerUI.idl rename : toolkit/components/downloads/public/nsIDownloadProgressListener.idl => toolkit/components/downloads/nsIDownloadProgressListener.idl rename : toolkit/components/feeds/src/FeedProcessor.js => toolkit/components/feeds/FeedProcessor.js rename : toolkit/components/feeds/src/FeedProcessor.manifest => toolkit/components/feeds/FeedProcessor.manifest rename : toolkit/components/feeds/public/nsIFeed.idl => toolkit/components/feeds/nsIFeed.idl rename : toolkit/components/feeds/public/nsIFeedContainer.idl => toolkit/components/feeds/nsIFeedContainer.idl rename : toolkit/components/feeds/public/nsIFeedElementBase.idl => toolkit/components/feeds/nsIFeedElementBase.idl rename : toolkit/components/feeds/public/nsIFeedEntry.idl => toolkit/components/feeds/nsIFeedEntry.idl rename : toolkit/components/feeds/public/nsIFeedGenerator.idl => toolkit/components/feeds/nsIFeedGenerator.idl rename : toolkit/components/feeds/public/nsIFeedListener.idl => toolkit/components/feeds/nsIFeedListener.idl rename : toolkit/components/feeds/public/nsIFeedPerson.idl => toolkit/components/feeds/nsIFeedPerson.idl rename : toolkit/components/feeds/public/nsIFeedProcessor.idl => toolkit/components/feeds/nsIFeedProcessor.idl rename : toolkit/components/feeds/public/nsIFeedResult.idl => toolkit/components/feeds/nsIFeedResult.idl rename : toolkit/components/feeds/public/nsIFeedTextConstruct.idl => toolkit/components/feeds/nsIFeedTextConstruct.idl rename : toolkit/components/feeds/public/nsIScriptableUnescapeHTML.idl => toolkit/components/feeds/nsIScriptableUnescapeHTML.idl rename : toolkit/components/feeds/src/nsScriptableUnescapeHTML.cpp => toolkit/components/feeds/nsScriptableUnescapeHTML.cpp rename : toolkit/components/feeds/src/nsScriptableUnescapeHTML.h => toolkit/components/feeds/nsScriptableUnescapeHTML.h rename : toolkit/components/filepicker/src/nsFilePicker.js => toolkit/components/filepicker/nsFilePicker.js rename : toolkit/components/filepicker/src/nsFilePicker.manifest => toolkit/components/filepicker/nsFilePicker.manifest rename : toolkit/components/filepicker/src/nsFileView.cpp => toolkit/components/filepicker/nsFileView.cpp rename : toolkit/components/filepicker/public/nsIFileView.idl => toolkit/components/filepicker/nsIFileView.idl rename : toolkit/components/find/src/nsFindService.cpp => toolkit/components/find/nsFindService.cpp rename : toolkit/components/find/src/nsFindService.h => toolkit/components/find/nsFindService.h rename : toolkit/components/find/public/nsIFindService.idl => toolkit/components/find/nsIFindService.idl rename : toolkit/components/microformats/src/Microformats.js => toolkit/components/microformats/Microformats.js rename : toolkit/components/parentalcontrols/public/nsIParentalControlsService.idl => toolkit/components/parentalcontrols/nsIParentalControlsService.idl rename : toolkit/components/parentalcontrols/src/nsParentalControlsServiceWin.cpp => toolkit/components/parentalcontrols/nsParentalControlsServiceWin.cpp rename : toolkit/components/parentalcontrols/src/nsParentalControlsServiceWin.h => toolkit/components/parentalcontrols/nsParentalControlsServiceWin.h rename : toolkit/components/passwordmgr/src/crypto-SDR.js => toolkit/components/passwordmgr/crypto-SDR.js rename : toolkit/components/passwordmgr/public/nsILoginInfo.idl => toolkit/components/passwordmgr/nsILoginInfo.idl rename : toolkit/components/passwordmgr/public/nsILoginManager.idl => toolkit/components/passwordmgr/nsILoginManager.idl rename : toolkit/components/passwordmgr/public/nsILoginManagerCrypto.idl => toolkit/components/passwordmgr/nsILoginManagerCrypto.idl rename : toolkit/components/passwordmgr/public/nsILoginManagerIEMigrationHelper.idl => toolkit/components/passwordmgr/nsILoginManagerIEMigrationHelper.idl rename : toolkit/components/passwordmgr/public/nsILoginManagerPrompter.idl => toolkit/components/passwordmgr/nsILoginManagerPrompter.idl rename : toolkit/components/passwordmgr/public/nsILoginManagerStorage.idl => toolkit/components/passwordmgr/nsILoginManagerStorage.idl rename : toolkit/components/passwordmgr/public/nsILoginMetaInfo.idl => toolkit/components/passwordmgr/nsILoginMetaInfo.idl rename : toolkit/components/passwordmgr/src/nsLoginInfo.js => toolkit/components/passwordmgr/nsLoginInfo.js rename : toolkit/components/passwordmgr/src/nsLoginManager.js => toolkit/components/passwordmgr/nsLoginManager.js rename : toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js => toolkit/components/passwordmgr/nsLoginManagerPrompter.js rename : toolkit/components/passwordmgr/src/passwordmgr.manifest => toolkit/components/passwordmgr/passwordmgr.manifest rename : toolkit/components/passwordmgr/src/storage-Legacy.js => toolkit/components/passwordmgr/storage-Legacy.js rename : toolkit/components/passwordmgr/src/storage-mozStorage.js => toolkit/components/passwordmgr/storage-mozStorage.js rename : toolkit/components/places/src/AsyncFaviconHelpers.cpp => toolkit/components/places/AsyncFaviconHelpers.cpp rename : toolkit/components/places/src/AsyncFaviconHelpers.h => toolkit/components/places/AsyncFaviconHelpers.h rename : toolkit/components/places/src/Helpers.cpp => toolkit/components/places/Helpers.cpp rename : toolkit/components/places/src/Helpers.h => toolkit/components/places/Helpers.h rename : toolkit/components/places/src/History.cpp => toolkit/components/places/History.cpp rename : toolkit/components/places/src/History.h => toolkit/components/places/History.h rename : toolkit/components/places/src/PlaceInfo.cpp => toolkit/components/places/PlaceInfo.cpp rename : toolkit/components/places/src/PlaceInfo.h => toolkit/components/places/PlaceInfo.h rename : toolkit/components/places/src/PlacesCategoriesStarter.js => toolkit/components/places/PlacesCategoriesStarter.js rename : toolkit/components/places/src/PlacesDBUtils.jsm => toolkit/components/places/PlacesDBUtils.jsm rename : toolkit/components/places/src/PlacesUtils.jsm => toolkit/components/places/PlacesUtils.jsm rename : toolkit/components/places/src/SQLFunctions.cpp => toolkit/components/places/SQLFunctions.cpp rename : toolkit/components/places/src/SQLFunctions.h => toolkit/components/places/SQLFunctions.h rename : toolkit/components/places/src/VisitInfo.cpp => toolkit/components/places/VisitInfo.cpp rename : toolkit/components/places/src/VisitInfo.h => toolkit/components/places/VisitInfo.h rename : toolkit/components/places/public/mozIAsyncHistory.idl => toolkit/components/places/mozIAsyncHistory.idl rename : toolkit/components/places/public/mozIPlacesAutoComplete.idl => toolkit/components/places/mozIPlacesAutoComplete.idl rename : toolkit/components/places/src/nsAnnoProtocolHandler.cpp => toolkit/components/places/nsAnnoProtocolHandler.cpp rename : toolkit/components/places/src/nsAnnoProtocolHandler.h => toolkit/components/places/nsAnnoProtocolHandler.h rename : toolkit/components/places/src/nsAnnotationService.cpp => toolkit/components/places/nsAnnotationService.cpp rename : toolkit/components/places/src/nsAnnotationService.h => toolkit/components/places/nsAnnotationService.h rename : toolkit/components/places/src/nsFaviconService.cpp => toolkit/components/places/nsFaviconService.cpp rename : toolkit/components/places/src/nsFaviconService.h => toolkit/components/places/nsFaviconService.h rename : toolkit/components/places/public/nsIAnnotationService.idl => toolkit/components/places/nsIAnnotationService.idl rename : toolkit/components/places/public/nsIBrowserHistory.idl => toolkit/components/places/nsIBrowserHistory.idl rename : toolkit/components/places/public/nsIDynamicContainer.idl => toolkit/components/places/nsIDynamicContainer.idl rename : toolkit/components/places/public/nsIFaviconService.idl => toolkit/components/places/nsIFaviconService.idl rename : toolkit/components/places/public/nsILivemarkService.idl => toolkit/components/places/nsILivemarkService.idl rename : toolkit/components/places/public/nsIMicrosummaryService.idl => toolkit/components/places/nsIMicrosummaryService.idl rename : toolkit/components/places/public/nsINavBookmarksService.idl => toolkit/components/places/nsINavBookmarksService.idl rename : toolkit/components/places/public/nsINavHistoryService.idl => toolkit/components/places/nsINavHistoryService.idl rename : toolkit/components/places/public/nsIPlacesImportExportService.idl => toolkit/components/places/nsIPlacesImportExportService.idl rename : toolkit/components/places/public/nsITaggingService.idl => toolkit/components/places/nsITaggingService.idl rename : toolkit/components/places/src/nsLivemarkService.js => toolkit/components/places/nsLivemarkService.js rename : toolkit/components/places/src/nsMaybeWeakPtr.cpp => toolkit/components/places/nsMaybeWeakPtr.cpp rename : toolkit/components/places/src/nsMaybeWeakPtr.h => toolkit/components/places/nsMaybeWeakPtr.h rename : toolkit/components/places/src/nsMicrosummaryService.js => toolkit/components/places/nsMicrosummaryService.js rename : toolkit/components/places/src/nsMorkHistoryImporter.cpp => toolkit/components/places/nsMorkHistoryImporter.cpp rename : toolkit/components/places/src/nsNavBookmarks.cpp => toolkit/components/places/nsNavBookmarks.cpp rename : toolkit/components/places/src/nsNavBookmarks.h => toolkit/components/places/nsNavBookmarks.h rename : toolkit/components/places/src/nsNavHistory.cpp => toolkit/components/places/nsNavHistory.cpp rename : toolkit/components/places/src/nsNavHistory.h => toolkit/components/places/nsNavHistory.h rename : toolkit/components/places/src/nsNavHistoryQuery.cpp => toolkit/components/places/nsNavHistoryQuery.cpp rename : toolkit/components/places/src/nsNavHistoryQuery.h => toolkit/components/places/nsNavHistoryQuery.h rename : toolkit/components/places/src/nsNavHistoryResult.cpp => toolkit/components/places/nsNavHistoryResult.cpp rename : toolkit/components/places/src/nsNavHistoryResult.h => toolkit/components/places/nsNavHistoryResult.h rename : toolkit/components/places/public/nsPIPlacesDatabase.idl => toolkit/components/places/nsPIPlacesDatabase.idl rename : toolkit/components/places/public/nsPIPlacesHistoryListenersNotifier.idl => toolkit/components/places/nsPIPlacesHistoryListenersNotifier.idl rename : toolkit/components/places/src/nsPlacesAutoComplete.js => toolkit/components/places/nsPlacesAutoComplete.js rename : toolkit/components/places/src/nsPlacesAutoComplete.manifest => toolkit/components/places/nsPlacesAutoComplete.manifest rename : toolkit/components/places/src/nsPlacesExpiration.js => toolkit/components/places/nsPlacesExpiration.js rename : toolkit/components/places/src/nsPlacesImportExportService.cpp => toolkit/components/places/nsPlacesImportExportService.cpp rename : toolkit/components/places/src/nsPlacesImportExportService.h => toolkit/components/places/nsPlacesImportExportService.h rename : toolkit/components/places/src/nsPlacesIndexes.h => toolkit/components/places/nsPlacesIndexes.h rename : toolkit/components/places/src/nsPlacesMacros.h => toolkit/components/places/nsPlacesMacros.h rename : toolkit/components/places/src/nsPlacesModule.cpp => toolkit/components/places/nsPlacesModule.cpp rename : toolkit/components/places/src/nsPlacesTables.h => toolkit/components/places/nsPlacesTables.h rename : toolkit/components/places/src/nsPlacesTriggers.h => toolkit/components/places/nsPlacesTriggers.h rename : toolkit/components/places/src/nsTaggingService.js => toolkit/components/places/nsTaggingService.js rename : toolkit/components/places/src/toolkitplaces.manifest => toolkit/components/places/toolkitplaces.manifest rename : toolkit/components/places/src/utils.js => toolkit/components/places/utils.js rename : toolkit/components/satchel/src/formSubmitListener.js => toolkit/components/satchel/formSubmitListener.js rename : toolkit/components/satchel/src/nsFormAutoComplete.js => toolkit/components/satchel/nsFormAutoComplete.js rename : toolkit/components/satchel/src/nsFormAutoCompleteResult.jsm => toolkit/components/satchel/nsFormAutoCompleteResult.jsm rename : toolkit/components/satchel/src/nsFormFillController.cpp => toolkit/components/satchel/nsFormFillController.cpp rename : toolkit/components/satchel/src/nsFormFillController.h => toolkit/components/satchel/nsFormFillController.h rename : toolkit/components/satchel/src/nsFormHistory.js => toolkit/components/satchel/nsFormHistory.js rename : toolkit/components/satchel/public/nsIFormAutoComplete.idl => toolkit/components/satchel/nsIFormAutoComplete.idl rename : toolkit/components/satchel/public/nsIFormFillController.idl => toolkit/components/satchel/nsIFormFillController.idl rename : toolkit/components/satchel/public/nsIFormHistory.idl => toolkit/components/satchel/nsIFormHistory.idl rename : toolkit/components/satchel/public/nsIInputListAutoComplete.idl => toolkit/components/satchel/nsIInputListAutoComplete.idl rename : toolkit/components/satchel/src/nsInputListAutoComplete.js => toolkit/components/satchel/nsInputListAutoComplete.js rename : toolkit/components/satchel/src/satchel.manifest => toolkit/components/satchel/satchel.manifest rename : toolkit/components/startup/src/nsAppStartup.cpp => toolkit/components/startup/nsAppStartup.cpp rename : toolkit/components/startup/src/nsAppStartup.h => toolkit/components/startup/nsAppStartup.h rename : toolkit/components/startup/src/nsTryToClose.js => toolkit/components/startup/nsTryToClose.js rename : toolkit/components/startup/src/nsTryToClose.manifest => toolkit/components/startup/nsTryToClose.manifest rename : toolkit/components/startup/src/nsUserInfo.h => toolkit/components/startup/nsUserInfo.h rename : toolkit/components/startup/src/nsUserInfoMac.h => toolkit/components/startup/nsUserInfoMac.h rename : toolkit/components/startup/src/nsUserInfoMac.mm => toolkit/components/startup/nsUserInfoMac.mm rename : toolkit/components/startup/src/nsUserInfoOS2.cpp => toolkit/components/startup/nsUserInfoOS2.cpp rename : toolkit/components/startup/src/nsUserInfoUnix.cpp => toolkit/components/startup/nsUserInfoUnix.cpp rename : toolkit/components/startup/src/nsUserInfoWin.cpp => toolkit/components/startup/nsUserInfoWin.cpp rename : toolkit/components/typeaheadfind/public/nsITypeAheadFind.idl => toolkit/components/typeaheadfind/nsITypeAheadFind.idl rename : toolkit/components/typeaheadfind/src/nsTypeAheadFind.cpp => toolkit/components/typeaheadfind/nsTypeAheadFind.cpp rename : toolkit/components/typeaheadfind/src/nsTypeAheadFind.h => toolkit/components/typeaheadfind/nsTypeAheadFind.h rename : toolkit/components/url-classifier/public/nsIUrlClassifierDBService.idl => toolkit/components/url-classifier/nsIUrlClassifierDBService.idl rename : toolkit/components/url-classifier/public/nsIUrlClassifierHashCompleter.idl => toolkit/components/url-classifier/nsIUrlClassifierHashCompleter.idl rename : toolkit/components/url-classifier/public/nsIUrlClassifierStreamUpdater.idl => toolkit/components/url-classifier/nsIUrlClassifierStreamUpdater.idl rename : toolkit/components/url-classifier/public/nsIUrlClassifierTable.idl => toolkit/components/url-classifier/nsIUrlClassifierTable.idl rename : toolkit/components/url-classifier/public/nsIUrlClassifierUtils.idl => toolkit/components/url-classifier/nsIUrlClassifierUtils.idl rename : toolkit/components/url-classifier/public/nsIUrlListManager.idl => toolkit/components/url-classifier/nsIUrlListManager.idl rename : toolkit/components/url-classifier/src/nsURLClassifier.manifest => toolkit/components/url-classifier/nsURLClassifier.manifest rename : toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp => toolkit/components/url-classifier/nsUrlClassifierDBService.cpp rename : toolkit/components/url-classifier/src/nsUrlClassifierDBService.h => toolkit/components/url-classifier/nsUrlClassifierDBService.h rename : toolkit/components/url-classifier/src/nsUrlClassifierHashCompleter.cpp => toolkit/components/url-classifier/nsUrlClassifierHashCompleter.cpp rename : toolkit/components/url-classifier/src/nsUrlClassifierHashCompleter.h => toolkit/components/url-classifier/nsUrlClassifierHashCompleter.h rename : toolkit/components/url-classifier/src/nsUrlClassifierLib.js => toolkit/components/url-classifier/nsUrlClassifierLib.js rename : toolkit/components/url-classifier/src/nsUrlClassifierListManager.js => toolkit/components/url-classifier/nsUrlClassifierListManager.js rename : toolkit/components/url-classifier/src/nsUrlClassifierStreamUpdater.cpp => toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp rename : toolkit/components/url-classifier/src/nsUrlClassifierStreamUpdater.h => toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.h rename : toolkit/components/url-classifier/src/nsUrlClassifierUtils.cpp => toolkit/components/url-classifier/nsUrlClassifierUtils.cpp rename : toolkit/components/url-classifier/src/nsUrlClassifierUtils.h => toolkit/components/url-classifier/nsUrlClassifierUtils.h rename : toolkit/components/urlformatter/public/nsIURLFormatter.idl => toolkit/components/urlformatter/nsIURLFormatter.idl rename : toolkit/components/urlformatter/src/nsURLFormatter.js => toolkit/components/urlformatter/nsURLFormatter.js rename : toolkit/components/urlformatter/src/nsURLFormatter.manifest => toolkit/components/urlformatter/nsURLFormatter.manifest rename : toolkit/profile/public/nsIProfileMigrator.idl => toolkit/profile/nsIProfileMigrator.idl rename : toolkit/profile/public/nsIToolkitProfile.idl => toolkit/profile/nsIToolkitProfile.idl rename : toolkit/profile/public/nsIToolkitProfileService.idl => toolkit/profile/nsIToolkitProfileService.idl rename : toolkit/profile/src/nsToolkitProfileService.cpp => toolkit/profile/nsToolkitProfileService.cpp
958 lines
25 KiB
C++
958 lines
25 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* ***** 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 the new Mozilla toolkit.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Benjamin Smedberg <bsmedberg@covad.net>
|
|
* Portions created by the Initial Developer are Copyright (C) 2004
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "nsProfileLock.h"
|
|
|
|
#ifdef XP_WIN
|
|
#include <windows.h>
|
|
#include <shlobj.h>
|
|
#endif
|
|
#ifdef XP_UNIX
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#include "nsIToolkitProfileService.h"
|
|
#include "nsIToolkitProfile.h"
|
|
#include "nsIFactory.h"
|
|
#include "nsILocalFile.h"
|
|
#include "nsISimpleEnumerator.h"
|
|
|
|
#ifdef XP_MACOSX
|
|
#include <CoreFoundation/CoreFoundation.h>
|
|
#include "nsILocalFileMac.h"
|
|
#endif
|
|
|
|
#include "nsAppDirectoryServiceDefs.h"
|
|
#include "nsXULAppAPI.h"
|
|
|
|
#include "nsINIParser.h"
|
|
#include "nsXREDirProvider.h"
|
|
#include "nsAppRunner.h"
|
|
#include "nsString.h"
|
|
#include "nsReadableUtils.h"
|
|
#include "nsNativeCharsetUtils.h"
|
|
|
|
|
|
class nsToolkitProfile : public nsIToolkitProfile
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSITOOLKITPROFILE
|
|
|
|
friend class nsToolkitProfileService;
|
|
nsCOMPtr<nsToolkitProfile> mNext;
|
|
nsToolkitProfile *mPrev;
|
|
|
|
~nsToolkitProfile() { }
|
|
|
|
private:
|
|
nsToolkitProfile(const nsACString& aName,
|
|
nsILocalFile* aRootDir,
|
|
nsILocalFile* aLocalDir,
|
|
nsToolkitProfile* aPrev);
|
|
|
|
friend class nsToolkitProfileLock;
|
|
|
|
nsCString mName;
|
|
nsCOMPtr<nsILocalFile> mRootDir;
|
|
nsCOMPtr<nsILocalFile> mLocalDir;
|
|
nsIProfileLock* mLock;
|
|
};
|
|
|
|
class nsToolkitProfileLock : public nsIProfileLock
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSIPROFILELOCK
|
|
|
|
nsresult Init(nsToolkitProfile* aProfile, nsIProfileUnlocker* *aUnlocker);
|
|
nsresult Init(nsILocalFile* aDirectory, nsILocalFile* aLocalDirectory,
|
|
nsIProfileUnlocker* *aUnlocker);
|
|
|
|
nsToolkitProfileLock() { }
|
|
~nsToolkitProfileLock();
|
|
|
|
private:
|
|
nsCOMPtr<nsToolkitProfile> mProfile;
|
|
nsCOMPtr<nsILocalFile> mDirectory;
|
|
nsCOMPtr<nsILocalFile> mLocalDirectory;
|
|
|
|
nsProfileLock mLock;
|
|
};
|
|
|
|
class nsToolkitProfileFactory : public nsIFactory
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSIFACTORY
|
|
};
|
|
|
|
class nsToolkitProfileService : public nsIToolkitProfileService
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSITOOLKITPROFILESERVICE
|
|
|
|
private:
|
|
friend class nsToolkitProfile;
|
|
friend class nsToolkitProfileFactory;
|
|
friend nsresult NS_NewToolkitProfileService(nsIToolkitProfileService**);
|
|
|
|
nsToolkitProfileService() :
|
|
mDirty(PR_FALSE),
|
|
mStartWithLast(PR_TRUE),
|
|
mStartOffline(PR_FALSE)
|
|
{
|
|
gService = this;
|
|
}
|
|
~nsToolkitProfileService()
|
|
{
|
|
gService = nsnull;
|
|
}
|
|
|
|
NS_HIDDEN_(nsresult) Init();
|
|
|
|
nsRefPtr<nsToolkitProfile> mFirst;
|
|
nsCOMPtr<nsIToolkitProfile> mChosen;
|
|
nsCOMPtr<nsILocalFile> mAppData;
|
|
nsCOMPtr<nsILocalFile> mTempData;
|
|
nsCOMPtr<nsILocalFile> mListFile;
|
|
PRBool mDirty;
|
|
PRBool mStartWithLast;
|
|
PRBool mStartOffline;
|
|
|
|
static nsToolkitProfileService *gService;
|
|
|
|
class ProfileEnumerator : public nsISimpleEnumerator
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSISIMPLEENUMERATOR
|
|
|
|
ProfileEnumerator(nsToolkitProfile *first)
|
|
{ mCurrent = first; }
|
|
private:
|
|
~ProfileEnumerator() { }
|
|
nsCOMPtr<nsToolkitProfile> mCurrent;
|
|
};
|
|
};
|
|
|
|
nsToolkitProfile::nsToolkitProfile(const nsACString& aName,
|
|
nsILocalFile* aRootDir,
|
|
nsILocalFile* aLocalDir,
|
|
nsToolkitProfile* aPrev) :
|
|
mPrev(aPrev),
|
|
mName(aName),
|
|
mRootDir(aRootDir),
|
|
mLocalDir(aLocalDir),
|
|
mLock(nsnull)
|
|
{
|
|
NS_ASSERTION(aRootDir, "No file!");
|
|
|
|
if (aPrev)
|
|
aPrev->mNext = this;
|
|
else
|
|
nsToolkitProfileService::gService->mFirst = this;
|
|
}
|
|
|
|
NS_IMPL_ISUPPORTS1(nsToolkitProfile, nsIToolkitProfile)
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfile::GetRootDir(nsILocalFile* *aResult)
|
|
{
|
|
NS_ADDREF(*aResult = mRootDir);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfile::GetLocalDir(nsILocalFile* *aResult)
|
|
{
|
|
NS_ADDREF(*aResult = mLocalDir);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfile::GetName(nsACString& aResult)
|
|
{
|
|
aResult = mName;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfile::SetName(const nsACString& aName)
|
|
{
|
|
NS_ASSERTION(nsToolkitProfileService::gService,
|
|
"Where did my service go?");
|
|
|
|
mName = aName;
|
|
nsToolkitProfileService::gService->mDirty = PR_TRUE;
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfile::Remove(PRBool removeFiles)
|
|
{
|
|
NS_ASSERTION(nsToolkitProfileService::gService,
|
|
"Whoa, my service is gone.");
|
|
|
|
if (mLock)
|
|
return NS_ERROR_FILE_IS_LOCKED;
|
|
|
|
if (removeFiles) {
|
|
PRBool equals;
|
|
nsresult rv = mRootDir->Equals(mLocalDir, &equals);
|
|
if (NS_FAILED(rv))
|
|
return rv;
|
|
|
|
// The root dir might contain the temp dir, so remove
|
|
// the temp dir first.
|
|
if (!equals)
|
|
mLocalDir->Remove(PR_TRUE);
|
|
|
|
mRootDir->Remove(PR_TRUE);
|
|
}
|
|
|
|
if (mPrev)
|
|
mPrev->mNext = mNext;
|
|
else
|
|
nsToolkitProfileService::gService->mFirst = mNext;
|
|
|
|
if (mNext)
|
|
mNext->mPrev = mPrev;
|
|
|
|
mPrev = nsnull;
|
|
mNext = nsnull;
|
|
|
|
if (nsToolkitProfileService::gService->mChosen == this)
|
|
nsToolkitProfileService::gService->mChosen = nsnull;
|
|
|
|
nsToolkitProfileService::gService->mDirty = PR_TRUE;
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfile::Lock(nsIProfileUnlocker* *aUnlocker, nsIProfileLock* *aResult)
|
|
{
|
|
if (mLock) {
|
|
NS_ADDREF(*aResult = mLock);
|
|
return NS_OK;
|
|
}
|
|
|
|
nsCOMPtr<nsToolkitProfileLock> lock = new nsToolkitProfileLock();
|
|
if (!lock) return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
nsresult rv = lock->Init(this, aUnlocker);
|
|
if (NS_FAILED(rv)) return rv;
|
|
|
|
NS_ADDREF(*aResult = lock);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMPL_ISUPPORTS1(nsToolkitProfileLock, nsIProfileLock)
|
|
|
|
nsresult
|
|
nsToolkitProfileLock::Init(nsToolkitProfile* aProfile, nsIProfileUnlocker* *aUnlocker)
|
|
{
|
|
nsresult rv;
|
|
rv = Init(aProfile->mRootDir, aProfile->mLocalDir, aUnlocker);
|
|
if (NS_SUCCEEDED(rv))
|
|
mProfile = aProfile;
|
|
|
|
return rv;
|
|
}
|
|
|
|
nsresult
|
|
nsToolkitProfileLock::Init(nsILocalFile* aDirectory, nsILocalFile* aLocalDirectory,
|
|
nsIProfileUnlocker* *aUnlocker)
|
|
{
|
|
nsresult rv;
|
|
|
|
rv = mLock.Lock(aDirectory, aUnlocker);
|
|
|
|
if (NS_SUCCEEDED(rv)) {
|
|
mDirectory = aDirectory;
|
|
mLocalDirectory = aLocalDirectory;
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileLock::GetDirectory(nsILocalFile* *aResult)
|
|
{
|
|
if (!mDirectory) {
|
|
NS_ERROR("Not initialized, or unlocked!");
|
|
return NS_ERROR_NOT_INITIALIZED;
|
|
}
|
|
|
|
NS_ADDREF(*aResult = mDirectory);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileLock::GetLocalDirectory(nsILocalFile* *aResult)
|
|
{
|
|
if (!mLocalDirectory) {
|
|
NS_ERROR("Not initialized, or unlocked!");
|
|
return NS_ERROR_NOT_INITIALIZED;
|
|
}
|
|
|
|
NS_ADDREF(*aResult = mLocalDirectory);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileLock::Unlock()
|
|
{
|
|
if (!mDirectory) {
|
|
NS_ERROR("Unlocking a never-locked nsToolkitProfileLock!");
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
mLock.Unlock();
|
|
|
|
if (mProfile) {
|
|
mProfile->mLock = nsnull;
|
|
mProfile = nsnull;
|
|
}
|
|
mDirectory = nsnull;
|
|
mLocalDirectory = nsnull;
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
nsToolkitProfileLock::~nsToolkitProfileLock()
|
|
{
|
|
if (mDirectory) {
|
|
Unlock();
|
|
}
|
|
}
|
|
|
|
nsToolkitProfileService*
|
|
nsToolkitProfileService::gService = nsnull;
|
|
|
|
NS_IMPL_ISUPPORTS1(nsToolkitProfileService,
|
|
nsIToolkitProfileService)
|
|
|
|
nsresult
|
|
nsToolkitProfileService::Init()
|
|
{
|
|
NS_ASSERTION(gDirServiceProvider, "No dirserviceprovider!");
|
|
nsresult rv;
|
|
|
|
rv = gDirServiceProvider->GetUserAppDataDirectory(getter_AddRefs(mAppData));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rv = gDirServiceProvider->GetUserLocalDataDirectory(getter_AddRefs(mTempData));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nsCOMPtr<nsIFile> listFile;
|
|
rv = mAppData->Clone(getter_AddRefs(listFile));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
mListFile = do_QueryInterface(listFile);
|
|
NS_ENSURE_TRUE(listFile, NS_ERROR_NO_INTERFACE);
|
|
|
|
rv = mListFile->AppendNative(NS_LITERAL_CSTRING("profiles.ini"));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
PRBool exists;
|
|
rv = mListFile->IsFile(&exists);
|
|
if (NS_FAILED(rv) || !exists) {
|
|
return NS_OK;
|
|
}
|
|
|
|
PRInt64 size;
|
|
rv = listFile->GetFileSize(&size);
|
|
if (NS_FAILED(rv) || !size) {
|
|
return NS_OK;
|
|
}
|
|
|
|
nsINIParser parser;
|
|
rv = parser.Init(mListFile);
|
|
// Init does not fail on parsing errors, only on OOM/really unexpected
|
|
// conditions.
|
|
if (NS_FAILED(rv))
|
|
return rv;
|
|
|
|
nsCAutoString buffer;
|
|
rv = parser.GetString("General", "StartWithLastProfile", buffer);
|
|
if (NS_SUCCEEDED(rv) && buffer.EqualsLiteral("0"))
|
|
mStartWithLast = PR_FALSE;
|
|
|
|
nsToolkitProfile* currentProfile = nsnull;
|
|
|
|
unsigned int c = 0;
|
|
for (c = 0; PR_TRUE; ++c) {
|
|
nsCAutoString profileID("Profile");
|
|
profileID.AppendInt(c);
|
|
|
|
rv = parser.GetString(profileID.get(), "IsRelative", buffer);
|
|
if (NS_FAILED(rv)) break;
|
|
|
|
PRBool isRelative = buffer.EqualsLiteral("1");
|
|
|
|
nsCAutoString filePath;
|
|
|
|
rv = parser.GetString(profileID.get(), "Path", filePath);
|
|
if (NS_FAILED(rv)) {
|
|
NS_ERROR("Malformed profiles.ini: Path= not found");
|
|
continue;
|
|
}
|
|
|
|
rv = parser.GetString(profileID.get(), "Name", buffer);
|
|
if (NS_FAILED(rv)) {
|
|
NS_ERROR("Malformed profiles.ini: Name= not found");
|
|
continue;
|
|
}
|
|
|
|
nsCOMPtr<nsILocalFile> rootDir;
|
|
rv = NS_NewNativeLocalFile(EmptyCString(), PR_TRUE,
|
|
getter_AddRefs(rootDir));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
if (isRelative) {
|
|
rv = rootDir->SetRelativeDescriptor(mAppData, filePath);
|
|
} else {
|
|
rv = rootDir->SetPersistentDescriptor(filePath);
|
|
}
|
|
if (NS_FAILED(rv)) continue;
|
|
|
|
nsCOMPtr<nsILocalFile> localDir;
|
|
if (isRelative) {
|
|
rv = NS_NewNativeLocalFile(EmptyCString(), PR_TRUE,
|
|
getter_AddRefs(localDir));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rv = localDir->SetRelativeDescriptor(mTempData, filePath);
|
|
} else {
|
|
localDir = rootDir;
|
|
}
|
|
|
|
currentProfile = new nsToolkitProfile(buffer,
|
|
rootDir, localDir,
|
|
currentProfile);
|
|
NS_ENSURE_TRUE(currentProfile, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
rv = parser.GetString(profileID.get(), "Default", buffer);
|
|
if (NS_SUCCEEDED(rv) && buffer.EqualsLiteral("1"))
|
|
mChosen = currentProfile;
|
|
}
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::SetStartWithLastProfile(PRBool aValue)
|
|
{
|
|
if (mStartWithLast != aValue) {
|
|
mStartWithLast = aValue;
|
|
mDirty = PR_TRUE;
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::GetStartWithLastProfile(PRBool *aResult)
|
|
{
|
|
*aResult = mStartWithLast;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::GetStartOffline(PRBool *aResult)
|
|
{
|
|
*aResult = mStartOffline;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::SetStartOffline(PRBool aValue)
|
|
{
|
|
mStartOffline = aValue;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::GetProfiles(nsISimpleEnumerator* *aResult)
|
|
{
|
|
*aResult = new ProfileEnumerator(this->mFirst);
|
|
if (!*aResult)
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
NS_ADDREF(*aResult);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMPL_ISUPPORTS1(nsToolkitProfileService::ProfileEnumerator,
|
|
nsISimpleEnumerator)
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::ProfileEnumerator::HasMoreElements(PRBool* aResult)
|
|
{
|
|
*aResult = mCurrent ? PR_TRUE : PR_FALSE;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::ProfileEnumerator::GetNext(nsISupports* *aResult)
|
|
{
|
|
if (!mCurrent) return NS_ERROR_FAILURE;
|
|
|
|
NS_ADDREF(*aResult = mCurrent);
|
|
|
|
mCurrent = mCurrent->mNext;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::GetSelectedProfile(nsIToolkitProfile* *aResult)
|
|
{
|
|
if (!mChosen && mFirst && !mFirst->mNext) // only one profile
|
|
mChosen = mFirst;
|
|
|
|
if (!mChosen) return NS_ERROR_FAILURE;
|
|
|
|
NS_ADDREF(*aResult = mChosen);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::SetSelectedProfile(nsIToolkitProfile* aProfile)
|
|
{
|
|
if (mChosen != aProfile) {
|
|
mChosen = aProfile;
|
|
mDirty = PR_TRUE;
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::GetProfileByName(const nsACString& aName,
|
|
nsIToolkitProfile* *aResult)
|
|
{
|
|
nsToolkitProfile* curP = mFirst;
|
|
while (curP) {
|
|
if (curP->mName.Equals(aName)) {
|
|
NS_ADDREF(*aResult = curP);
|
|
return NS_OK;
|
|
}
|
|
curP = curP->mNext;
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::LockProfilePath(nsILocalFile* aDirectory,
|
|
nsILocalFile* aLocalDirectory,
|
|
nsIProfileLock* *aResult)
|
|
{
|
|
return NS_LockProfilePath(aDirectory, aLocalDirectory, nsnull, aResult);
|
|
}
|
|
|
|
nsresult
|
|
NS_LockProfilePath(nsILocalFile* aPath, nsILocalFile* aTempPath,
|
|
nsIProfileUnlocker* *aUnlocker, nsIProfileLock* *aResult)
|
|
{
|
|
nsCOMPtr<nsToolkitProfileLock> lock = new nsToolkitProfileLock();
|
|
if (!lock) return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
nsresult rv = lock->Init(aPath, aTempPath, aUnlocker);
|
|
if (NS_FAILED(rv)) return rv;
|
|
|
|
NS_ADDREF(*aResult = lock);
|
|
return NS_OK;
|
|
}
|
|
|
|
static const char kTable[] =
|
|
{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
|
|
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
|
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
|
|
|
|
static void SaltProfileName(nsACString& aName)
|
|
{
|
|
double fpTime;
|
|
LL_L2D(fpTime, PR_Now());
|
|
|
|
// use 1e-6, granularity of PR_Now() on the mac is seconds
|
|
srand((uint)(fpTime * 1e-6 + 0.5));
|
|
|
|
char salt[9];
|
|
|
|
int i;
|
|
for (i = 0; i < 8; ++i)
|
|
salt[i] = kTable[rand() % NS_ARRAY_LENGTH(kTable)];
|
|
|
|
salt[8] = '.';
|
|
|
|
aName.Insert(salt, 0, 9);
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::CreateProfile(nsILocalFile* aRootDir,
|
|
nsILocalFile* aLocalDir,
|
|
const nsACString& aName,
|
|
nsIToolkitProfile* *aResult)
|
|
{
|
|
nsresult rv;
|
|
|
|
rv = GetProfileByName(aName, aResult);
|
|
if (NS_SUCCEEDED(rv)) return rv;
|
|
|
|
nsCOMPtr<nsILocalFile> rootDir (aRootDir);
|
|
|
|
nsCAutoString dirName;
|
|
if (!rootDir) {
|
|
nsCOMPtr<nsIFile> file;
|
|
PRBool dummy;
|
|
rv = gDirServiceProvider->GetFile(NS_APP_USER_PROFILES_ROOT_DIR, &dummy,
|
|
getter_AddRefs(file));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rootDir = do_QueryInterface(file);
|
|
NS_ENSURE_TRUE(rootDir, NS_ERROR_UNEXPECTED);
|
|
|
|
dirName = aName;
|
|
SaltProfileName(dirName);
|
|
|
|
if (NS_IsNativeUTF8()) {
|
|
rootDir->AppendNative(dirName);
|
|
} else {
|
|
rootDir->Append(NS_ConvertUTF8toUTF16(dirName));
|
|
}
|
|
}
|
|
|
|
nsCOMPtr<nsILocalFile> localDir (aLocalDir);
|
|
|
|
if (!localDir) {
|
|
if (aRootDir) {
|
|
localDir = aRootDir;
|
|
}
|
|
else {
|
|
nsCOMPtr<nsIFile> file;
|
|
PRBool dummy;
|
|
rv = gDirServiceProvider->GetFile(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR,
|
|
&dummy, getter_AddRefs(file));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
localDir = do_QueryInterface(file);
|
|
NS_ENSURE_TRUE(localDir, NS_ERROR_UNEXPECTED);
|
|
|
|
// use same salting
|
|
if (NS_IsNativeUTF8()) {
|
|
localDir->AppendNative(dirName);
|
|
} else {
|
|
localDir->Append(NS_ConvertUTF8toUTF16(dirName));
|
|
}
|
|
}
|
|
}
|
|
|
|
PRBool exists;
|
|
rv = rootDir->Exists(&exists);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
if (exists) {
|
|
rv = rootDir->IsDirectory(&exists);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
if (!exists)
|
|
return NS_ERROR_FILE_NOT_DIRECTORY;
|
|
}
|
|
else {
|
|
nsCOMPtr<nsIFile> profileDefaultsDir;
|
|
nsCOMPtr<nsIFile> profileDirParent;
|
|
nsAutoString profileDirName;
|
|
|
|
rv = rootDir->GetParent(getter_AddRefs(profileDirParent));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rv = rootDir->GetLeafName(profileDirName);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
PRBool dummy;
|
|
rv = gDirServiceProvider->GetFile(NS_APP_PROFILE_DEFAULTS_50_DIR, &dummy,
|
|
getter_AddRefs(profileDefaultsDir));
|
|
|
|
if (NS_SUCCEEDED(rv))
|
|
rv = profileDefaultsDir->CopyTo(profileDirParent,
|
|
profileDirName);
|
|
if (NS_FAILED(rv)) {
|
|
// if copying failed, lets just ensure that the profile directory exists.
|
|
rv = rootDir->Create(nsIFile::DIRECTORY_TYPE, 0700);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
}
|
|
rv = rootDir->SetPermissions(0700);
|
|
#ifndef ANDROID
|
|
// If the profile is on the sdcard, this will fail but its non-fatal
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
#endif
|
|
}
|
|
|
|
rv = localDir->Exists(&exists);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
if (!exists) {
|
|
rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0700);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
}
|
|
|
|
nsToolkitProfile* last = mFirst;
|
|
if (last) {
|
|
while (last->mNext)
|
|
last = last->mNext;
|
|
}
|
|
|
|
nsCOMPtr<nsIToolkitProfile> profile =
|
|
new nsToolkitProfile(aName, rootDir, localDir, last);
|
|
if (!profile) return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
NS_ADDREF(*aResult = profile);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::GetProfileCount(PRUint32 *aResult)
|
|
{
|
|
if (!mFirst)
|
|
*aResult = 0;
|
|
else if (! mFirst->mNext)
|
|
*aResult = 1;
|
|
else
|
|
*aResult = 2;
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileService::Flush()
|
|
{
|
|
// Errors during writing might cause unhappy semi-written files.
|
|
// To avoid this, write the entire thing to a buffer, then write
|
|
// that buffer to disk.
|
|
|
|
nsresult rv;
|
|
PRUint32 pCount = 0;
|
|
nsToolkitProfile *cur;
|
|
|
|
for (cur = mFirst; cur != nsnull; cur = cur->mNext)
|
|
++pCount;
|
|
|
|
PRUint32 length;
|
|
nsAutoArrayPtr<char> buffer (new char[100+MAXPATHLEN*pCount]);
|
|
|
|
NS_ENSURE_TRUE(buffer, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
char *end = buffer;
|
|
|
|
end += sprintf(end,
|
|
"[General]\n"
|
|
"StartWithLastProfile=%s\n\n",
|
|
mStartWithLast ? "1" : "0");
|
|
|
|
nsCAutoString path;
|
|
cur = mFirst;
|
|
pCount = 0;
|
|
|
|
while (cur) {
|
|
// if the profile dir is relative to appdir...
|
|
PRBool isRelative;
|
|
rv = mAppData->Contains(cur->mRootDir, PR_TRUE, &isRelative);
|
|
if (NS_SUCCEEDED(rv) && isRelative) {
|
|
// we use a relative descriptor
|
|
rv = cur->mRootDir->GetRelativeDescriptor(mAppData, path);
|
|
} else {
|
|
// otherwise, a persistent descriptor
|
|
rv = cur->mRootDir->GetPersistentDescriptor(path);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
}
|
|
|
|
end += sprintf(end,
|
|
"[Profile%u]\n"
|
|
"Name=%s\n"
|
|
"IsRelative=%s\n"
|
|
"Path=%s\n",
|
|
pCount, cur->mName.get(),
|
|
isRelative ? "1" : "0", path.get());
|
|
|
|
if (mChosen == cur) {
|
|
end += sprintf(end, "Default=1\n");
|
|
}
|
|
|
|
end += sprintf(end, "\n");
|
|
|
|
cur = cur->mNext;
|
|
++pCount;
|
|
}
|
|
|
|
FILE* writeFile;
|
|
rv = mListFile->OpenANSIFileDesc("w", &writeFile);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
if (buffer) {
|
|
length = end - buffer;
|
|
|
|
if (fwrite(buffer, sizeof(char), length, writeFile) != length) {
|
|
fclose(writeFile);
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
}
|
|
|
|
fclose(writeFile);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMPL_ISUPPORTS1(nsToolkitProfileFactory, nsIFactory)
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileFactory::CreateInstance(nsISupports* aOuter, const nsID& aIID,
|
|
void** aResult)
|
|
{
|
|
if (aOuter)
|
|
return NS_ERROR_NO_AGGREGATION;
|
|
|
|
nsCOMPtr<nsIToolkitProfileService> profileService =
|
|
nsToolkitProfileService::gService;
|
|
if (!profileService) {
|
|
nsresult rv = NS_NewToolkitProfileService(getter_AddRefs(profileService));
|
|
if (NS_FAILED(rv))
|
|
return rv;
|
|
}
|
|
return profileService->QueryInterface(aIID, aResult);
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsToolkitProfileFactory::LockFactory(PRBool aVal)
|
|
{
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult
|
|
NS_NewToolkitProfileFactory(nsIFactory* *aResult)
|
|
{
|
|
*aResult = new nsToolkitProfileFactory();
|
|
if (!*aResult)
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
NS_ADDREF(*aResult);
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult
|
|
NS_NewToolkitProfileService(nsIToolkitProfileService* *aResult)
|
|
{
|
|
nsToolkitProfileService* profileService = new nsToolkitProfileService();
|
|
if (!profileService)
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
nsresult rv = profileService->Init();
|
|
if (NS_FAILED(rv)) {
|
|
NS_ERROR("nsToolkitProfileService::Init failed!");
|
|
delete profileService;
|
|
return rv;
|
|
}
|
|
|
|
NS_ADDREF(*aResult = profileService);
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult
|
|
XRE_GetFileFromPath(const char *aPath, nsILocalFile* *aResult)
|
|
{
|
|
#if defined(XP_MACOSX)
|
|
PRInt32 pathLen = strlen(aPath);
|
|
if (pathLen > MAXPATHLEN)
|
|
return NS_ERROR_INVALID_ARG;
|
|
|
|
CFURLRef fullPath =
|
|
CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8 *) aPath,
|
|
pathLen, true);
|
|
if (!fullPath)
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsCOMPtr<nsILocalFile> lf;
|
|
nsresult rv = NS_NewNativeLocalFile(EmptyCString(), PR_TRUE,
|
|
getter_AddRefs(lf));
|
|
if (NS_SUCCEEDED(rv)) {
|
|
nsCOMPtr<nsILocalFileMac> lfMac = do_QueryInterface(lf, &rv);
|
|
if (NS_SUCCEEDED(rv)) {
|
|
rv = lfMac->InitWithCFURL(fullPath);
|
|
if (NS_SUCCEEDED(rv))
|
|
NS_ADDREF(*aResult = lf);
|
|
}
|
|
}
|
|
CFRelease(fullPath);
|
|
return rv;
|
|
|
|
#elif defined(XP_UNIX)
|
|
char fullPath[MAXPATHLEN];
|
|
|
|
if (!realpath(aPath, fullPath))
|
|
return NS_ERROR_FAILURE;
|
|
|
|
return NS_NewNativeLocalFile(nsDependentCString(fullPath), PR_TRUE,
|
|
aResult);
|
|
#elif defined(XP_OS2)
|
|
char fullPath[MAXPATHLEN];
|
|
|
|
if (!realpath(aPath, fullPath))
|
|
return NS_ERROR_FAILURE;
|
|
|
|
// realpath on OS/2 returns a unix-ized path, so re-native-ize
|
|
for (char* ptr = strchr(fullPath, '/'); ptr; ptr = strchr(ptr, '/'))
|
|
*ptr = '\\';
|
|
|
|
return NS_NewNativeLocalFile(nsDependentCString(fullPath), PR_TRUE,
|
|
aResult);
|
|
|
|
#elif defined(XP_WIN)
|
|
WCHAR fullPath[MAXPATHLEN];
|
|
|
|
if (!_wfullpath(fullPath, NS_ConvertUTF8toUTF16(aPath).get(), MAXPATHLEN))
|
|
return NS_ERROR_FAILURE;
|
|
|
|
return NS_NewLocalFile(nsDependentString(fullPath), PR_TRUE,
|
|
aResult);
|
|
|
|
#else
|
|
#error Platform-specific logic needed here.
|
|
#endif
|
|
}
|