Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(527)

Side by Side Diff: third_party/WebKit/Source/core/css/cssom/CSSTokenStreamValue.cpp

Issue 2140073002: [Typed-OM] Add compound type of CSSVariableReferenceValue and String with some tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@CSSTokenStreamValue
Patch Set: Rebase-update Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/cssom/CSSTokenStreamValue.h" 5 #include "core/css/cssom/CSSTokenStreamValue.h"
6 6
7 #include "core/css/CSSVariableReferenceValue.h" 7 #include "core/css/CSSVariableReferenceValue.h"
8 #include "core/css/cssom/CSSStyleVariableReferenceValue.h"
8 #include "core/css/parser/CSSTokenizer.h" 9 #include "core/css/parser/CSSTokenizer.h"
9 #include "wtf/text/StringBuilder.h" 10 #include "wtf/text/StringBuilder.h"
10 11
11 namespace blink { 12 namespace blink {
12 13
13 namespace { 14 namespace {
14 15
15 class TokenStreamValueIterationSource final : public ValueIterable<StringOrCSSVa riableReferenceValue>::IterationSource { 16 class TokenStreamValueIterationSource final : public ValueIterable<StringOrCSSVa riableReferenceValue>::IterationSource {
16 public: 17 public:
17 explicit TokenStreamValueIterationSource(CSSTokenStreamValue* tokenStreamVal ue) 18 explicit TokenStreamValueIterationSource(CSSTokenStreamValue* tokenStreamVal ue)
18 : m_tokenStreamValue(tokenStreamValue) 19 : m_tokenStreamValue(tokenStreamValue)
19 { 20 {
20 } 21 }
21 22
22 bool next(ScriptState*, StringOrCSSVariableReferenceValue& value, ExceptionS tate&) override 23 bool next(ScriptState*, StringOrCSSVariableReferenceValue& value, ExceptionS tate&) override
23 { 24 {
24 if (m_index >= m_tokenStreamValue->size()) 25 if (m_index >= m_tokenStreamValue->size())
25 return false; 26 return false;
26 value.setString(m_tokenStreamValue->fragmentAtIndex(m_index)); 27 value = m_tokenStreamValue->fragmentAtIndex(m_index);
27 return true; 28 return true;
28 } 29 }
29 30
30 DEFINE_INLINE_VIRTUAL_TRACE() 31 DEFINE_INLINE_VIRTUAL_TRACE()
31 { 32 {
32 visitor->trace(m_tokenStreamValue); 33 visitor->trace(m_tokenStreamValue);
33 ValueIterable<StringOrCSSVariableReferenceValue>::IterationSource::trace (visitor); 34 ValueIterable<StringOrCSSVariableReferenceValue>::IterationSource::trace (visitor);
34 } 35 }
35 36
36 private: 37 private:
37 const Member<CSSTokenStreamValue> m_tokenStreamValue; 38 const Member<CSSTokenStreamValue> m_tokenStreamValue;
38 }; 39 };
39 40
40 } // namespace 41 } // namespace
41 42
42 ValueIterable<StringOrCSSVariableReferenceValue>::IterationSource* CSSTokenStrea mValue::startIteration(ScriptState*, ExceptionState&) 43 ValueIterable<StringOrCSSVariableReferenceValue>::IterationSource* CSSTokenStrea mValue::startIteration(ScriptState*, ExceptionState&)
43 { 44 {
44 return new TokenStreamValueIterationSource(this); 45 return new TokenStreamValueIterationSource(this);
45 } 46 }
46 47
47 CSSValue* CSSTokenStreamValue::toCSSValue() const 48 CSSValue* CSSTokenStreamValue::toCSSValue() const
48 { 49 {
49 StringBuilder tokens; 50 StringBuilder tokens;
50 51
51 for (unsigned i = 0; i < m_fragments.size(); i++) { 52 for (unsigned i = 0; i < m_fragments.size(); i++) {
52 if (i) 53 if (i)
53 tokens.append("/**/"); 54 tokens.append("/**/");
54 tokens.append(m_fragments[i]); 55 if (m_fragments[i].isString())
56 tokens.append(m_fragments[i].getAsString());
57 else if (m_fragments[i].isCSSVariableReferenceValue())
58 tokens.append(m_fragments[i].getAsCSSVariableReferenceValue()->varia ble());
59 else
60 NOTREACHED();
55 } 61 }
56 62
57 CSSTokenizer::Scope scope(tokens.toString()); 63 CSSTokenizer::Scope scope(tokens.toString());
58 64
59 return CSSVariableReferenceValue::create(CSSVariableData::create(scope.token Range())); 65 return CSSVariableReferenceValue::create(CSSVariableData::create(scope.token Range()));
60 } 66 }
61 67
62 } // namespace blink 68 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698