Bug 1551779 part 4. Stop using [array] for getItemAnnotationNames. r=mak

The old code used variants with SetAsAUTF8String, which would get converted to
a string when going into JS.  We can just use Array<AUTF8String> directly
instead.  C++ callers would need to change, but there aren't any.

Differential Revision: https://phabricator.services.mozilla.com/D31241

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Boris Zbarsky 2019-05-16 14:54:15 +00:00
Родитель 91cc06de23
Коммит 4d910a1e6c
3 изменённых файлов: 9 добавлений и 48 удалений

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

@ -339,9 +339,12 @@ nsAnnotationService::GetItemAnnotationInfo(int64_t aItemId,
return GetValueFromStatement(statement, _value);
}
nsresult nsAnnotationService::GetItemAnnotationNamesTArray(
int64_t aItemId, nsTArray<nsCString>* _result) {
_result->Clear();
NS_IMETHODIMP
nsAnnotationService::GetItemAnnotationNames(int64_t aItemId,
nsTArray<nsCString>& _result) {
NS_ENSURE_ARG_MIN(aItemId, 1);
_result.Clear();
nsCOMPtr<mozIStorageStatement> statement;
statement = mDB->GetStatement(
@ -361,44 +364,10 @@ nsresult nsAnnotationService::GetItemAnnotationNamesTArray(
nsAutoCString name;
rv = statement->GetUTF8String(0, name);
NS_ENSURE_SUCCESS(rv, rv);
if (!_result->AppendElement(name)) return NS_ERROR_OUT_OF_MEMORY;
}
return NS_OK;
}
NS_IMETHODIMP
nsAnnotationService::GetItemAnnotationNames(int64_t aItemId, uint32_t* _count,
nsIVariant*** _result) {
NS_ENSURE_ARG_MIN(aItemId, 1);
NS_ENSURE_ARG_POINTER(_count);
NS_ENSURE_ARG_POINTER(_result);
*_count = 0;
*_result = nullptr;
nsTArray<nsCString> names;
nsresult rv = GetItemAnnotationNamesTArray(aItemId, &names);
NS_ENSURE_SUCCESS(rv, rv);
if (names.Length() == 0) return NS_OK;
*_result = static_cast<nsIVariant**>(
moz_xmalloc(sizeof(nsIVariant*) * names.Length()));
for (uint32_t i = 0; i < names.Length(); i++) {
nsCOMPtr<nsIWritableVariant> var = new nsVariant();
if (!var) {
// need to release all the variants we've already created
for (uint32_t j = 0; j < i; j++) NS_RELEASE((*_result)[j]);
free(*_result);
*_result = nullptr;
if (!_result.AppendElement(name, fallible)) {
return NS_ERROR_OUT_OF_MEMORY;
}
var->SetAsAUTF8String(names[i]);
NS_ADDREF((*_result)[i] = var);
}
*_count = names.Length();
return NS_OK;
}

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

@ -106,8 +106,6 @@ class nsAnnotationService final : public nsIAnnotationService,
nsIVariant** _retval);
public:
nsresult GetItemAnnotationNamesTArray(int64_t aItemId,
nsTArray<nsCString>* _result);
nsresult RemoveItemAnnotations(int64_t aItemId);
};

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

@ -103,15 +103,9 @@ interface nsIAnnotationService : nsISupports
out unsigned short aType);
/**
* Get the names of all annotations for this URI.
*
* example JS:
* var annotations = annotator.getPageAnnotations(myURI, {});
* Get the names of all annotations for this item id.
*/
void getItemAnnotationNames(
in long long aItemId,
[optional] out unsigned long count,
[retval, array, size_is(count)] out nsIVariant result);
Array<AUTF8String> getItemAnnotationNames(in long long aItemId);
/**
* Test for annotation existence.