summaryrefslogtreecommitdiffstats
path: root/application/basilisk/components/newtab/PlacesProvider.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'application/basilisk/components/newtab/PlacesProvider.jsm')
-rw-r--r--application/basilisk/components/newtab/PlacesProvider.jsm245
1 files changed, 0 insertions, 245 deletions
diff --git a/application/basilisk/components/newtab/PlacesProvider.jsm b/application/basilisk/components/newtab/PlacesProvider.jsm
deleted file mode 100644
index 1a0e99141..000000000
--- a/application/basilisk/components/newtab/PlacesProvider.jsm
+++ /dev/null
@@ -1,245 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* global XPCOMUtils, Services, PlacesUtils, EventEmitter */
-/* global gLinks */
-/* exported PlacesProvider */
-
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["PlacesProvider"];
-
-const {interfaces: Ci, utils: Cu} = Components;
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
- "resource://gre/modules/PlacesUtils.jsm");
-
-XPCOMUtils.defineLazyGetter(this, "EventEmitter", function() {
- const {EventEmitter} = Cu.import("resource://devtools/shared/event-emitter.js", {});
- return EventEmitter;
-});
-
-XPCOMUtils.defineLazyModuleGetter(this, "Task",
- "resource://gre/modules/Task.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils",
- "resource://gre/modules/NewTabUtils.jsm");
-
-// The maximum number of results PlacesProvider retrieves from history.
-const HISTORY_RESULTS_LIMIT = 100;
-
-/* Queries history to retrieve the most visited sites. Emits events when the
- * history changes.
- * Implements the EventEmitter interface.
- */
-let Links = function Links() {
- EventEmitter.decorate(this);
-};
-
-Links.prototype = {
- /**
- * Set this to change the maximum number of links the provider will provide.
- */
- get maxNumLinks() {
- // getter, so it can't be replaced dynamically
- return HISTORY_RESULTS_LIMIT;
- },
-
- /**
- * A set of functions called by @mozilla.org/browser/nav-historyservice
- * All history events are emitted from this object.
- */
- historyObserver: {
- _batchProcessingDepth: 0,
- _batchCalledFrecencyChanged: false,
-
- /**
- * Called by the history service.
- */
- onBeginUpdateBatch() {
- this._batchProcessingDepth += 1;
- },
-
- onEndUpdateBatch() {
- this._batchProcessingDepth -= 1;
- if (this._batchProcessingDepth == 0 && this._batchCalledFrecencyChanged) {
- this.onManyFrecenciesChanged();
- this._batchCalledFrecencyChanged = false;
- }
- },
-
- onDeleteURI: function historyObserver_onDeleteURI(aURI) {
- // let observers remove sensetive data associated with deleted visit
- gLinks.emit("deleteURI", {
- url: aURI.spec,
- });
- },
-
- onClearHistory: function historyObserver_onClearHistory() {
- gLinks.emit("clearHistory");
- },
-
- onFrecencyChanged: function historyObserver_onFrecencyChanged(aURI,
- aNewFrecency, aGUID, aHidden, aLastVisitDate) { // jshint ignore:line
-
- // If something is doing a batch update of history entries we don't want
- // to do lots of work for each record. So we just track the fact we need
- // to call onManyFrecenciesChanged() once the batch is complete.
- if (this._batchProcessingDepth > 0) {
- this._batchCalledFrecencyChanged = true;
- return;
- }
-
- // The implementation of the query in getLinks excludes hidden and
- // unvisited pages, so it's important to exclude them here, too.
- if (!aHidden && aLastVisitDate &&
- NewTabUtils.linkChecker.checkLoadURI(aURI.spec)) {
- gLinks.emit("linkChanged", {
- url: aURI.spec,
- frecency: aNewFrecency,
- lastVisitDate: aLastVisitDate,
- type: "history",
- });
- }
- },
-
- onManyFrecenciesChanged: function historyObserver_onManyFrecenciesChanged() {
- // Called when frecencies are invalidated and also when clearHistory is called
- // See toolkit/components/places/tests/unit/test_frecency_observers.js
- gLinks.emit("manyLinksChanged");
- },
-
- onVisit(aURI, aVisitId, aTime, aSessionId, aReferrerVisitId, aTransitionType,
- aGuid, aHidden, aVisitCount, aTyped, aLastKnownTitle) {
- // For new visits, if we're not batch processing, notify for a title update
- if (!this._batchProcessingDepth && aVisitCount == 1 && aLastKnownTitle) {
- this.onTitleChanged(aURI, aLastKnownTitle, aGuid);
- }
- },
-
- onTitleChanged: function historyObserver_onTitleChanged(aURI, aNewTitle) {
- if (NewTabUtils.linkChecker.checkLoadURI(aURI.spec)) {
- gLinks.emit("linkChanged", {
- url: aURI.spec,
- title: aNewTitle
- });
- }
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsINavHistoryObserver,
- Ci.nsISupportsWeakReference])
- },
-
- /**
- * Must be called before the provider is used.
- * Makes it easy to disable under pref
- */
- init: function PlacesProvider_init() {
- try {
- PlacesUtils.history.addObserver(this.historyObserver, true);
- } catch (e) {
- Cu.reportError(e);
- }
- },
-
- /**
- * Gets the current set of links delivered by this provider.
- *
- * @returns {Promise} Returns a promise with the array of links as payload.
- */
- getLinks: Task.async(function*() {
- // Select a single page per host with highest frecency, highest recency.
- // Choose N top such pages. Note +rev_host, to turn off optimizer per :mak
- // suggestion.
- let sqlQuery = `SELECT url, title, frecency,
- last_visit_date as lastVisitDate,
- "history" as type
- FROM moz_places
- WHERE frecency in (
- SELECT MAX(frecency) as frecency
- FROM moz_places
- WHERE hidden = 0 AND last_visit_date NOTNULL
- GROUP BY +rev_host
- ORDER BY frecency DESC
- LIMIT :limit
- )
- GROUP BY rev_host HAVING MAX(lastVisitDate)
- ORDER BY frecency DESC, lastVisitDate DESC, url`;
-
- let links = yield this.executePlacesQuery(sqlQuery, {
- columns: ["url", "title", "lastVisitDate", "frecency", "type"],
- params: {limit: this.maxNumLinks}
- });
-
- return links.filter(link => NewTabUtils.linkChecker.checkLoadURI(link.url));
- }),
-
- /**
- * Executes arbitrary query against places database
- *
- * @param {String} aSql
- * SQL query to execute
- * @param {Object} [optional] aOptions
- * aOptions.columns - an array of column names. if supplied the returned
- * items will consist of objects keyed on column names. Otherwise
- * an array of raw values is returned in the select order
- * aOptions.param - an object of SQL binding parameters
- * aOptions.callback - a callback to handle query rows
- *
- * @returns {Promise} Returns a promise with the array of retrieved items
- */
- executePlacesQuery: Task.async(function*(aSql, aOptions = {}) {
- let {columns, params, callback} = aOptions;
- let items = [];
- let queryError = null;
- let conn = yield PlacesUtils.promiseDBConnection();
- yield conn.executeCached(aSql, params, aRow => {
- try {
- // check if caller wants to handle query raws
- if (callback) {
- callback(aRow);
- } else {
- // otherwise fill in the item and add items array
- let item = null;
- // if columns array is given construct an object
- if (columns && Array.isArray(columns)) {
- item = {};
- columns.forEach(column => {
- item[column] = aRow.getResultByName(column);
- });
- } else {
- // if no columns - make an array of raw values
- item = [];
- for (let i = 0; i < aRow.numEntries; i++) {
- item.push(aRow.getResultByIndex(i));
- }
- }
- items.push(item);
- }
- } catch (e) {
- queryError = e;
- throw StopIteration;
- }
- });
- if (queryError) {
- throw new Error(queryError);
- }
- return items;
- }),
-};
-
-/**
- * Singleton that serves as the default link provider for the grid.
- */
-const gLinks = new Links(); // jshint ignore:line
-
-let PlacesProvider = {
- links: gLinks,
-};
-
-// Kept only for backwards-compatibility
-XPCOMUtils.defineLazyGetter(PlacesProvider, "LinkChecker",
- () => NewTabUtils.linkChecker);
-