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

Unified Diff: Source/core/html/HTMLLinkElement.cpp

Issue 196743002: Parse the link element's size attribute (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 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/html/HTMLLinkElement.cpp
diff --git a/Source/core/html/HTMLLinkElement.cpp b/Source/core/html/HTMLLinkElement.cpp
index 9025639b7fae91cba4e8635db5337f4b3d32c78f..f333d09bacc101f43a4beac12bd706fd3473eae6 100644
--- a/Source/core/html/HTMLLinkElement.cpp
+++ b/Source/core/html/HTMLLinkElement.cpp
@@ -52,12 +52,46 @@ namespace WebCore {
using namespace HTMLNames;
+const String sizeSeparator = "x";
Inactive 2014/03/12 20:09:52 This could be a UChar.
+
static LinkEventSender& linkLoadEventSender()
{
DEFINE_STATIC_LOCAL(LinkEventSender, sharedLoadEventSender, (EventTypeNames::load));
return sharedLoadEventSender;
}
+void HTMLLinkElement::parseSizesAttribute(const AtomicString& value, Vector<IntSize>* iconSizes)
Inactive 2014/03/12 20:09:52 The Vector could be passed by reference instead of
michaelbai 2014/03/12 23:08:41 iconSizes will change and should be pass as pointe
Inactive 2014/03/12 23:14:38 I said a by reference, not by *const* reference.
michaelbai 2014/03/13 05:50:10 I has been told to use pointer in this case, I sea
+{
Inactive 2014/03/12 20:09:52 Should we add an assertion to make sure the Vector
michaelbai 2014/03/12 23:08:41 Done.
+ RefPtr<DOMSettableTokenList> tokenList = DOMSettableTokenList::create();
abarth-chromium 2014/03/12 19:42:34 Why are we using a DOMSettableTokenList here?
+ tokenList->setValue(value.lower());
+ const SpaceSplitString& tokens = tokenList->tokens();
+ bool successful = true;
+ for (unsigned i = 0; i < tokens.size(); i++) {
abarth-chromium 2014/03/12 19:42:34 ++i
+ const String& sizeString = (String&)tokens[i];
abarth-chromium 2014/03/12 19:42:34 Why is (String&) needed here? We generally don't
+ Vector<String> result;
+ sizeString.split(sizeSeparator, result);
+ if (result.size() != 2) {
+ successful = false;
+ break;
+ }
+ bool ok = false;
+ int width = result[0].toUInt(&ok);
+ if (!ok) {
+ successful = false;
+ break;
+ }
+ ok = false;
+ int height = result[1].toUInt(&ok);
+ if (!ok) {
+ successful = false;
+ break;
+ }
+ iconSizes->append(IntSize(width, height));
+ }
+ if (!successful)
+ iconSizes->clear();
+}
abarth-chromium 2014/03/12 19:42:34 This function is very slow. Why not write a versi
michaelbai 2014/03/12 23:08:41 I were thinking I should use existing utility, cha
+
inline HTMLLinkElement::HTMLLinkElement(Document& document, bool createdByParser)
: HTMLElement(linkTag, document)
, m_linkLoader(this)
@@ -96,6 +130,7 @@ void HTMLLinkElement::parseAttribute(const QualifiedName& name, const AtomicStri
process();
} else if (name == sizesAttr) {
m_sizes->setValue(value);
+ parseSizesAttribute(value, &m_iconSizes);
process();
} else if (name == mediaAttr) {
m_media = value.string().lower();
@@ -347,9 +382,9 @@ IconType HTMLLinkElement::iconType() const
return m_relAttribute.iconType();
}
-const AtomicString& HTMLLinkElement::iconSizes() const
+const Vector<IntSize>& HTMLLinkElement::iconSizes() const
{
- return m_sizes->toString();
+ return m_iconSizes;
}
DOMSettableTokenList* HTMLLinkElement::sizes() const

Powered by Google App Engine
This is Rietveld 408576698