mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-01 13:57:32 +00:00

Behind a pref to ensure that we can turn this off pretty easily if it has perf impact. I want to leave the repainting stuff to another bug to land separately, to track potential (though I hope not!) perf regressions more easily. Differential Revision: https://phabricator.services.mozilla.com/D50704 --HG-- extra : moz-landing-system : lando
66 lines
2.0 KiB
C++
66 lines
2.0 KiB
C++
/* 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/. */
|
|
|
|
#ifndef mozilla_BaseHistory_h
|
|
#define mozilla_BaseHistory_h
|
|
|
|
#include "IHistory.h"
|
|
#include "mozilla/Result.h"
|
|
|
|
/* A base class for history implementations that implement link coloring. */
|
|
|
|
namespace mozilla {
|
|
|
|
class BaseHistory : public IHistory {
|
|
public:
|
|
nsresult RegisterVisitedCallback(nsIURI*, dom::Link*) final;
|
|
void UnregisterVisitedCallback(nsIURI*, dom::Link*) final;
|
|
void NotifyVisited(nsIURI*, VisitedStatus) final;
|
|
|
|
protected:
|
|
static constexpr const size_t kTrackedUrisInitialSize = 64;
|
|
|
|
BaseHistory() : mTrackedURIs(kTrackedUrisInitialSize) {}
|
|
|
|
// Starts a visited query, that eventually could call NotifyVisited if
|
|
// appropriate.
|
|
virtual Result<Ok, nsresult> StartVisitedQuery(nsIURI*) = 0;
|
|
|
|
// Cancels a visited query, if it is at all possible, because we know we won't
|
|
// use the results anymore.
|
|
virtual void CancelVisitedQueryIfPossible(nsIURI*) = 0;
|
|
|
|
using ObserverArray = nsTObserverArray<dom::Link*>;
|
|
struct ObservingLinks {
|
|
ObserverArray mLinks;
|
|
VisitedStatus mStatus = VisitedStatus::Unknown;
|
|
|
|
size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const {
|
|
return mLinks.ShallowSizeOfExcludingThis(aMallocSizeOf);
|
|
}
|
|
};
|
|
|
|
private:
|
|
/**
|
|
* Mark all links for the given URI in the given document as visited. Used
|
|
* within NotifyVisited.
|
|
*/
|
|
void NotifyVisitedForDocument(nsIURI*, dom::Document*, VisitedStatus);
|
|
|
|
/**
|
|
* Dispatch a runnable for the document passed in which will call
|
|
* NotifyVisitedForDocument with the correct URI and Document.
|
|
*/
|
|
void DispatchNotifyVisited(nsIURI*, dom::Document*, VisitedStatus);
|
|
|
|
protected:
|
|
// A map from URI to links that depend on that URI, and whether that URI is
|
|
// known-to-be-visited-or-unvisited already.
|
|
nsDataHashtable<nsURIHashKey, ObservingLinks> mTrackedURIs;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif
|