| 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
 | 
| 
 |