diff --git a/mozilla/suite/browser/public/nsIBookmarksService.idl b/mozilla/suite/browser/public/nsIBookmarksService.idl index e3582f01d88..b1e1b0db64a 100644 --- a/mozilla/suite/browser/public/nsIBookmarksService.idl +++ b/mozilla/suite/browser/public/nsIBookmarksService.idl @@ -80,6 +80,15 @@ interface nsIBookmarksService : nsISupports wstring getLastCharset(in string aURI); void importSystemBookmarks(in nsIRDFResource aParentFolder); + + /** + * Get the time when a bookmark was added + * + * @param aBookmarkURL The url of the bookmark + * @param aAddTime The time when aBookmarkURL was added to the bookmarks. + * + */ + void getAddTime(in string aBookmarkURL, out long long aAddTime); }; %{C++ diff --git a/mozilla/suite/browser/src/nsBookmarksService.cpp b/mozilla/suite/browser/src/nsBookmarksService.cpp index e2b03e1e1ac..8b8750c8724 100644 --- a/mozilla/suite/browser/src/nsBookmarksService.cpp +++ b/mozilla/suite/browser/src/nsBookmarksService.cpp @@ -3030,6 +3030,37 @@ nsBookmarksService::RemoveBookmarkIcon(const char *aURL, const PRUnichar *iconUR } +NS_IMETHODIMP +nsBookmarksService::GetAddTime(const char *aBookmarkURL, PRInt64* aAddTime) +{ + nsCOMPtr bookmark; + nsresult rv; + + if (NS_SUCCEEDED(rv = gRDF->GetResource(aBookmarkURL, getter_AddRefs(bookmark) ))) + { + // Note: always use mInner!! Otherwise, could get into an infinite loop + // due to Assert/Change calling UpdateBookmarkLastModifiedDate() + + nsCOMPtr nodeType; + GetSynthesizedType(bookmark, getter_AddRefs(nodeType)); + if (nodeType == kNC_Bookmark) + { + nsCOMPtr node; + rv = mInner->GetTarget(bookmark, kNC_BookmarkAddDate, PR_TRUE, + getter_AddRefs(node)); + if (rv != NS_RDF_NO_VALUE) + { + nsCOMPtr addDate = do_QueryInterface(node); + if (addDate) + { + rv = addDate->GetValue(aAddTime); + } + } + } + } + return rv; +} + NS_IMETHODIMP nsBookmarksService::UpdateLastVisitedDate(const char *aURL, const PRUnichar *aCharset) {