NS_IMETHODIMP nsUrlClassifierDBServiceWorker::CacheCompletions(CacheResultArray *results) { LOG(("nsUrlClassifierDBServiceWorker::CacheCompletions [%p]", this)); if (!mClassifier) return NS_OK; // Ownership is transferred in to us nsAutoPtr<CacheResultArray> resultsPtr(results); nsAutoPtr<ProtocolParser> pParse(new ProtocolParser(mHashKey)); nsTArray<TableUpdate*> updates; // Only cache results for tables that we have, don't take // in tables we might accidentally have hit during a completion. // This happens due to goog vs googpub lists existing. nsTArray<nsCString> tables; nsresult rv = mClassifier->ActiveTables(tables); NS_ENSURE_SUCCESS(rv, rv); for (PRUint32 i = 0; i < resultsPtr->Length(); i++) { bool activeTable = false; for (PRUint32 table = 0; table < tables.Length(); table++) { if (tables[table].Equals(resultsPtr->ElementAt(i).table)) { activeTable = true; } } if (activeTable) { TableUpdate * tu = pParse->GetTableUpdate(resultsPtr->ElementAt(i).table); LOG(("CacheCompletion Addchunk %d hash %X", resultsPtr->ElementAt(i).entry.addChunk, resultsPtr->ElementAt(i).entry.hash.prefix)); tu->NewAddComplete(resultsPtr->ElementAt(i).entry.addChunk, resultsPtr->ElementAt(i).entry.hash.complete); tu->NewAddChunk(resultsPtr->ElementAt(i).entry.addChunk); tu->SetLocalUpdate(); updates.AppendElement(tu); pParse->ForgetTableUpdates(); } else { LOG(("Completion received, but table is not active, so not caching.")); } } mClassifier->ApplyUpdates(&updates); return NS_OK; }
nsresult nsUrlClassifierDBServiceWorker::ApplyUpdate() { LOG(("nsUrlClassifierDBServiceWorker::ApplyUpdate()")); return mClassifier->ApplyUpdates(&mTableUpdates); }