зеркало из https://github.com/mozilla/gecko-dev.git
Defer initialization of navigator.offlineResources. b=383421, r+sr=jst
This commit is contained in:
Родитель
39cef56602
Коммит
1b6631188a
|
@ -8499,14 +8499,8 @@ nsNavigator::GetOfflineResources(nsIDOMOfflineResourceList **aList)
|
||||||
nsresult rv = webNav->GetCurrentURI(getter_AddRefs(uri));
|
nsresult rv = webNav->GetCurrentURI(getter_AddRefs(uri));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
mOfflineResources = new nsDOMOfflineResourceList();
|
mOfflineResources = new nsDOMOfflineResourceList(uri);
|
||||||
if (!mOfflineResources) return NS_ERROR_OUT_OF_MEMORY;
|
if (!mOfflineResources) return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
rv = mOfflineResources->Init(uri);
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
mOfflineResources = nsnull;
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IF_ADDREF(*aList = mOfflineResources);
|
NS_IF_ADDREF(*aList = mOfflineResources);
|
||||||
|
|
|
@ -73,7 +73,9 @@ NS_INTERFACE_MAP_END
|
||||||
NS_IMPL_ADDREF(nsDOMOfflineResourceList)
|
NS_IMPL_ADDREF(nsDOMOfflineResourceList)
|
||||||
NS_IMPL_RELEASE(nsDOMOfflineResourceList)
|
NS_IMPL_RELEASE(nsDOMOfflineResourceList)
|
||||||
|
|
||||||
nsDOMOfflineResourceList::nsDOMOfflineResourceList()
|
nsDOMOfflineResourceList::nsDOMOfflineResourceList(nsIURI *aURI)
|
||||||
|
: mInitialized(PR_FALSE)
|
||||||
|
, mURI(aURI)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,11 +84,13 @@ nsDOMOfflineResourceList::~nsDOMOfflineResourceList()
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsDOMOfflineResourceList::Init(nsIURI *aURI)
|
nsDOMOfflineResourceList::Init()
|
||||||
{
|
{
|
||||||
mURI = aURI;
|
if (mInitialized) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIURI> innerURI = NS_GetInnermostURI(aURI);
|
nsCOMPtr<nsIURI> innerURI = NS_GetInnermostURI(mURI);
|
||||||
if (!innerURI)
|
if (!innerURI)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
@ -107,6 +111,8 @@ nsDOMOfflineResourceList::Init(nsIURI *aURI)
|
||||||
mCacheSession = do_QueryInterface(session, &rv);
|
mCacheSession = do_QueryInterface(session, &rv);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
mInitialized = PR_TRUE;
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +123,10 @@ nsDOMOfflineResourceList::Init(nsIURI *aURI)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::GetLength(PRUint32 *aLength)
|
nsDOMOfflineResourceList::GetLength(PRUint32 *aLength)
|
||||||
{
|
{
|
||||||
nsresult rv = CacheKeys();
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
rv = CacheKeys();
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
*aLength = gCachedKeysCount;
|
*aLength = gCachedKeysCount;
|
||||||
|
@ -127,9 +136,12 @@ nsDOMOfflineResourceList::GetLength(PRUint32 *aLength)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::Item(PRUint32 aIndex, nsAString& aURI)
|
nsDOMOfflineResourceList::Item(PRUint32 aIndex, nsAString& aURI)
|
||||||
{
|
{
|
||||||
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
SetDOMStringToNull(aURI);
|
SetDOMStringToNull(aURI);
|
||||||
|
|
||||||
nsresult rv = CacheKeys();
|
rv = CacheKeys();
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (aIndex >= gCachedKeysCount)
|
if (aIndex >= gCachedKeysCount)
|
||||||
|
@ -143,11 +155,14 @@ nsDOMOfflineResourceList::Item(PRUint32 aIndex, nsAString& aURI)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::Add(const nsAString& aURI)
|
nsDOMOfflineResourceList::Add(const nsAString& aURI)
|
||||||
{
|
{
|
||||||
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (aURI.Length() > MAX_URI_LENGTH) return NS_ERROR_DOM_BAD_URI;
|
if (aURI.Length() > MAX_URI_LENGTH) return NS_ERROR_DOM_BAD_URI;
|
||||||
|
|
||||||
// this will fail if the URI is not absolute
|
// this will fail if the URI is not absolute
|
||||||
nsCOMPtr<nsIURI> requestedURI;
|
nsCOMPtr<nsIURI> requestedURI;
|
||||||
nsresult rv = NS_NewURI(getter_AddRefs(requestedURI), aURI);
|
rv = NS_NewURI(getter_AddRefs(requestedURI), aURI);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
// only http/https urls will work offline
|
// only http/https urls will work offline
|
||||||
|
@ -191,8 +206,11 @@ nsDOMOfflineResourceList::Add(const nsAString& aURI)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::Remove(const nsAString& aURI)
|
nsDOMOfflineResourceList::Remove(const nsAString& aURI)
|
||||||
{
|
{
|
||||||
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
nsCAutoString key;
|
nsCAutoString key;
|
||||||
nsresult rv = GetCacheKey(aURI, key);
|
rv = GetCacheKey(aURI, key);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
ClearCachedKeys();
|
ClearCachedKeys();
|
||||||
|
@ -205,8 +223,11 @@ nsDOMOfflineResourceList::Remove(const nsAString& aURI)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::Has(const nsAString& aURI, PRBool *aExists)
|
nsDOMOfflineResourceList::Has(const nsAString& aURI, PRBool *aExists)
|
||||||
{
|
{
|
||||||
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
nsCAutoString key;
|
nsCAutoString key;
|
||||||
nsresult rv = GetCacheKey(aURI, key);
|
rv = GetCacheKey(aURI, key);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
return mCacheSession->KeyIsOwned(mHostPort, NS_LITERAL_CSTRING(""),
|
return mCacheSession->KeyIsOwned(mHostPort, NS_LITERAL_CSTRING(""),
|
||||||
|
@ -216,6 +237,9 @@ nsDOMOfflineResourceList::Has(const nsAString& aURI, PRBool *aExists)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::Clear()
|
nsDOMOfflineResourceList::Clear()
|
||||||
{
|
{
|
||||||
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
ClearCachedKeys();
|
ClearCachedKeys();
|
||||||
|
|
||||||
return mCacheSession->SetOwnedKeys(mHostPort,
|
return mCacheSession->SetOwnedKeys(mHostPort,
|
||||||
|
@ -226,7 +250,10 @@ nsDOMOfflineResourceList::Clear()
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMOfflineResourceList::Refresh()
|
nsDOMOfflineResourceList::Refresh()
|
||||||
{
|
{
|
||||||
nsresult rv = CacheKeys();
|
nsresult rv = Init();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
rv = CacheKeys();
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
// try to start fetching it now, but it's not fatal if it fails
|
// try to start fetching it now, but it's not fatal if it fails
|
||||||
|
|
|
@ -53,18 +53,19 @@ public:
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
NS_DECL_NSIDOMOFFLINERESOURCELIST
|
NS_DECL_NSIDOMOFFLINERESOURCELIST
|
||||||
|
|
||||||
nsDOMOfflineResourceList();
|
nsDOMOfflineResourceList(nsIURI* aURI);
|
||||||
virtual ~nsDOMOfflineResourceList();
|
virtual ~nsDOMOfflineResourceList();
|
||||||
|
|
||||||
nsresult Init(nsIURI *aURI);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
nsresult Init();
|
||||||
|
|
||||||
nsresult GetCacheKey(const nsAString &aURI, nsCString &aKey);
|
nsresult GetCacheKey(const nsAString &aURI, nsCString &aKey);
|
||||||
nsresult GetCacheKey(nsIURI *aURI, nsCString &aKey);
|
nsresult GetCacheKey(nsIURI *aURI, nsCString &aKey);
|
||||||
|
|
||||||
nsresult CacheKeys();
|
nsresult CacheKeys();
|
||||||
void ClearCachedKeys();
|
void ClearCachedKeys();
|
||||||
|
|
||||||
|
PRBool mInitialized;
|
||||||
nsCOMPtr<nsIURI> mURI;
|
nsCOMPtr<nsIURI> mURI;
|
||||||
nsCOMPtr<nsIOfflineCacheSession> mCacheSession;
|
nsCOMPtr<nsIOfflineCacheSession> mCacheSession;
|
||||||
nsCAutoString mHostPort;
|
nsCAutoString mHostPort;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче