зеркало из https://github.com/mozilla/pjs.git
Bug 606966 - Need an async history visit API exposed to JS
Part 17 - Create mozIPlaceInfo and mozIVisitInfo objects, and use them to notify the callback. r=mak r=lw a=blocking
This commit is contained in:
Родитель
1b41f678d7
Коммит
b2d2e094dc
|
@ -47,6 +47,8 @@
|
|||
#include "nsNavHistory.h"
|
||||
#include "nsNavBookmarks.h"
|
||||
#include "Helpers.h"
|
||||
#include "PlaceInfo.h"
|
||||
#include "VisitInfo.h"
|
||||
|
||||
#include "mozilla/storage.h"
|
||||
#include "mozilla/dom/Link.h"
|
||||
|
@ -348,8 +350,26 @@ public:
|
|||
NS_PRECONDITION(NS_IsMainThread(),
|
||||
"This should be called on the main thread");
|
||||
|
||||
// TODO build a mozIPlaceInfo object for the visit.
|
||||
(void)mCallback->OnComplete(mResult, nsnull);
|
||||
nsCOMPtr<nsIURI> referrerURI;
|
||||
if (!mPlace.referrerSpec.IsEmpty()) {
|
||||
(void)NS_NewURI(getter_AddRefs(referrerURI), mPlace.referrerSpec);
|
||||
}
|
||||
|
||||
nsCOMPtr<mozIVisitInfo> visit =
|
||||
new VisitInfo(mPlace.visitId, mPlace.visitTime, mPlace.transitionType,
|
||||
referrerURI.forget(), mPlace.sessionId);
|
||||
PlaceInfo::VisitsArray visits;
|
||||
(void)visits.AppendElement(visit);
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
(void)NS_NewURI(getter_AddRefs(uri), mPlace.spec);
|
||||
|
||||
// We do not notify about the frecency of the place.
|
||||
nsCOMPtr<mozIPlaceInfo> place =
|
||||
new PlaceInfo(mPlace.placeId, mPlace.guid, uri.forget(), mPlace.title,
|
||||
-1, visits);
|
||||
|
||||
(void)mCallback->OnComplete(mResult, place);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,8 @@ CPPSRCS = \
|
|||
History.cpp \
|
||||
nsPlacesImportExportService.cpp \
|
||||
AsyncFaviconHelpers.cpp \
|
||||
PlaceInfo.cpp \
|
||||
VisitInfo.cpp \
|
||||
$(NULL)
|
||||
|
||||
EXTRA_DSO_LDOPTS += \
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is PlaceInfo object.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* the Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Shawn Wilsher <me@shawnwilsher.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "PlaceInfo.h"
|
||||
#include "VisitInfo.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsContentUtils.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace places {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// PlaceInfo
|
||||
|
||||
PlaceInfo::PlaceInfo(PRInt64 aId,
|
||||
const nsCString& aGUID,
|
||||
already_AddRefed<nsIURI> aURI,
|
||||
const nsString& aTitle,
|
||||
PRInt64 aFrecency,
|
||||
const VisitsArray& aVisits)
|
||||
: mId(aId)
|
||||
, mGUID(aGUID)
|
||||
, mURI(aURI)
|
||||
, mTitle(aTitle)
|
||||
, mFrecency(aFrecency)
|
||||
, mVisits(aVisits)
|
||||
{
|
||||
NS_PRECONDITION(mURI, "Must provide a non-null uri!");
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// mozIPlaceInfo
|
||||
|
||||
NS_IMETHODIMP
|
||||
PlaceInfo::GetPlaceId(PRInt64* _placeId)
|
||||
{
|
||||
*_placeId = mId;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PlaceInfo::GetGuid(nsACString& _guid)
|
||||
{
|
||||
_guid = mGUID;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PlaceInfo::GetUri(nsIURI** _uri)
|
||||
{
|
||||
NS_ADDREF(*_uri = mURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PlaceInfo::GetTitle(nsAString& _title)
|
||||
{
|
||||
_title = mTitle;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PlaceInfo::GetFrecency(PRInt64* _frecency)
|
||||
{
|
||||
*_frecency = mFrecency;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PlaceInfo::GetVisits(JSContext* aContext,
|
||||
jsval* _visits)
|
||||
{
|
||||
// TODO bug 625913 when we use this in situations that have more than one
|
||||
// visit here, we will likely want to make this cache the value.
|
||||
JSObject* visits = JS_NewArrayObject(aContext, 0, NULL);
|
||||
NS_ENSURE_TRUE(visits, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
JSObject* global = JS_GetGlobalForScopeChain(aContext);
|
||||
NS_ENSURE_TRUE(global, NS_ERROR_UNEXPECTED);
|
||||
|
||||
for (VisitsArray::size_type idx = 0; idx < mVisits.Length(); idx++) {
|
||||
jsval wrappedVisit;
|
||||
nsresult rv = nsContentUtils::WrapNative(aContext, global, mVisits[idx],
|
||||
&NS_GET_IID(mozIVisitInfo),
|
||||
&wrappedVisit);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
JSBool rc = JS_SetElement(aContext, visits, idx, &wrappedVisit);
|
||||
NS_ENSURE_TRUE(rc, NS_ERROR_UNEXPECTED);
|
||||
}
|
||||
|
||||
*_visits = OBJECT_TO_JSVAL(visits);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// nsISupports
|
||||
|
||||
NS_IMPL_ISUPPORTS1(
|
||||
PlaceInfo
|
||||
, mozIPlaceInfo
|
||||
);
|
||||
|
||||
} // namespace places
|
||||
} // namespace mozilla
|
|
@ -0,0 +1,76 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is PlaceInfo object.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* the Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Shawn Wilsher <me@shawnwilsher.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef mozilla_places_PlaceInfo_h__
|
||||
#define mozilla_places_PlaceInfo_h__
|
||||
|
||||
#include "mozIAsyncHistory.h"
|
||||
#include "nsString.h"
|
||||
#include "nsAutoPtr.h"
|
||||
|
||||
class nsIURI;
|
||||
class mozIVisitInfo;
|
||||
|
||||
namespace mozilla {
|
||||
namespace places {
|
||||
|
||||
|
||||
class PlaceInfo : public mozIPlaceInfo
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_MOZIPLACEINFO
|
||||
|
||||
typedef nsTArray< nsCOMPtr<mozIVisitInfo> > VisitsArray;
|
||||
|
||||
PlaceInfo(PRInt64 aId, const nsCString& aGUID, already_AddRefed<nsIURI> aURI,
|
||||
const nsString& aTitle, PRInt64 aFrecency,
|
||||
const VisitsArray& aVisits);
|
||||
|
||||
private:
|
||||
const PRInt64 mId;
|
||||
const nsCString mGUID;
|
||||
nsCOMPtr<nsIURI> mURI;
|
||||
const nsString mTitle;
|
||||
const PRInt64 mFrecency;
|
||||
const VisitsArray mVisits;
|
||||
};
|
||||
|
||||
} // namespace places
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_places_PlaceInfo_h__
|
|
@ -0,0 +1,107 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is VisitInfo object.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* the Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Shawn Wilsher <me@shawnwilsher.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "VisitInfo.h"
|
||||
#include "nsIURI.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace places {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// VisitInfo
|
||||
|
||||
VisitInfo::VisitInfo(PRInt64 aVisitId,
|
||||
PRTime aVisitDate,
|
||||
PRUint32 aTransitionType,
|
||||
already_AddRefed<nsIURI> aReferrer,
|
||||
PRInt64 aSessionId)
|
||||
: mVisitId(aVisitId)
|
||||
, mVisitDate(aVisitDate)
|
||||
, mTransitionType(aTransitionType)
|
||||
, mReferrer(aReferrer)
|
||||
, mSessionId(aSessionId)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// mozIVisitInfo
|
||||
|
||||
NS_IMETHODIMP
|
||||
VisitInfo::GetVisitId(PRInt64* _visitId)
|
||||
{
|
||||
*_visitId = mVisitId;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
VisitInfo::GetVisitDate(PRTime* _visitDate)
|
||||
{
|
||||
*_visitDate = mVisitDate;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
VisitInfo::GetTransitionType(PRUint32* _transitionType)
|
||||
{
|
||||
*_transitionType = mTransitionType;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
VisitInfo::GetReferrerURI(nsIURI** _referrer)
|
||||
{
|
||||
NS_IF_ADDREF(*_referrer = mReferrer);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
VisitInfo::GetSessionId(PRInt64* _sessionId)
|
||||
{
|
||||
*_sessionId = mSessionId;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// nsISupports
|
||||
|
||||
NS_IMPL_ISUPPORTS1(
|
||||
VisitInfo
|
||||
, mozIVisitInfo
|
||||
);
|
||||
|
||||
} // namespace places
|
||||
} // namespace mozilla
|
|
@ -0,0 +1,69 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is VisitInfo object.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* the Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Shawn Wilsher <me@shawnwilsher.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef mozilla_places_VisitInfo_h__
|
||||
#define mozilla_places_VisitInfo_h__
|
||||
|
||||
#include "mozIAsyncHistory.h"
|
||||
#include "nsAutoPtr.h"
|
||||
|
||||
class nsIURI;
|
||||
|
||||
namespace mozilla {
|
||||
namespace places {
|
||||
|
||||
class VisitInfo : public mozIVisitInfo
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_MOZIVISITINFO
|
||||
|
||||
VisitInfo(PRInt64 aVisitId, PRTime aVisitDate, PRUint32 aTransitionType,
|
||||
already_AddRefed<nsIURI> aReferrer, PRInt64 aSessionId);
|
||||
|
||||
private:
|
||||
const PRInt64 mVisitId;
|
||||
const PRTime mVisitDate;
|
||||
const PRUint32 mTransitionType;
|
||||
nsCOMPtr<nsIURI> mReferrer;
|
||||
const PRInt64 mSessionId;
|
||||
};
|
||||
|
||||
} // namespace places
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_places_VisitInfo_h__
|
Загрузка…
Ссылка в новой задаче