TEST_F(WebDocumentTest, ManifestURL) { loadURL(std::string(kDefaultOrigin) + kManifestDummyFilePath); WebDocument webDoc = topWebDocument(); Document* document = topDocument(); HTMLLinkElement* linkManifest = document->linkManifest(); // No href attribute was set. ASSERT_EQ(linkManifest->href(), static_cast<KURL>(webDoc.manifestURL())); // Set to some absolute url. linkManifest->setAttribute(HTMLNames::hrefAttr, "http://example.com/manifest.json"); ASSERT_EQ(linkManifest->href(), static_cast<KURL>(webDoc.manifestURL())); // Set to some relative url. linkManifest->setAttribute(HTMLNames::hrefAttr, "static/manifest.json"); ASSERT_EQ(linkManifest->href(), static_cast<KURL>(webDoc.manifestURL())); }
TEST(HTMLLinkElementSizesAttributeTest, setSizesAttribute_updatesSizesPropertyValue) { Document* document = Document::create(); HTMLLinkElement* link = HTMLLinkElement::create(*document, /* createdByParser: */ false); DOMTokenList* sizes = link->sizes(); EXPECT_EQ(nullAtom, sizes->value()); link->setAttribute(HTMLNames::sizesAttr, "y x "); EXPECT_EQ("y x ", sizes->value()); }
TEST_F(WebDocumentTest, ManifestUseCredentials) { loadURL(std::string(kDefaultOrigin) + kManifestDummyFilePath); WebDocument webDoc = topWebDocument(); Document* document = topDocument(); HTMLLinkElement* linkManifest = document->linkManifest(); // No crossorigin attribute was set so credentials shouldn't be used. ASSERT_FALSE(linkManifest->fastHasAttribute(HTMLNames::crossoriginAttr)); ASSERT_FALSE(webDoc.manifestUseCredentials()); // Crossorigin set to a random string shouldn't trigger using credentials. linkManifest->setAttribute(HTMLNames::crossoriginAttr, "foobar"); ASSERT_FALSE(webDoc.manifestUseCredentials()); // Crossorigin set to 'anonymous' shouldn't trigger using credentials. linkManifest->setAttribute(HTMLNames::crossoriginAttr, "anonymous"); ASSERT_FALSE(webDoc.manifestUseCredentials()); // Crossorigin set to 'use-credentials' should trigger using credentials. linkManifest->setAttribute(HTMLNames::crossoriginAttr, "use-credentials"); ASSERT_TRUE(webDoc.manifestUseCredentials()); }
// This test checks that Documunt::linkManifest() returns a value conform to the specification. TEST_F(DocumentTest, LinkManifest) { // Test the default result. EXPECT_EQ(0, document().linkManifest()); // Check that we use the first manifest with <link rel=manifest> HTMLLinkElement* link = HTMLLinkElement::create(document(), false); link->setAttribute(blink::HTMLNames::relAttr, "manifest"); link->setAttribute(blink::HTMLNames::hrefAttr, "foo.json"); document().head()->appendChild(link); EXPECT_EQ(link, document().linkManifest()); HTMLLinkElement* link2 = HTMLLinkElement::create(document(), false); link2->setAttribute(blink::HTMLNames::relAttr, "manifest"); link2->setAttribute(blink::HTMLNames::hrefAttr, "bar.json"); document().head()->insertBefore(link2, link); EXPECT_EQ(link2, document().linkManifest()); document().head()->appendChild(link2); EXPECT_EQ(link, document().linkManifest()); // Check that crazy URLs are accepted. link->setAttribute(blink::HTMLNames::hrefAttr, "http:foo.json"); EXPECT_EQ(link, document().linkManifest()); // Check that empty URLs are accepted. link->setAttribute(blink::HTMLNames::hrefAttr, ""); EXPECT_EQ(link, document().linkManifest()); // Check that URLs from different origins are accepted. link->setAttribute(blink::HTMLNames::hrefAttr, "http://example.org/manifest.json"); EXPECT_EQ(link, document().linkManifest()); link->setAttribute(blink::HTMLNames::hrefAttr, "http://foo.example.org/manifest.json"); EXPECT_EQ(link, document().linkManifest()); link->setAttribute(blink::HTMLNames::hrefAttr, "http://foo.bar/manifest.json"); EXPECT_EQ(link, document().linkManifest()); // More than one token in @rel is accepted. link->setAttribute(blink::HTMLNames::relAttr, "foo bar manifest"); EXPECT_EQ(link, document().linkManifest()); // Such as spaces around the token. link->setAttribute(blink::HTMLNames::relAttr, " manifest "); EXPECT_EQ(link, document().linkManifest()); // Check that rel=manifest actually matters. link->setAttribute(blink::HTMLNames::relAttr, ""); EXPECT_EQ(link2, document().linkManifest()); link->setAttribute(blink::HTMLNames::relAttr, "manifest"); // Check that link outside of the <head> are ignored. document().head()->removeChild(link, ASSERT_NO_EXCEPTION); document().head()->removeChild(link2, ASSERT_NO_EXCEPTION); EXPECT_EQ(0, document().linkManifest()); document().body()->appendChild(link); EXPECT_EQ(0, document().linkManifest()); document().head()->appendChild(link); document().head()->appendChild(link2); // Check that some attribute values do not have an effect. link->setAttribute(blink::HTMLNames::crossoriginAttr, "use-credentials"); EXPECT_EQ(link, document().linkManifest()); link->setAttribute(blink::HTMLNames::hreflangAttr, "klingon"); EXPECT_EQ(link, document().linkManifest()); link->setAttribute(blink::HTMLNames::typeAttr, "image/gif"); EXPECT_EQ(link, document().linkManifest()); link->setAttribute(blink::HTMLNames::sizesAttr, "16x16"); EXPECT_EQ(link, document().linkManifest()); link->setAttribute(blink::HTMLNames::mediaAttr, "print"); EXPECT_EQ(link, document().linkManifest()); }
void setJSHTMLLinkElementType(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLLinkElement* castedThis = static_cast<JSHTMLLinkElement*>(thisObject); HTMLLinkElement* imp = static_cast<HTMLLinkElement*>(castedThis->impl()); imp->setAttribute(WebCore::HTMLNames::typeAttr, valueToStringWithNullCheck(exec, value)); }