Commit afd02342 authored by Hayato Ito's avatar Hayato Ito Committed by Commit Bot

Use HashSet to store URLs in a <link> element's resource attribute

This CL is factored out of https://crrev.com/c/2266237 so that we can
land this separately.

BUG: 1082020
Change-Id: I6967bdfb0f0f2680f4d5f5f390f3140f31ea2826
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2266135Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Hayato Ito <hayato@chromium.org>
Cr-Commit-Position: refs/heads/master@{#782779}
parent 8cee94d9
......@@ -153,11 +153,12 @@ void HTMLLinkElement::ParseAttribute(
// Parse the attribute value as a space-separated list of urls
SpaceSplitString urls(value);
valid_resource_urls_.clear();
valid_resource_urls_.ReserveCapacity(SafeCast<wtf_size_t>(urls.size()));
valid_resource_urls_.ReserveCapacityForSize(
SafeCast<wtf_size_t>(urls.size()));
for (wtf_size_t i = 0; i < urls.size(); ++i) {
KURL url = LinkWebBundle::ParseResourceUrl(urls[i]);
if (url.IsValid()) {
valid_resource_urls_.push_back(std::move(url));
valid_resource_urls_.insert(std::move(url));
}
}
Process();
......
......@@ -38,6 +38,7 @@
#include "third_party/blink/renderer/core/html/rel_list.h"
#include "third_party/blink/renderer/core/loader/link_loader_client.h"
#include "third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h"
#include "third_party/blink/renderer/platform/wtf/hash_set.h"
namespace blink {
......@@ -100,7 +101,9 @@ class CORE_EXPORT HTMLLinkElement final : public HTMLElement,
// IDL method.
DOMTokenList* resources() const;
const Vector<KURL>& ValidResourceUrls() const { return valid_resource_urls_; }
const HashSet<KURL>& ValidResourceUrls() const {
return valid_resource_urls_;
}
void ScheduleEvent();
......@@ -181,8 +184,7 @@ class CORE_EXPORT HTMLLinkElement final : public HTMLElement,
LinkRelAttribute rel_attribute_;
String scope_;
Member<DOMTokenList> resources_;
// TODO(hayato): It might be better to use HashMap. Re-think later.
Vector<KURL> valid_resource_urls_;
HashSet<KURL> valid_resource_urls_;
bool created_by_parser_;
};
......
......@@ -41,7 +41,8 @@ TEST(LinkWebBundleTest, ResourcesAttribute) {
link->setAttribute(html_names::kResourcesAttr, "https://test.example.com");
EXPECT_EQ("https://test.example.com", resources->value());
EXPECT_EQ(1u, link->ValidResourceUrls().size());
EXPECT_EQ(KURL("https://test.example.com"), link->ValidResourceUrls()[0]);
EXPECT_TRUE(
link->ValidResourceUrls().Contains(KURL("https://test.example.com")));
// Invalid urls
link->setAttribute(html_names::kResourcesAttr,
......@@ -61,8 +62,10 @@ TEST(LinkWebBundleTest, ResourcesAttribute) {
link->setAttribute(html_names::kResourcesAttr,
"https://test1.example.com https://test2.example.com");
EXPECT_EQ(2u, link->ValidResourceUrls().size());
EXPECT_EQ(KURL("https://test1.example.com"), link->ValidResourceUrls()[0]);
EXPECT_EQ(KURL("https://test2.example.com"), link->ValidResourceUrls()[1]);
EXPECT_TRUE(
link->ValidResourceUrls().Contains(KURL("https://test1.example.com")));
EXPECT_TRUE(
link->ValidResourceUrls().Contains(KURL("https://test2.example.com")));
// Space-separated valid and invalid urls
link->setAttribute(html_names::kResourcesAttr,
......@@ -73,8 +76,10 @@ TEST(LinkWebBundleTest, ResourcesAttribute) {
"https://test2.example.com",
resources->value());
EXPECT_EQ(2u, link->ValidResourceUrls().size());
EXPECT_EQ(KURL("https://test1.example.com"), link->ValidResourceUrls()[0]);
EXPECT_EQ(KURL("https://test2.example.com"), link->ValidResourceUrls()[1]);
EXPECT_TRUE(
link->ValidResourceUrls().Contains(KURL("https://test1.example.com")));
EXPECT_TRUE(
link->ValidResourceUrls().Contains(KURL("https://test2.example.com")));
}
} // namespace blink
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment