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

Side by Side Diff: third_party/WebKit/Source/core/css/CSSVariableData.h

Issue 2901213005: Ensure string data is kept alive as long as there are CSSVariableData tokens pointing to it (Closed)
Patch Set: comment Created 3 years, 6 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/css/CSSVariableData.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #ifndef CSSVariableData_h 5 #ifndef CSSVariableData_h
6 #define CSSVariableData_h 6 #define CSSVariableData_h
7 7
8 #include "core/css/StylePropertySet.h" 8 #include "core/css/StylePropertySet.h"
9 #include "core/css/parser/CSSParserToken.h" 9 #include "core/css/parser/CSSParserToken.h"
10 #include "core/css/parser/CSSParserTokenRange.h" 10 #include "core/css/parser/CSSParserTokenRange.h"
(...skipping 13 matching lines...) Expand all
24 public: 24 public:
25 static PassRefPtr<CSSVariableData> Create(const CSSParserTokenRange& range, 25 static PassRefPtr<CSSVariableData> Create(const CSSParserTokenRange& range,
26 bool is_animation_tainted, 26 bool is_animation_tainted,
27 bool needs_variable_resolution) { 27 bool needs_variable_resolution) {
28 return AdoptRef(new CSSVariableData(range, is_animation_tainted, 28 return AdoptRef(new CSSVariableData(range, is_animation_tainted,
29 needs_variable_resolution)); 29 needs_variable_resolution));
30 } 30 }
31 31
32 static PassRefPtr<CSSVariableData> CreateResolved( 32 static PassRefPtr<CSSVariableData> CreateResolved(
33 const Vector<CSSParserToken>& resolved_tokens, 33 const Vector<CSSParserToken>& resolved_tokens,
34 const CSSVariableData& unresolved_data, 34 Vector<String> backing_strings,
35 bool is_animation_tainted) { 35 bool is_animation_tainted) {
36 return AdoptRef(new CSSVariableData(resolved_tokens, 36 return AdoptRef(new CSSVariableData(
37 unresolved_data.backing_string_, 37 resolved_tokens, std::move(backing_strings), is_animation_tainted));
38 is_animation_tainted));
39 } 38 }
40 39
41 CSSParserTokenRange TokenRange() const { return tokens_; } 40 CSSParserTokenRange TokenRange() const { return tokens_; }
42 41
43 const Vector<CSSParserToken>& Tokens() const { return tokens_; } 42 const Vector<CSSParserToken>& Tokens() const { return tokens_; }
43 const Vector<String>& BackingStrings() const { return backing_strings_; }
44 44
45 bool operator==(const CSSVariableData& other) const; 45 bool operator==(const CSSVariableData& other) const;
46 46
47 bool IsAnimationTainted() const { return is_animation_tainted_; } 47 bool IsAnimationTainted() const { return is_animation_tainted_; }
48 48
49 bool NeedsVariableResolution() const { return needs_variable_resolution_; } 49 bool NeedsVariableResolution() const { return needs_variable_resolution_; }
50 50
51 const CSSValue* ParseForSyntax(const CSSSyntaxDescriptor&) const; 51 const CSSValue* ParseForSyntax(const CSSSyntaxDescriptor&) const;
52 52
53 StylePropertySet* PropertySet(); 53 StylePropertySet* PropertySet();
54 54
55 private: 55 private:
56 CSSVariableData(const CSSParserTokenRange&, 56 CSSVariableData(const CSSParserTokenRange&,
57 bool is_animation_tainted, 57 bool is_animation_tainted,
58 bool needs_variable_resolution); 58 bool needs_variable_resolution);
59 59
60 // We can safely copy the tokens (which have raw pointers to substrings)
61 // because StylePropertySets contain references to
62 // CSSCustomPropertyDeclarations, which point to the unresolved
63 // CSSVariableData values that own the backing strings this will potentially
64 // reference.
65 CSSVariableData(const Vector<CSSParserToken>& resolved_tokens, 60 CSSVariableData(const Vector<CSSParserToken>& resolved_tokens,
66 String backing_string, 61 Vector<String> backing_strings,
67 bool is_animation_tainted) 62 bool is_animation_tainted)
68 : backing_string_(backing_string), 63 : backing_strings_(std::move(backing_strings)),
69 tokens_(resolved_tokens), 64 tokens_(resolved_tokens),
70 is_animation_tainted_(is_animation_tainted), 65 is_animation_tainted_(is_animation_tainted),
71 needs_variable_resolution_(false), 66 needs_variable_resolution_(false),
72 cached_property_set_(false) {} 67 cached_property_set_(false) {}
73 68
74 void ConsumeAndUpdateTokens(const CSSParserTokenRange&); 69 void ConsumeAndUpdateTokens(const CSSParserTokenRange&);
75 template <typename CharacterType>
76 void UpdateTokens(const CSSParserTokenRange&);
77 70
78 String backing_string_; 71 // tokens_ may have raw pointers to string data, we store the String objects
72 // owning that data in backing_strings_ to keep it alive alongside the
73 // tokens_.
74 Vector<String> backing_strings_;
79 Vector<CSSParserToken> tokens_; 75 Vector<CSSParserToken> tokens_;
80 const bool is_animation_tainted_; 76 const bool is_animation_tainted_;
81 const bool needs_variable_resolution_; 77 const bool needs_variable_resolution_;
82 78
83 // Parsed representation for @apply 79 // Parsed representation for @apply
84 bool cached_property_set_; 80 bool cached_property_set_;
85 Persistent<StylePropertySet> property_set_; 81 Persistent<StylePropertySet> property_set_;
86 }; 82 };
87 83
88 } // namespace blink 84 } // namespace blink
89 85
90 #endif // CSSVariableData_h 86 #endif // CSSVariableData_h
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/css/CSSVariableData.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698