1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * modification, are permitted provided that the following conditions are 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * met: 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * in the documentation and/or other materials provided with the 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * distribution. 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * this software without specific prior written permission. 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "config.h" 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "core/html/LinkRelAttribute.h" 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)LinkRelAttribute::LinkRelAttribute(const String& rel) 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : m_iconType(InvalidIcon) 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci , m_isStyleSheet(false) 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isAlternate(false) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isDNSPrefetch(false) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isLinkPrefetch(false) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isLinkSubresource(false) 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci , m_isLinkPrerender(false) 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isLinkNext(false) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isImport(false) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isManifest(false) 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) , m_isTransitionExitingStylesheet(false) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (rel.isEmpty()) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) String relCopy = rel; 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) relCopy.replace('\n', ' '); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Vector<String> list; 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) relCopy.split(' ', list); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Vector<String>::const_iterator end = list.end(); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (Vector<String>::const_iterator it = list.begin(); it != end; ++it) { 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (equalIgnoringCase(*it, "stylesheet")) { 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!m_isImport) 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) m_isStyleSheet = true; 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (equalIgnoringCase(*it, "import")) { 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!m_isStyleSheet) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) m_isImport = true; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(*it, "alternate")) { 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_isAlternate = true; 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else if (equalIgnoringCase(*it, "icon")) { 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // This also allows "shortcut icon" since we just ignore the non-standard "shortcut" token. 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // FIXME: This doesn't really follow the spec that requires "shortcut icon" to be the 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // entire string http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#rel-icon 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) m_iconType = Favicon; 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(*it, "prefetch")) { 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) m_isLinkPrefetch = true; 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (equalIgnoringCase(*it, "dns-prefetch")) { 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_isDNSPrefetch = true; 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (equalIgnoringCase(*it, "subresource")) { 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_isLinkSubresource = true; 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(*it, "prerender")) { 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_isLinkPrerender = true; 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(*it, "next")) { 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_isLinkNext = true; 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(*it, "apple-touch-icon")) { 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (RuntimeEnabledFeatures::touchIconLoadingEnabled()) 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_iconType = TouchIcon; 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (equalIgnoringCase(*it, "apple-touch-icon-precomposed")) { 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (RuntimeEnabledFeatures::touchIconLoadingEnabled()) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_iconType = TouchPrecomposedIcon; 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(*it, "manifest")) { 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_isManifest = true; 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (equalIgnoringCase(rel, "transition-exiting-stylesheet")) { 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (RuntimeEnabledFeatures::navigationTransitionsEnabled()) 93 m_isTransitionExitingStylesheet = true; 94 } 95 } 96} 97 98} 99