mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 949913 - Don't store page refreshes as history visits r=blassey
This commit is contained in:
parent
0a92125bb3
commit
8ff13c3208
@ -7,6 +7,10 @@
|
||||
#include "AndroidBridge.h"
|
||||
#include "Link.h"
|
||||
#include "nsIURI.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "nsIObserverService.h"
|
||||
|
||||
#define NS_LINK_VISITED_EVENT_TOPIC "link-visited"
|
||||
|
||||
using namespace mozilla;
|
||||
using mozilla::dom::Link;
|
||||
@ -78,6 +82,29 @@ nsAndroidHistory::UnregisterVisitedCallback(nsIURI *aURI, Link *aContent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsAndroidHistory::AppendToRecentlyVisitedURIs(nsIURI* aURI) {
|
||||
if (mRecentlyVisitedURIs.Length() < RECENTLY_VISITED_URI_SIZE) {
|
||||
// Append a new element while the array is not full.
|
||||
mRecentlyVisitedURIs.AppendElement(aURI);
|
||||
} else {
|
||||
// Otherwise, replace the oldest member.
|
||||
mRecentlyVisitedURIsNextIndex %= RECENTLY_VISITED_URI_SIZE;
|
||||
mRecentlyVisitedURIs.ElementAt(mRecentlyVisitedURIsNextIndex) = aURI;
|
||||
mRecentlyVisitedURIsNextIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
inline bool
|
||||
nsAndroidHistory::IsRecentlyVisitedURI(nsIURI* aURI) {
|
||||
bool equals = false;
|
||||
RecentlyVisitedArray::index_type i;
|
||||
for (i = 0; i < mRecentlyVisitedURIs.Length() && !equals; ++i) {
|
||||
aURI->Equals(mRecentlyVisitedURIs.ElementAt(i), &equals);
|
||||
}
|
||||
return equals;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAndroidHistory::VisitURI(nsIURI *aURI, nsIURI *aLastVisitedURI, uint32_t aFlags)
|
||||
{
|
||||
@ -92,6 +119,16 @@ nsAndroidHistory::VisitURI(nsIURI *aURI, nsIURI *aLastVisitedURI, uint32_t aFlag
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (aLastVisitedURI) {
|
||||
bool same;
|
||||
rv = aURI->Equals(aLastVisitedURI, &same);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (same && IsRecentlyVisitedURI(aURI)) {
|
||||
// Do not save refresh visits if we have visited this URI recently.
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(aFlags & VisitFlags::TOP_LEVEL))
|
||||
return NS_OK;
|
||||
|
||||
@ -106,6 +143,16 @@ nsAndroidHistory::VisitURI(nsIURI *aURI, nsIURI *aLastVisitedURI, uint32_t aFlag
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
NS_ConvertUTF8toUTF16 uriString(uri);
|
||||
GeckoAppShell::MarkURIVisited(uriString);
|
||||
|
||||
AppendToRecentlyVisitedURIs(aURI);
|
||||
|
||||
// Finally, notify that we've been visited.
|
||||
nsCOMPtr<nsIObserverService> obsService =
|
||||
mozilla::services::GetObserverService();
|
||||
if (obsService) {
|
||||
obsService->NotifyObservers(aURI, NS_LINK_VISITED_EVENT_TOPIC, nullptr);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,9 @@
|
||||
#define NS_ANDROIDHISTORY_CID \
|
||||
{0xCCAA4880, 0x44DD, 0x40A7, {0xA1, 0x3F, 0x61, 0x56, 0xFC, 0x88, 0x2C, 0x0B}}
|
||||
|
||||
// Max size of History::mRecentlyVisitedURIs
|
||||
#define RECENTLY_VISITED_URI_SIZE 8
|
||||
|
||||
class nsAndroidHistory : public mozilla::IHistory, public nsIRunnable
|
||||
{
|
||||
public:
|
||||
@ -36,6 +39,18 @@ private:
|
||||
nsTPriorityQueue<nsString> mPendingURIs;
|
||||
|
||||
nsresult CanAddURI(nsIURI* aURI, bool* canAdd);
|
||||
|
||||
/**
|
||||
* mRecentlyVisitedURIs remembers URIs which are recently added to the DB,
|
||||
* to avoid saving these locations repeatedly in a short period.
|
||||
*/
|
||||
typedef nsAutoTArray<nsCOMPtr<nsIURI>, RECENTLY_VISITED_URI_SIZE>
|
||||
RecentlyVisitedArray;
|
||||
RecentlyVisitedArray mRecentlyVisitedURIs;
|
||||
RecentlyVisitedArray::index_type mRecentlyVisitedURIsNextIndex;
|
||||
|
||||
void AppendToRecentlyVisitedURIs(nsIURI* aURI);
|
||||
bool IsRecentlyVisitedURI(nsIURI* aURI);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user