Name Description Size
bookmark_sync
BookmarkHTMLUtils.sys.mjs This file works on the old-style "bookmarks.html" file. It includes functions to import and export existing bookmarks to this file format. Format ------ Primary heading := h1 Old version used this to set attributes on the bookmarks RDF root, such as the last modified date. We only use H1 to check for the attribute PLACES_ROOT, which tells us that this hierarchy root is the places root. For backwards compatibility, if we don't find this, we assume that the hierarchy is rooted at the bookmarks menu. Heading := any heading other than h1 Old version used this to set attributes on the current container. We only care about the content of the heading container, which contains the title of the bookmark container. Bookmark := a HREF is the destination of the bookmark FEEDURL is the URI of the RSS feed. This is deprecated and no more supported, but some old files may still contain it. LAST_CHARSET is stored as an annotation so that the next time we go to that page we remember the user's preference. ICON will be stored in the favicon service ICON_URI is new for places bookmarks.html, it refers to the original URI of the favicon so we don't have to make up favicon URLs. Text of the <a> container is the name of the bookmark Ignored: LAST_VISIT, ID (writing out non-RDF IDs can confuse Firefox 2) Bookmark comment := dd This affects the previosly added bookmark Separator := hr Insert a separator into the current container The folder hierarchy is defined by <dl>/<ul>/<menu> (the old importing code handles all these cases, when we write, use <dl>). Overall design -------------- We need to emulate a recursive parser. A "Bookmark import frame" is created corresponding to each folder we encounter. These are arranged in a stack, and contain all the state we need to keep track of. A frame is created when we find a heading, which defines a new container. The frame also keeps track of the nesting of <DL>s, (in well-formed bookmarks files, these will have a 1-1 correspondence with frames, but we try to be a little more flexible here). When the nesting count decreases to 0, then we know a frame is complete and to pop back to the previous frame. Note that a lot of things happen when tags are CLOSED because we need to get the text from the content of the tag. For example, link and heading tags both require the content (= title) before actually creating it. 35911
BookmarkJSONUtils.sys.mjs Import bookmarks from a url. @param {string} aSpec url of the bookmark data. @param {boolean} [options.replace] Whether we should erase existing bookmarks before importing. @param {PlacesUtils.bookmarks.SOURCES} [options.source] The bookmark change source, used to determine the sync status for imported bookmarks. Defaults to `RESTORE` if `replace = true`, or `IMPORT` otherwise. @returns {Promise<number>} The number of imported bookmarks, not including folders and separators. @resolves When the new bookmarks have been created. @rejects JavaScript exception. 17726
BookmarkList.sys.mjs A collection of bookmarks that internally stays up-to-date in order to efficiently query whether certain URLs are bookmarked. 7497
Bookmarks.sys.mjs This module provides an asynchronous API for managing bookmarks. Bookmarks are organized in a tree structure, and include URLs, folders and separators. Multiple bookmarks for the same URL are allowed. Note that if you are handling bookmarks operations in the UI, you should not use this API directly, but rather use PlacesTransactions, so that any operation is undo/redo-able. Each bookmark-item is represented by an object having the following properties: - guid (string) The globally unique identifier of the item. - parentGuid (string) The globally unique identifier of the folder containing the item. This will be an empty string for the Places root folder. - index (number) The 0-based position of the item in the parent folder. - dateAdded (Date) The time at which the item was added. - lastModified (Date) The time at which the item was last modified. - type (number) The item's type, either TYPE_BOOKMARK, TYPE_FOLDER or TYPE_SEPARATOR. The following properties are only valid for URLs or folders. - title (string) The item's title, if any. Empty titles and null titles are considered the same. Titles longer than DB_TITLE_LENGTH_MAX will be truncated. The following properties are only valid for URLs: - url (URL, href or nsIURI) The item's URL. Note that while input objects can contains either an URL object, an href string, or an nsIURI, output objects will always contain an URL object. An URL cannot be longer than DB_URL_LENGTH_MAX, methods will throw if a longer value is provided. Each successful operation notifies through the PlacesObservers interface. To listen to such notifications you must register using PlacesUtils.observers.addListener and PlacesUtils.observers.removeListener methods. Note that bookmark addition or order changes won't notify bookmark-moved for items that have their indexes changed. Similarly, lastModified changes not done explicitly (like changing another property) won't fire a bookmark-time-changed notification. @see PlacesObservers 117071
components.conf 5061
Database.cpp Get the filename for a corrupt database. 85701
Database.h Initializes the database connection and the schema. In case of corruption the database is copied to a backup file and replaced. 11181
ExtensionSearchHandler.sys.mjs Registers a keyword. @param {string} keyword The keyword to register. @param {Extension} extension The extension registering the keyword. 11130
FaviconHelpers.cpp Fetches information about a page from the database. @param aDB Database connection to history tables. @param _page Page that should be fetched. 38525
FaviconHelpers.h Represents one of the payloads (frames) of an icon entry. 7318
Helpers.cpp 13111
Helpers.h This file contains helper classes used by various bits of Places code. 10228
History.cpp Sets the transition type of the visit, as well as if it was typed. @param aTransitionType The transition type constant to set. Must be one of the TRANSITION_ constants on nsINavHistoryService. 83967
History.h Adds an entry in moz_places with the data in aVisitData. @param aPlace The visit data to use to populate a new row in moz_places. 6770
History.sys.mjs Asynchronous API for managing history. The API makes use of `PageInfo` and `VisitInfo` objects, defined as follows. A `PageInfo` object is any object that contains A SUBSET of the following properties: - guid: (string) The globally unique id of the page. - url: (URL) or (nsIURI) or (string) The full URI of the page. Note that `PageInfo` values passed as argument may hold `nsIURI` or `string` values for property `url`, but `PageInfo` objects returned by this module always hold `URL` values. - title: (string) The title associated with the page, if any. - description: (string) The description of the page, if any. - previewImageURL: (URL) or (nsIURI) or (string) The preview image URL of the page, if any. - frecency: (number) The frecency of the page, if any. See https://developer.mozilla.org/en-US/docs/Mozilla/Tech/Places/Frecency_algorithm Note that this property may not be used to change the actualy frecency score of a page, only to retrieve it. In other words, any `frecency` field passed as argument to a function of this API will be ignored. - visits: (Array<VisitInfo>) All the visits for this page, if any. - annotations: (Map) A map containing key/value pairs of the annotations for this page, if any. See the documentation of individual methods to find out which properties are required for `PageInfo` arguments or returned for `PageInfo` results. A `VisitInfo` object is any object that contains A SUBSET of the following properties: - date: (Date) The time the visit occurred. - transition: (number) How the user reached the page. See constants `TRANSITIONS.*` for the possible transition types. - referrer: (URL) or (nsIURI) or (string) The referring URI of this visit. Note that `VisitInfo` passed as argument may hold `nsIURI` or `string` values for property `referrer`, but `VisitInfo` objects returned by this module always hold `URL` values. See the documentation of individual methods to find out which properties are required for `VisitInfo` arguments or returned for `VisitInfo` results. Each successful operation notifies through the PlacesObservers. To listen to such notifications you must register using PlacesObservers `addListener` and `removeListener` methods. @see PlacesObservers 57875
INativePlacesEventCallback.h 989
metrics.yaml 3611
moz.build 2381
mozIAsyncHistory.idl The machine-local (internal) id of the visit. 5261
mozIPlacesAutoComplete.idl This interface provides some constants used by the Places AutoComplete search provider as well as methods to track opened pages for AutoComplete purposes. 2859
mozIPlacesPendingOperation.idl Cancels a pending operation, if possible. This will only fail if you try to cancel more than once. 487
mozISyncedBookmarksMirror.idl 4097
NotifyRankingChanged.h 1331
nsCachedFaviconProtocolHandler.cpp Implementation of cached-favicon: URLs for accessing favicons. The urls are sent to the favicon service. If the favicon service doesn't have the data, a stream containing the default favicon will be returned. 11179
nsCachedFaviconProtocolHandler.h Obtains a new channel to be used to get a favicon from the database. This method is asynchronous. @param aURI The URI the channel will be created for. This is the URI that is set as the original URI on the channel. @param aCachedFaviconURI The URI that holds the data needed to get the favicon from the database. @param aLoadInfo The loadinfo that requested the resource load. @returns (via _channel) the channel that will obtain the favicon data. 1997
nsFaviconService.cpp This is the favicon service, which stores favicons for web pages with your history as you browse. It is also used to save the favicons for bookmarks. DANGER: The history query system makes assumptions about the favicon storage so that icons can be quickly generated for history/bookmark result sets. If you change the database layout at all, you will have to update both services. 25558
nsFaviconService.h Obtains the service's object. 3686
nsIFaviconService.idl The limit in bytes of the size of favicons in memory and passed via the favicon protocol. 10500
nsINavBookmarksService.idl The BookmarksService interface provides methods for managing bookmarked history items. Bookmarks consist of a set of user-customizable folders. A URI in history can be contained in one or more such folders. 8935
nsINavHistoryService.idl Using Places services after quit-application is not reliable, so make sure to do any shutdown work on quit-application, or history synchronization could fail, losing latest changes. 40022
nsIPlacesPreviewsHelperService.idl A service which returns information about file paths where the previews for URLs are stored. These previews are used by the moz-page-thumb protocol 649
nsITaggingService.idl Tags a URL with the given set of tags. Current tags set for the URL persist. Tags in aTags which are already set for the given URL are ignored. @param aURI the URL to tag. @param aTags Array of tags to set for the given URL. Each element within the array can be either a tag name (non-empty string) or a concrete itemId of a tag container. @param [optional] aSource A change source constant from nsINavBookmarksService::SOURCE_*. Defaults to SOURCE_DEFAULT if omitted. 2054
nsNavBookmarks.cpp 63067
nsNavBookmarks.h Obtains the service's object. 10469
nsNavHistory.cpp 102651
nsNavHistory.h Obtains the nsNavHistory object. 16550
nsNavHistoryQuery.cpp This file contains the definitions of nsNavHistoryQuery, nsNavHistoryQueryOptions, and those functions in nsINavHistory that directly support queries (specifically QueryStringToQuery and QueryToQueryString). 37591
nsNavHistoryQuery.h The definitions of nsNavHistoryQuery and nsNavHistoryQueryOptions. This header file should only be included from nsNavHistory.h, include that if you want these classes. 4861
nsNavHistoryResult.cpp Returns conditions for query update. QUERYUPDATE_TIME: This query is only limited by an inclusive time range on the first query object. The caller can quickly evaluate the time itself if it chooses. This is even simpler than "simple" below. QUERYUPDATE_SIMPLE: This query is evaluatable using evaluateQueryForNode to do live updating. QUERYUPDATE_COMPLEX: This query is not evaluatable using evaluateQueryForNode. When something happens that this query updates, you will need to re-run the query. QUERYUPDATE_COMPLEX_WITH_BOOKMARKS: A complex query that additionally has dependence on bookmarks. All bookmark-dependent queries fall under this category. QUERYUPDATE_MOBILEPREF: A complex query but only updates when the mobile preference changes. QUERYUPDATE_NONE: A query that never updates, e.g. the left-pane root query. aHasSearchTerms will be set to true if the query has any dependence on keywords. When there is no dependence on keywords, we can handle title change operations as simple instead of complex. 156174
nsNavHistoryResult.h The definitions of objects that make up a history query result set. This file should only be included by nsNavHistory.h, include that if you want these classes. 36035
nsPlacesIndexes.h moz_places 3983
nsPlacesMacros.h Null out ret before _sInstance so the destructor doesn't assert 1616
nsPlacesTables.h 16908
nsPlacesTriggers.h These visit types are excluded from visit_count: 0 - invalid 4 - EMBED 7 - DOWNLOAD 8 - FRAMED_LINK 9 - RELOAD 22571
PageIconProtocolHandler.cpp 14402
PageIconProtocolHandler.h To be called in the parent process to obtain an input stream for the given icon. @param aChildURI a page-icon URI sent from the child. @param aLoadInfo the nsILoadInfo for the load attempt from the child. @param aTerminateSender out param set to true when the params are invalid and indicate the child should be terminated. If |aChildURI| is not a page-icon URI, the child is in an invalid state and should be terminated. This outparam will be set synchronously. @return RemoteStreamPromise The RemoteStreamPromise will resolve with an RemoteStreamInfo on success, and reject with an nsresult on failure. 3523
PlaceInfo.cpp 3464
PlaceInfo.h 1271
PlacesBackups.sys.mjs Appends meta-data information to a given filename. 16640
PlacesDBUtils.sys.mjs Executes integrity check and common maintenance tasks. @return a Map[taskName(String) -> Object]. The Object has the following properties: - succeeded: boolean - logs: an array of strings containing the messages logged by the task. 50374
PlacesExpiration.sys.mjs This component handles history and orphans expiration. Expiration runs: - At idle, but just once, we stop any other kind of expiration during idle to preserve batteries in portable devices. - At shutdown, only if the database is dirty, we should still avoid to expire too heavily on shutdown. - On a repeating timer we expire in small chunks. Expiration algorithm will adapt itself based on: - Memory size of the device. - Status of the database (clean or dirty). 33035
PlacesFrecencyRecalculator.sys.mjs This component handles frecency recalculations and decay on idle. 23601
PlacesPreviews.sys.mjs This extends Set to only keep the latest 100 entries. 13637
PlacesQuery.sys.mjs -*- indent-tabs-mode: nil; js-indent-level: 2 -*- 14194
PlacesSyncUtils.sys.mjs This module exports functions for Sync to use when applying remote records. The calls are similar to those in `Bookmarks.sys.mjs` and `nsINavBookmarksService`, with special handling for tags, keywords, synced annotations, and missing parents. 70958
PlacesTransactions.sys.mjs 55998
PlacesUtils.sys.mjs -*- indent-tabs-mode: nil; js-indent-level: 2 -*- 96552
Shutdown.cpp 6887
Shutdown.h This is most of the code responsible for Places shutdown. PHASE 1 (Legacy clients shutdown) The shutdown procedure begins when the Database singleton receives profile-change-teardown (note that tests will instead notify nsNavHistory, that forwards the notification to the Database instance). Database::Observe first of all checks if initialization was completed properly, to avoid race conditions, then it notifies "places-shutdown" to legacy clients. Legacy clients are supposed to start and complete any shutdown critical work in the same tick, since we won't wait for them. PHASE 2 (Modern clients shutdown) Modern clients should instead register as a blocker by passing a promise to nsINavHistoryService::shutdownClient (for example see Sanitizer.sys.mjs), so they block Places shutdown until the promise is resolved. When profile-change-teardown is observed by async shutdown, it calls ClientsShutdownBlocker::BlockShutdown. This class is registered as a teardown phase blocker in Database::Init (see Database::mClientsShutdown). ClientsShutdownBlocker::BlockShudown waits for all the clients registered through nsINavHistoryService::shutdownClient. When all the clients are done, its `Done` method is invoked, and it stops blocking the shutdown phase, so that it can continue. PHASE 3 (Connection shutdown) ConnectionBlocker is registered as a profile-before-change blocker in Database::Init (see Database::mConnectionShutdown). When profile-before-change is observer by async shutdown, it calls ConnectionShutdownBlocker::BlockShutdown. Then the control is passed to Database::Shutdown, that executes some sanity checks, clears cached statements and proceeds with asyncClose. Once the connection is definitely closed, Database will call back ConnectionBlocker::Complete. At this point a final places-connection-closed notification is sent, for testing purposes. 5764
SQLFunctions.cpp Scan forward through UTF-8 text until the next potential character that could match a given codepoint when lower-cased (false positives are okay). This avoids having to actually parse the UTF-8 text, which is slow. @param aStart An iterator pointing to the first character position considered. It will be updated by this function. @param aEnd An interator pointing to past-the-end of the string. 53300
SQLFunctions.h This file contains functions that Places adds to the database handle that can be accessed by SQL queries. Keep the GUID-related parts of this file in sync with toolkit/downloads/SQLFunctions.[h|cpp]! 19755
SyncedBookmarksMirror.h 865
SyncedBookmarksMirror.sys.mjs This file implements a mirror and two-way merger for synced bookmarks. The mirror matches the complete tree stored on the Sync server, and stages new bookmarks changed on the server since the last sync. The merger walks the local tree in Places and the mirrored remote tree, produces a new merged tree, then updates the local tree to reflect the merged tree. Let's start with an overview of the different classes, and how they fit together. - `SyncedBookmarksMirror` sets up the database, validates and upserts new incoming records, attaches to Places, and applies the changed records. During application, we fetch the local and remote bookmark trees, merge them, and update Places to match. Merging and application happen in a single transaction, so applying the merged tree won't collide with local changes. A failure at this point aborts the merge and leaves Places unchanged. - A `BookmarkTree` is a fully rooted tree that also notes deletions. A `BookmarkNode` represents a local item in Places, or a remote item in the mirror. - A `MergedBookmarkNode` holds a local node, a remote node, and a `MergeState` that indicates which node to prefer when updating Places and the server to match the merged tree. - `BookmarkObserverRecorder` records all changes made to Places during the merge, then dispatches `PlacesObservers` notifications. Places uses these notifications to update the UI and internal caches. We can't dispatch during the merge because observers won't see the changes until the merge transaction commits and the database is consistent again. - After application, we flag all applied incoming items as merged, create Sync records for the locally new and updated items in Places, and upload the records to the server. At this point, all outgoing items are flagged as changed in Places, so the next sync can resume cleanly if the upload is interrupted or fails. - Once upload succeeds, we update the mirror with the uploaded records, so that the mirror matches the server again. An interruption or error here will leave the uploaded items flagged as changed in Places, so we'll merge them again on the next sync. This is redundant work, but shouldn't cause issues. 90804
TaggingService.sys.mjs The Places Tagging Service 17412
tests
VisitInfo.cpp 1461
VisitInfo.h 882