| /* |
| * Copyright (C) 2012 Google Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following disclaimer |
| * in the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name of Google Inc. nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "third_party/blink/public/web/web_image.h" |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/public/platform/web_data.h" |
| #include "third_party/blink/public/platform/web_size.h" |
| #include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h" |
| #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" |
| #include "third_party/blink/renderer/platform/wtf/shared_buffer.h" |
| |
| namespace blink { |
| |
| static scoped_refptr<SharedBuffer> ReadFile(const char* file_name) { |
| String file_path = test::CoreTestDataPath(file_name); |
| |
| return test::ReadFromFile(file_path); |
| } |
| |
| class WebImageTest : public testing::Test, |
| private ScopedMockOverlayScrollbars {}; |
| |
| TEST_F(WebImageTest, PNGImage) { |
| scoped_refptr<SharedBuffer> data = ReadFile("white-1x1.png"); |
| ASSERT_TRUE(data.get()); |
| |
| SkBitmap image = WebImage::FromData(WebData(data), WebSize()); |
| EXPECT_EQ(image.width(), 1); |
| EXPECT_EQ(image.height(), 1); |
| EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), image.getColor(0, 0)); |
| } |
| |
| TEST_F(WebImageTest, ICOImage) { |
| scoped_refptr<SharedBuffer> data = ReadFile("black-and-white.ico"); |
| ASSERT_TRUE(data.get()); |
| |
| WebVector<SkBitmap> images = WebImage::FramesFromData(WebData(data)); |
| ASSERT_EQ(2u, images.size()); |
| EXPECT_EQ(images[0].width(), 2); |
| EXPECT_EQ(images[0].height(), 2); |
| EXPECT_EQ(images[1].width(), 1); |
| EXPECT_EQ(images[1].height(), 1); |
| EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), images[0].getColor(0, 0)); |
| EXPECT_EQ(SkColorSetARGB(255, 0, 0, 0), images[1].getColor(0, 0)); |
| } |
| |
| TEST_F(WebImageTest, ICOValidHeaderMissingBitmap) { |
| scoped_refptr<SharedBuffer> data = |
| ReadFile("valid_header_missing_bitmap.ico"); |
| ASSERT_TRUE(data.get()); |
| |
| WebVector<SkBitmap> images = WebImage::FramesFromData(WebData(data)); |
| ASSERT_TRUE(images.empty()); |
| } |
| |
| TEST_F(WebImageTest, BadImage) { |
| const char kBadImage[] = "hello world"; |
| WebVector<SkBitmap> images = WebImage::FramesFromData(WebData(kBadImage)); |
| ASSERT_EQ(0u, images.size()); |
| |
| SkBitmap image = WebImage::FromData(WebData(kBadImage), WebSize()); |
| EXPECT_TRUE(image.empty()); |
| EXPECT_TRUE(image.isNull()); |
| } |
| |
| TEST_F(WebImageTest, DecodeSVGDesiredSize) { |
| const char kImage[] = |
| "<svg xmlns='http://www.w3.org/2000/svg' width='32'" |
| " height='32'></svg>"; |
| SkBitmap image = WebImage::DecodeSVG(WebData(kImage), WebSize(16, 16)); |
| EXPECT_FALSE(image.empty()); |
| EXPECT_FALSE(image.isNull()); |
| EXPECT_EQ(image.width(), 16); |
| EXPECT_EQ(image.height(), 16); |
| } |
| |
| TEST_F(WebImageTest, DecodeSVGDesiredSizeAspectRatioOnly) { |
| const char kImageAspectRatioOne[] = |
| "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'></svg>"; |
| SkBitmap image = |
| WebImage::DecodeSVG(WebData(kImageAspectRatioOne), WebSize(16, 16)); |
| EXPECT_FALSE(image.empty()); |
| EXPECT_FALSE(image.isNull()); |
| EXPECT_EQ(image.width(), 16); |
| EXPECT_EQ(image.height(), 16); |
| |
| const char kImageAspectRatioNotOne[] = |
| "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 3'></svg>"; |
| image = |
| WebImage::DecodeSVG(WebData(kImageAspectRatioNotOne), WebSize(16, 16)); |
| EXPECT_FALSE(image.empty()); |
| EXPECT_FALSE(image.isNull()); |
| EXPECT_EQ(image.width(), 16); |
| EXPECT_EQ(image.height(), 16); |
| } |
| |
| TEST_F(WebImageTest, DecodeSVGDesiredSizeEmpty) { |
| const char kImage[] = |
| "<svg xmlns='http://www.w3.org/2000/svg' width='32'" |
| " height='32'></svg>"; |
| SkBitmap image = WebImage::DecodeSVG(WebData(kImage), WebSize()); |
| EXPECT_FALSE(image.empty()); |
| EXPECT_FALSE(image.isNull()); |
| EXPECT_EQ(image.width(), 32); |
| EXPECT_EQ(image.height(), 32); |
| } |
| |
| TEST_F(WebImageTest, DecodeSVGInvalidImage) { |
| const char kBogusImage[] = "bogus"; |
| SkBitmap image = WebImage::DecodeSVG(WebData(kBogusImage), WebSize(16, 16)); |
| EXPECT_TRUE(image.empty()); |
| EXPECT_TRUE(image.isNull()); |
| |
| const char kWellformedXMLBadImage[] = "<foo xmlns='some:namespace'></foo>"; |
| image = WebImage::DecodeSVG(WebData(kWellformedXMLBadImage), WebSize(16, 16)); |
| EXPECT_TRUE(image.empty()); |
| EXPECT_TRUE(image.isNull()); |
| } |
| |
| } // namespace blink |