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

Unified Diff: Source/core/css/CSSStringValue.h

Issue 1306823004: Split out String, URI and CustomIdent from CSSPrimitiveValue (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@split_out_attr_values
Patch Set: Split CSSStringValue into 3 separate classes and added type info to callsites Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/css/CSSStringValue.h
diff --git a/Source/core/css/CSSStringValue.h b/Source/core/css/CSSStringValue.h
new file mode 100644
index 0000000000000000000000000000000000000000..f6581fdf7ca8abcf2d9a738f8e66a8374f8c0ce5
--- /dev/null
+++ b/Source/core/css/CSSStringValue.h
@@ -0,0 +1,84 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CSSStringValue_h
+#define CSSStringValue_h
+
+#include "core/CoreExport.h"
+#include "core/css/CSSMarkup.h"
+#include "core/css/CSSValue.h"
+#include "wtf/PassRefPtr.h"
+#include "wtf/RefCounted.h"
+#include "wtf/text/WTFString.h"
+
+namespace blink {
+
+enum StringSerializationType {
Timothy Loh 2015/09/10 07:36:51 This.. isn't really a serialization type, <string>
sashab 2015/09/17 04:19:49 Used CSSValue's types, but had to make CSSValue::c
+ SerializeAsString,
+ SerializeAsCustomIdentifier,
+ SerializeAsURI
+};
+
+template <int T>
+class CORE_EXPORT CSSStringValueBase : public CSSValue {
+public:
+ static PassRefPtrWillBeRawPtr<CSSStringValueBase> create(const String& str)
+ {
+ switch (T) {
+ case SerializeAsString:
+ return adoptRefWillBeNoop(new CSSStringValueBase(str, StringClass));
Timothy Loh 2015/09/10 07:36:51 This logic would be better in the ctor
sashab 2015/09/17 04:19:49 Just used CSSValue's types and got rid of this
+ case SerializeAsCustomIdentifier:
+ return adoptRefWillBeNoop(new CSSStringValueBase(str, IdentClass));
+ case SerializeAsURI:
+ return adoptRefWillBeNoop(new CSSStringValueBase(str, URIClass));
+ }
+ ASSERT_NOT_REACHED();
+ return nullptr;
+ }
+
+ String getStringValue() const { return m_string; }
Timothy Loh 2015/09/10 07:36:51 value() maybe?
sashab 2015/09/17 04:19:49 Oh yeah, I meant to do this. Done.
+
+ String customCSSText() const
Timothy Loh 2015/09/10 07:36:51 This should be in a .cpp file
sashab 2015/09/17 04:19:49 Used specializations instead of the switch stateme
+ {
+ switch (T) {
+ case SerializeAsString:
+ return serializeString(m_string);
+ case SerializeAsCustomIdentifier:
+ return quoteCSSStringIfNeeded(m_string);
+ case SerializeAsURI:
+ return "url(" + quoteCSSURLIfNeeded(m_string) + ")";
+ }
+ ASSERT_NOT_REACHED();
+ return String();
+ }
+
+ bool equals(const CSSStringValueBase& other) const
+ {
+ return m_string == other.m_string;
+ }
+
+ DEFINE_INLINE_TRACE_AFTER_DISPATCH()
+ {
+ CSSValue::traceAfterDispatch(visitor);
+ }
+
+private:
+ CSSStringValueBase(const String& str, ClassType type)
+ : CSSValue(type)
+ , m_string(str) { }
+
+ String m_string;
+};
+
+using CSSStringValue = CSSStringValueBase<SerializeAsString>;
+using CSSIdentValue = CSSStringValueBase<SerializeAsCustomIdentifier>;
+using CSSURIValue = CSSStringValueBase<SerializeAsURI>;
+
+DEFINE_CSS_VALUE_TYPE_CASTS(CSSStringValue, isStringValue());
+DEFINE_CSS_VALUE_TYPE_CASTS(CSSIdentValue, isIdentValue());
Timothy Loh 2015/09/10 07:36:51 CSSCustomIdentValue and similar elsewhere
sashab 2015/09/17 04:19:49 Done. Also renamed this file to CSSStringValueBase
+DEFINE_CSS_VALUE_TYPE_CASTS(CSSURIValue, isURIValue());
+
+} // namespace
+
+#endif // CSSStringValue_h

Powered by Google App Engine
This is Rietveld 408576698