Chromium Code Reviews| Index: Source/core/css/FontFaceSet.cpp | 
| diff --git a/Source/core/css/FontFaceSet.cpp b/Source/core/css/FontFaceSet.cpp | 
| index 7de6b7767b337a4fbd63a42f9d335aa1c360d6c2..7aef93e3f9bdc185fbb4e165e4bb77aaf5372d1d 100644 | 
| --- a/Source/core/css/FontFaceSet.cpp | 
| +++ b/Source/core/css/FontFaceSet.cpp | 
| @@ -387,6 +387,21 @@ void FontFaceSet::forEachInternal(PassOwnPtrWillBeRawPtr<FontFaceSetForEachCallb | 
| } | 
| } | 
| +Iterator* FontFaceSet::keys() | 
| +{ | 
| + return new FontFaceSetIterator(this, FontFaceSetIterator::Keys); | 
| +} | 
| + | 
| +Iterator* FontFaceSet::values() | 
| +{ | 
| + return new FontFaceSetIterator(this, FontFaceSetIterator::Values); | 
| +} | 
| + | 
| +Iterator* FontFaceSet::entries() | 
| +{ | 
| + return new FontFaceSetIterator(this, FontFaceSetIterator::Entries); | 
| +} | 
| + | 
| unsigned long FontFaceSet::size() const | 
| { | 
| if (!inActiveDocumentContext()) | 
| @@ -394,6 +409,27 @@ unsigned long FontFaceSet::size() const | 
| return cssConnectedFontFaceList().size() + m_nonCSSConnectedFaces.size(); | 
| } | 
| +FontFace* FontFaceSet::fontFaceAt(size_t index) const | 
| +{ | 
| + if (inActiveDocumentContext()) { | 
| + const WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >& cssConnectedFaces = cssConnectedFontFaceList(); | 
| + if (index < cssConnectedFaces.size()) { | 
| + WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >::const_iterator it = cssConnectedFaces.begin(); | 
| + for (size_t i = 0; i < index; i++) | 
| + ++it; | 
| + return it->get(); | 
| + } | 
| + index -= cssConnectedFaces.size(); | 
| + } | 
| + if (index < m_nonCSSConnectedFaces.size()) { | 
| + WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >::const_iterator it = m_nonCSSConnectedFaces.begin(); | 
| + for (size_t i = 0; i < index; i++) | 
| + ++it; | 
| + return it->get(); | 
| + } | 
| + return 0; | 
| +} | 
| + | 
| void FontFaceSet::fireDoneEventIfPossible() | 
| { | 
| if (m_shouldFireLoadingEvent) | 
| @@ -592,4 +628,20 @@ void FontFaceSet::trace(Visitor* visitor) | 
| } | 
| #endif | 
| +ScriptValue FontFaceSet::FontFaceSetIterator::next(ScriptState* scriptState, ExceptionState&) | 
| +{ | 
| + FontFace* fontFace = m_fontFaceSet->fontFaceAt(m_index); | 
| + if (!fontFace) | 
| + return ScriptValue(scriptState, v8DoneIteratorResult(scriptState->isolate())); | 
| + m_index++; | 
| + if (m_kind == FontFaceSetIterator::Entries) { | 
| + Vector<ScriptValue> entry; | 
| + ScriptValue value = ScriptValue(scriptState, V8ValueTraits<FontFace*>::toV8Value(fontFace, scriptState->context()->Global(), scriptState->isolate())); | 
| 
 
yhirano
2014/09/11 08:04:45
You can include bindings/core/v8/V8FontFaceSet.h a
 
Kunihiko Sakamoto
2014/09/11 10:47:35
Ah good to know. Thanks.
 
 | 
| + entry.append(value); | 
| + entry.append(value); | 
| + return ScriptValue(scriptState, v8IteratorResult(scriptState, entry)); | 
| + } | 
| + return ScriptValue(scriptState, v8IteratorResult(scriptState, fontFace)); | 
| +} | 
| + | 
| } // namespace blink |