| Index: Source/core/dom/DocumentTest.cpp
|
| diff --git a/Source/core/dom/DocumentTest.cpp b/Source/core/dom/DocumentTest.cpp
|
| index c5766a8fa5e964dee7d93c6e39930fcfc2444657..5867805f548aa60f514151be1b750fe710279c97 100644
|
| --- a/Source/core/dom/DocumentTest.cpp
|
| +++ b/Source/core/dom/DocumentTest.cpp
|
| @@ -31,6 +31,8 @@
|
| #include "config.h"
|
| #include "core/dom/Document.h"
|
|
|
| +#include "core/html/HTMLHeadElement.h"
|
| +#include "core/html/HTMLLinkElement.h"
|
| #include "core/testing/DummyPageHolder.h"
|
| #include <gmock/gmock.h>
|
| #include <gtest/gtest.h>
|
| @@ -130,4 +132,76 @@ TEST_F(DocumentTest, VisibilityOberver)
|
| page().setVisibilityState(PageVisibilityStateVisible, false);
|
| }
|
|
|
| +// 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>
|
| + RefPtrWillBeRawPtr<HTMLLinkElement> link = HTMLLinkElement::create(document(), false);
|
| + link->setAttribute(WebCore::HTMLNames::relAttr, "manifest");
|
| + link->setAttribute(WebCore::HTMLNames::hrefAttr, "foo.json");
|
| + document().head()->appendChild(link);
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + RefPtrWillBeRawPtr<HTMLLinkElement> link2 = HTMLLinkElement::create(document(), false);
|
| + link2->setAttribute(WebCore::HTMLNames::relAttr, "manifest");
|
| + link2->setAttribute(WebCore::HTMLNames::hrefAttr, "bar.json");
|
| + document().head()->insertBefore(link2, link.get());
|
| + EXPECT_EQ(link2, document().linkManifest());
|
| + document().head()->appendChild(link2);
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + // Check that crazy URLs are accepted.
|
| + link->setAttribute(WebCore::HTMLNames::hrefAttr, "http:foo.json");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + // Check that empty URLs are accepted.
|
| + link->setAttribute(WebCore::HTMLNames::hrefAttr, "");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + // Check that URLs from different origins are accepted.
|
| + link->setAttribute(WebCore::HTMLNames::hrefAttr, "http://example.org/manifest.json");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::hrefAttr, "http://foo.example.org/manifest.json");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::hrefAttr, "http://foo.bar/manifest.json");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + // More than one token in @rel is accepted.
|
| + link->setAttribute(WebCore::HTMLNames::relAttr, "foo bar manifest");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + // Such as spaces around the token.
|
| + link->setAttribute(WebCore::HTMLNames::relAttr, " manifest ");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +
|
| + // Check that rel=manifest actually matters.
|
| + link->setAttribute(WebCore::HTMLNames::relAttr, "");
|
| + EXPECT_EQ(link2, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::relAttr, "manifest");
|
| +
|
| + // Check that link outside of the <head> are ignored.
|
| + document().head()->removeChild(link.get(), ASSERT_NO_EXCEPTION);
|
| + document().head()->removeChild(link2.get(), 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(WebCore::HTMLNames::crossoriginAttr, "use-credentials");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::hreflangAttr, "klingon");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::typeAttr, "image/gif");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::sizesAttr, "16x16");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| + link->setAttribute(WebCore::HTMLNames::mediaAttr, "print");
|
| + EXPECT_EQ(link, document().linkManifest());
|
| +}
|
| +
|
| } // unnamed namespace
|
|
|