109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/* 209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Copyright (c) 2014, Google Inc. All rights reserved. 309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * modification, are permitted provided that the following conditions are 609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * met: 709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * in the documentation and/or other materials provided with the 1309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * distribution. 1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * this software without specific prior written permission. 1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 1809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "config.h" 3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/dom/Document.h" 3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 34d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/html/HTMLHeadElement.h" 35d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/html/HTMLLinkElement.h" 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/testing/DummyPageHolder.h" 37c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "platform/heap/Handle.h" 3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include <gmock/gmock.h> 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include <gtest/gtest.h> 4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)using namespace blink; 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)namespace { 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DocumentTest : public ::testing::Test { 4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)protected: 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void SetUp() OVERRIDE; 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#if ENABLE(OILPAN) 50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void TearDown() OVERRIDE 51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Heap::collectAllGarbage(); 53c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 54c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#endif 55c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Document& document() const { return m_dummyPageHolder->document(); } 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Page& page() const { return m_dummyPageHolder->page(); } 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private: 6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtr<DummyPageHolder> m_dummyPageHolder; 6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}; 6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DocumentTest::SetUp() 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 68f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass MockDocumentVisibilityObserver 69f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu : public NoBaseWillBeGarbageCollectedFinalized<MockDocumentVisibilityObserver> 70f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , public DocumentVisibilityObserver { 71f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MockDocumentVisibilityObserver); 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public: 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu static PassOwnPtrWillBeRawPtr<MockDocumentVisibilityObserver> create(Document& document) 74f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu { 75f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return adoptPtrWillBeNoop(new MockDocumentVisibilityObserver(document)); 76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 77f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu virtual void trace(Visitor*) { } 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) MOCK_METHOD1(didChangeVisibilityState, void(PageVisibilityState)); 81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuprivate: 83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu MockDocumentVisibilityObserver(Document& document) : DocumentVisibilityObserver(document) { } 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}; 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)TEST_F(DocumentTest, VisibilityOberver) 8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) page().setVisibilityState(PageVisibilityStateVisible, true); // initial state 89f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu OwnPtrWillBeRawPtr<MockDocumentVisibilityObserver> observer1 = MockDocumentVisibilityObserver::create(document()); 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 92f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu OwnPtrWillBeRawPtr<MockDocumentVisibilityObserver> observer2 = MockDocumentVisibilityObserver::create(document()); 93f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 94f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 95f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 96f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 97f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer1.get()); 98f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer2.get()); 99f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 100f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1); 101f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 102f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1); 103f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) page().setVisibilityState(PageVisibilityStateHidden, false); 105f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer1.get()); 106f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer2.get()); 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 108f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 109f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 110f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 111f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) page().setVisibilityState(PageVisibilityStateHidden, false); 113f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer1.get()); 114f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer2.get()); 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 116f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 117f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(1); 118f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 119f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtr<DummyPageHolder> alternatePage = DummyPageHolder::create(IntSize(800, 600)); 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Document& alternateDocument = alternatePage->document(); 122f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu observer2->setObservedDocument(alternateDocument); 12309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) page().setVisibilityState(PageVisibilityStateVisible, false); 124f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer1.get()); 125f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer2.get()); 126f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 127f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1); 128f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 129f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1); 130f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0); 131f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu observer2->setObservedDocument(document()); 13209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) page().setVisibilityState(PageVisibilityStateHidden, false); 133f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer1.get()); 134f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ::testing::Mock::VerifyAndClearExpectations(observer2.get()); 13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // observer2 destroyed 138f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0); 139f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EXPECT_CALL(*observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(1); 14009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) page().setVisibilityState(PageVisibilityStateVisible, false); 14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 143d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)// This test checks that Documunt::linkManifest() returns a value conform to the specification. 144d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST_F(DocumentTest, LinkManifest) 145d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 146d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Test the default result. 147d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(0, document().linkManifest()); 148d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 149d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that we use the first manifest with <link rel=manifest> 150d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLLinkElement> link = HTMLLinkElement::create(document(), false); 151c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::relAttr, "manifest"); 152c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hrefAttr, "foo.json"); 153d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->appendChild(link); 154d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 155d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 156d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLLinkElement> link2 = HTMLLinkElement::create(document(), false); 157c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link2->setAttribute(blink::HTMLNames::relAttr, "manifest"); 158c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link2->setAttribute(blink::HTMLNames::hrefAttr, "bar.json"); 159d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->insertBefore(link2, link.get()); 160d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link2, document().linkManifest()); 161d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->appendChild(link2); 162d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 163d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 164d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that crazy URLs are accepted. 165c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hrefAttr, "http:foo.json"); 166d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 167d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 168d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that empty URLs are accepted. 169c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hrefAttr, ""); 170d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 171d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 172d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that URLs from different origins are accepted. 173c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hrefAttr, "http://example.org/manifest.json"); 174d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 175c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hrefAttr, "http://foo.example.org/manifest.json"); 176d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 177c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hrefAttr, "http://foo.bar/manifest.json"); 178d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 179d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 180d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // More than one token in @rel is accepted. 181c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::relAttr, "foo bar manifest"); 182d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 183d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 184d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Such as spaces around the token. 185c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::relAttr, " manifest "); 186d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 187d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 188d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that rel=manifest actually matters. 189c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::relAttr, ""); 190d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link2, document().linkManifest()); 191c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::relAttr, "manifest"); 192d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 193d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that link outside of the <head> are ignored. 194d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->removeChild(link.get(), ASSERT_NO_EXCEPTION); 195d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->removeChild(link2.get(), ASSERT_NO_EXCEPTION); 196d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(0, document().linkManifest()); 197d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().body()->appendChild(link); 198d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(0, document().linkManifest()); 199d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->appendChild(link); 200d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) document().head()->appendChild(link2); 201d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 202d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Check that some attribute values do not have an effect. 203c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::crossoriginAttr, "use-credentials"); 204d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 205c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::hreflangAttr, "klingon"); 206d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 207c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::typeAttr, "image/gif"); 208d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 209c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::sizesAttr, "16x16"); 210d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 211c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) link->setAttribute(blink::HTMLNames::mediaAttr, "print"); 212d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(link, document().linkManifest()); 213d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 214d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} // unnamed namespace 216