123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #include "mozilla/dom/FontFaceSetIterator.h"
- namespace mozilla {
- namespace dom {
- NS_IMPL_CYCLE_COLLECTION(FontFaceSetIterator, mFontFaceSet)
- NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(FontFaceSetIterator, AddRef)
- NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(FontFaceSetIterator, Release)
- FontFaceSetIterator::FontFaceSetIterator(FontFaceSet* aFontFaceSet,
- bool aIsKeyAndValue)
- : mFontFaceSet(aFontFaceSet)
- , mNextIndex(0)
- , mIsKeyAndValue(aIsKeyAndValue)
- {
- MOZ_COUNT_CTOR(FontFaceSetIterator);
- }
- FontFaceSetIterator::~FontFaceSetIterator()
- {
- MOZ_COUNT_DTOR(FontFaceSetIterator);
- }
- bool
- FontFaceSetIterator::WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto,
- JS::MutableHandle<JSObject*> aReflector)
- {
- return FontFaceSetIteratorBinding::Wrap(aCx, this, aGivenProto, aReflector);
- }
- void
- FontFaceSetIterator::Next(JSContext* aCx, FontFaceSetIteratorResult& aResult,
- ErrorResult& aRv)
- {
- if (!mFontFaceSet) {
- aResult.mDone = true;
- return;
- }
- FontFace* face = mFontFaceSet->GetFontFaceAt(mNextIndex++);
- if (!face) {
- aResult.mValue.setUndefined();
- aResult.mDone = true;
- mFontFaceSet = nullptr;
- return;
- }
- JS::Rooted<JS::Value> value(aCx);
- if (!ToJSValue(aCx, face, &value)) {
- aRv.Throw(NS_ERROR_FAILURE);
- return;
- }
- if (mIsKeyAndValue) {
- JS::AutoValueArray<2> values(aCx);
- values[0].set(value);
- values[1].set(value);
- JS::Rooted<JSObject*> array(aCx);
- array = JS_NewArrayObject(aCx, values);
- if (array) {
- aResult.mValue.setObject(*array);
- }
- } else {
- aResult.mValue = value;
- }
- aResult.mDone = false;
- }
- } // namespace dom
- } // namespace mozilla
|