NS_IMETHODIMP IDBDatabase::GetObjectStoreNames(nsIDOMDOMStringList** aObjectStores) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); DatabaseInfo* info = Info(); nsAutoTArray<nsString, 10> objectStoreNames; if (!info->GetObjectStoreNames(objectStoreNames)) { NS_WARNING("Couldn't get names!"); return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR; } nsRefPtr<nsDOMStringList> list(new nsDOMStringList()); PRUint32 count = objectStoreNames.Length(); for (PRUint32 index = 0; index < count; index++) { NS_ENSURE_TRUE(list->Add(objectStoreNames[index]), NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); } list.forget(aObjectStores); return NS_OK; }
NS_IMETHODIMP IDBTransaction::GetObjectStoreNames(nsIDOMDOMStringList** aObjectStores) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); nsRefPtr<nsDOMStringList> list(new nsDOMStringList()); nsTArray<nsString> stackArray; nsTArray<nsString>* arrayOfNames; if (mMode == IDBTransaction::FULL_LOCK) { DatabaseInfo* info; if (!DatabaseInfo::Get(mDatabase->Id(), &info)) { NS_ERROR("This should never fail!"); return NS_ERROR_UNEXPECTED; } if (!info->GetObjectStoreNames(stackArray)) { NS_ERROR("Out of memory!"); return NS_ERROR_OUT_OF_MEMORY; } arrayOfNames = &stackArray; } else { arrayOfNames = &mObjectStoreNames; } PRUint32 count = arrayOfNames->Length(); for (PRUint32 index = 0; index < count; index++) { NS_ENSURE_TRUE(list->Add(arrayOfNames->ElementAt(index)), NS_ERROR_OUT_OF_MEMORY); } list.forget(aObjectStores); return NS_OK; }