1/* 2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#ifndef HTMLSrcsetParser_h 33#define HTMLSrcsetParser_h 34 35#include <wtf/text/StringView.h> 36 37namespace WebCore { 38 39const int UninitializedDescriptor = -1; 40const float DefaultDensityValue = 1.0; 41 42class DescriptorParsingResult { 43public: 44 DescriptorParsingResult() 45 : m_density(UninitializedDescriptor) 46 , m_resourceWidth(UninitializedDescriptor) 47 , m_resourceHeight(UninitializedDescriptor) 48 { 49 } 50 51 bool hasDensity() const { return m_density >= 0; } 52 bool hasWidth() const { return m_resourceWidth >= 0; } 53 bool hasHeight() const { return m_resourceHeight >= 0; } 54 55 float density() const { ASSERT(hasDensity()); return m_density; } 56 unsigned resourceWidth() const { ASSERT(hasWidth()); return m_resourceWidth; } 57 unsigned resourceHeight() const { ASSERT(hasHeight()); return m_resourceHeight; } 58 59 void setResourceWidth(int width) { ASSERT(width >= 0); m_resourceWidth = (unsigned)width; } 60 void setResourceHeight(int height) { ASSERT(height >= 0); m_resourceHeight = (unsigned)height; } 61 void setDensity(float densityToSet) { ASSERT(densityToSet >= 0); m_density = densityToSet; } 62 63private: 64 float m_density; 65 int m_resourceWidth; 66 int m_resourceHeight; 67}; 68 69struct ImageCandidate { 70 enum OriginAttribute { 71 SrcsetOrigin, 72 SrcOrigin 73 }; 74 75 ImageCandidate() 76 : density(DefaultDensityValue) 77 , resourceWidth(UninitializedDescriptor) 78 , originAttribute(SrcsetOrigin) 79 { 80 } 81 82 ImageCandidate(const StringView& source, const DescriptorParsingResult& result, OriginAttribute originAttribute) 83 : string(source) 84 , density(result.hasDensity() ? result.density() : UninitializedDescriptor) 85 , resourceWidth(result.hasWidth() ? result.resourceWidth() : UninitializedDescriptor) 86 , originAttribute(originAttribute) 87 { 88 } 89 90 bool srcOrigin() const 91 { 92 return (originAttribute == SrcOrigin); 93 } 94 95 StringView string; 96 float density; 97 int resourceWidth; 98 OriginAttribute originAttribute; 99}; 100 101ImageCandidate bestFitSourceForImageAttributes(float deviceScaleFactor, const AtomicString& srcAttribute, const AtomicString& srcsetAttribute 102#if ENABLE(PICTURE_SIZES) 103 , unsigned sourceSize 104#endif 105 ); 106 107} 108 109#endif 110