Bug 667075 - Use nsIRandomGenerator instead of querying SQLite. r=dcamp

This commit is contained in:
Gian-Carlo Pascutto 2011-07-30 09:24:22 +02:00
Родитель ca25e86cbb
Коммит 4501f646c7
1 изменённых файлов: 10 добавлений и 29 удалений

Просмотреть файл

@ -62,6 +62,7 @@
#include "nsIProxyObjectManager.h" #include "nsIProxyObjectManager.h"
#include "nsToolkitCompsCID.h" #include "nsToolkitCompsCID.h"
#include "nsIUrlClassifierUtils.h" #include "nsIUrlClassifierUtils.h"
#include "nsIRandomGenerator.h"
#include "nsUrlClassifierDBService.h" #include "nsUrlClassifierDBService.h"
#include "nsUrlClassifierUtils.h" #include "nsUrlClassifierUtils.h"
#include "nsURILoader.h" #include "nsURILoader.h"
@ -480,10 +481,6 @@ public:
PRBool before, PRBool before,
nsTArray<nsUrlClassifierEntry> &entries); nsTArray<nsUrlClassifierEntry> &entries);
// Ask the db for a random number. This is temporary, and should be
// replaced with nsIRandomGenerator when 419739 is fixed.
nsresult RandomNumber(PRInt64 *randomNum);
protected: protected:
nsresult ReadEntries(mozIStorageStatement *statement, nsresult ReadEntries(mozIStorageStatement *statement,
nsTArray<nsUrlClassifierEntry>& entries); nsTArray<nsUrlClassifierEntry>& entries);
@ -501,8 +498,6 @@ protected:
nsCOMPtr<mozIStorageStatement> mPartialEntriesAfterStatement; nsCOMPtr<mozIStorageStatement> mPartialEntriesAfterStatement;
nsCOMPtr<mozIStorageStatement> mLastPartialEntriesStatement; nsCOMPtr<mozIStorageStatement> mLastPartialEntriesStatement;
nsCOMPtr<mozIStorageStatement> mPartialEntriesBeforeStatement; nsCOMPtr<mozIStorageStatement> mPartialEntriesBeforeStatement;
nsCOMPtr<mozIStorageStatement> mRandomStatement;
}; };
nsresult nsresult
@ -559,11 +554,6 @@ nsUrlClassifierStore::Init(nsUrlClassifierDBServiceWorker *worker,
getter_AddRefs(mPartialEntriesBeforeStatement)); getter_AddRefs(mPartialEntriesBeforeStatement));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
rv = mConnection->CreateStatement
(NS_LITERAL_CSTRING("SELECT abs(random())"),
getter_AddRefs(mRandomStatement));
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK; return NS_OK;
} }
@ -581,7 +571,6 @@ nsUrlClassifierStore::Close()
mPartialEntriesAfterStatement = nsnull; mPartialEntriesAfterStatement = nsnull;
mPartialEntriesBeforeStatement = nsnull; mPartialEntriesBeforeStatement = nsnull;
mLastPartialEntriesStatement = nsnull; mLastPartialEntriesStatement = nsnull;
mRandomStatement = nsnull;
mConnection = nsnull; mConnection = nsnull;
} }
@ -764,21 +753,6 @@ nsUrlClassifierStore::ReadNoiseEntries(PRInt64 rowID,
return ReadEntries(wraparoundStatement, entries); return ReadEntries(wraparoundStatement, entries);
} }
nsresult
nsUrlClassifierStore::RandomNumber(PRInt64 *randomNum)
{
mozStorageStatementScoper randScoper(mRandomStatement);
PRBool exists;
nsresult rv = mRandomStatement->ExecuteStep(&exists);
NS_ENSURE_SUCCESS(rv, rv);
if (!exists)
return NS_ERROR_NOT_AVAILABLE;
*randomNum = mRandomStatement->AsInt64(0);
return NS_OK;
}
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// nsUrlClassifierAddStore class implementation // nsUrlClassifierAddStore class implementation
@ -1752,9 +1726,16 @@ nsUrlClassifierDBServiceWorker::AddNoise(PRInt64 nearID,
return NS_OK; return NS_OK;
} }
PRInt64 randomNum; nsCOMPtr<nsIRandomGenerator> rg =
nsresult rv = mMainStore.RandomNumber(&randomNum); do_GetService("@mozilla.org/security/random-generator;1");
NS_ENSURE_STATE(rg);
PRInt32 randomNum;
PRUint8 *temp;
nsresult rv = rg->GenerateRandomBytes(sizeof(randomNum), &temp);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
memcpy(&randomNum, temp, sizeof(randomNum));
NS_Free(temp);
PRInt32 numBefore = randomNum % count; PRInt32 numBefore = randomNum % count;