1 /* 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following 13 * disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 #include "config.h" 31 #include "core/rendering/shapes/ShapeInfo.h" 32 33 #include "core/rendering/RenderRegion.h" 34 35 namespace WebCore { 36 37 bool checkShapeImageOrigin(Document& document, ImageResource& imageResource) 38 { 39 if (imageResource.isAccessAllowed(document.securityOrigin())) 40 return true; 41 42 const KURL& url = imageResource.url(); 43 String urlString = url.isNull() ? "''" : url.elidedString(); 44 document.addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Unsafe attempt to load URL " + urlString + "."); 45 46 return false; 47 } 48 49 template<class RenderType> 50 const Shape* ShapeInfo<RenderType>::computedShape() const 51 { 52 if (Shape* shape = m_shape.get()) 53 return shape; 54 55 WritingMode writingMode = m_renderer->style()->writingMode(); 56 Length margin = m_renderer->style()->shapeMargin(); 57 Length padding = m_renderer->style()->shapePadding(); 58 float shapeImageThreshold = m_renderer->style()->shapeImageThreshold(); 59 const ShapeValue* shapeValue = this->shapeValue(); 60 ASSERT(shapeValue); 61 62 switch (shapeValue->type()) { 63 case ShapeValue::Shape: 64 ASSERT(shapeValue->shape()); 65 m_shape = Shape::createShape(shapeValue->shape(), m_shapeLogicalSize, writingMode, margin, padding); 66 break; 67 case ShapeValue::Image: 68 ASSERT(shapeValue->image()); 69 m_shape = Shape::createShape(shapeValue->image(), shapeImageThreshold, m_shapeLogicalSize, writingMode, margin, padding); 70 break; 71 case ShapeValue::Box: 72 m_shape = Shape::createLayoutBoxShape(m_shapeLogicalSize, writingMode, margin, padding); 73 break; 74 case ShapeValue::Outside: 75 // Outside should have already resolved to a different shape value. 76 ASSERT_NOT_REACHED(); 77 } 78 79 ASSERT(m_shape); 80 return m_shape.get(); 81 } 82 83 template<class RenderType> 84 SegmentList ShapeInfo<RenderType>::computeSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineHeight) const 85 { 86 ASSERT(lineHeight >= 0); 87 SegmentList segments; 88 89 getIntervals((lineTop - logicalTopOffset()), std::min(lineHeight, shapeLogicalBottom() - lineTop), segments); 90 91 for (size_t i = 0; i < segments.size(); i++) { 92 segments[i].logicalLeft += logicalLeftOffset(); 93 segments[i].logicalRight += logicalLeftOffset(); 94 } 95 96 return segments; 97 } 98 99 template class ShapeInfo<RenderBlock>; 100 template class ShapeInfo<RenderBox>; 101 } 102