OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 "xmlns:xlink=\"http://www.w3.org/1999/xlink\">" | 154 "xmlns:xlink=\"http://www.w3.org/1999/xlink\">" |
155 "<rect x=\"0\" y=\"0\" width=\"200px\" height=\"200px\" fill=\"green\"/>" | 155 "<rect x=\"0\" y=\"0\" width=\"200px\" height=\"200px\" fill=\"green\"/>" |
156 "</svg>"; | 156 "</svg>"; |
157 | 157 |
158 constexpr char kTestURL[] = "http://www.test.com/cancelTest.html"; | 158 constexpr char kTestURL[] = "http://www.test.com/cancelTest.html"; |
159 | 159 |
160 String GetTestFilePath() { | 160 String GetTestFilePath() { |
161 return testing::WebTestDataPath("cancelTest.html"); | 161 return testing::WebTestDataPath("cancelTest.html"); |
162 } | 162 } |
163 | 163 |
| 164 constexpr char kSvgImageWithSubresource[] = |
| 165 "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"198\" height=\"100\">" |
| 166 "<style>" |
| 167 " <![CDATA[@font-face{font-family:\"test\"; " |
| 168 " src:url('data:font/ttf;base64,invalidFontData');}]]>" |
| 169 "</style>" |
| 170 "<text x=\"50\" y=\"50\" font-family=\"test\" font-size=\"16\">Fox</text>" |
| 171 "</svg>"; |
| 172 |
164 void ReceiveResponse(ImageResource* image_resource, | 173 void ReceiveResponse(ImageResource* image_resource, |
165 const KURL& url, | 174 const KURL& url, |
166 const AtomicString& mime_type, | 175 const AtomicString& mime_type, |
167 const char* data, | 176 const char* data, |
168 size_t data_size) { | 177 size_t data_size) { |
169 ResourceResponse response; | 178 ResourceResponse response; |
170 response.SetURL(url); | 179 response.SetURL(url); |
171 response.SetHTTPStatusCode(200); | 180 response.SetHTTPStatusCode(200); |
172 response.SetMimeType(mime_type); | 181 response.SetMimeType(mime_type); |
173 image_resource->SetStatus(ResourceStatus::kPending); | 182 image_resource->SetStatus(ResourceStatus::kPending); |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 strlen(kSvgImage)); | 775 strlen(kSvgImage)); |
767 | 776 |
768 EXPECT_FALSE(image_resource->ErrorOccurred()); | 777 EXPECT_FALSE(image_resource->ErrorOccurred()); |
769 ASSERT_TRUE(image_resource->GetContent()->HasImage()); | 778 ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
770 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); | 779 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
771 EXPECT_EQ(1, observer->ImageChangedCount()); | 780 EXPECT_EQ(1, observer->ImageChangedCount()); |
772 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); | 781 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
773 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsBitmapImage()); | 782 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsBitmapImage()); |
774 } | 783 } |
775 | 784 |
| 785 TEST(ImageResourceTest, SVGImageWithSubresource) { |
| 786 KURL url(kParsedURLString, "http://127.0.0.1:8000/foo"); |
| 787 ImageResource* image_resource = ImageResource::Create(ResourceRequest(url)); |
| 788 std::unique_ptr<MockImageResourceObserver> observer = |
| 789 MockImageResourceObserver::Create(image_resource->GetContent()); |
| 790 |
| 791 ReceiveResponse(image_resource, url, "image/svg+xml", |
| 792 kSvgImageWithSubresource, strlen(kSvgImageWithSubresource)); |
| 793 |
| 794 EXPECT_FALSE(image_resource->ErrorOccurred()); |
| 795 ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| 796 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| 797 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsBitmapImage()); |
| 798 |
| 799 // At this point, image is (mostly) available but the loading is not yet |
| 800 // finished because of SVG's subresources, and thus ImageChanged() or |
| 801 // ImageNotifyFinished() are not called. |
| 802 EXPECT_EQ(ResourceStatus::kPending, |
| 803 image_resource->GetContent()->GetContentStatus()); |
| 804 EXPECT_EQ(1, observer->ImageChangedCount()); |
| 805 EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); |
| 806 EXPECT_EQ(198, image_resource->GetContent()->GetImage()->width()); |
| 807 EXPECT_EQ(100, image_resource->GetContent()->GetImage()->height()); |
| 808 |
| 809 // A new client added here shouldn't notified of finish. |
| 810 std::unique_ptr<MockImageResourceObserver> observer2 = |
| 811 MockImageResourceObserver::Create(image_resource->GetContent()); |
| 812 EXPECT_EQ(1, observer2->ImageChangedCount()); |
| 813 EXPECT_FALSE(observer2->ImageNotifyFinishedCalled()); |
| 814 |
| 815 // After asynchronous tasks are executed, the loading of SVG document is |
| 816 // completed and ImageNotifyFinished() is called. |
| 817 testing::RunPendingTasks(); |
| 818 EXPECT_EQ(ResourceStatus::kCached, |
| 819 image_resource->GetContent()->GetContentStatus()); |
| 820 EXPECT_EQ(2, observer->ImageChangedCount()); |
| 821 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
| 822 EXPECT_EQ(2, observer2->ImageChangedCount()); |
| 823 EXPECT_TRUE(observer2->ImageNotifyFinishedCalled()); |
| 824 EXPECT_EQ(198, image_resource->GetContent()->GetImage()->width()); |
| 825 EXPECT_EQ(100, image_resource->GetContent()->GetImage()->height()); |
| 826 |
| 827 GetMemoryCache()->EvictResources(); |
| 828 } |
| 829 |
776 TEST(ImageResourceTest, SuccessfulRevalidationJpeg) { | 830 TEST(ImageResourceTest, SuccessfulRevalidationJpeg) { |
777 KURL url(kParsedURLString, "http://127.0.0.1:8000/foo"); | 831 KURL url(kParsedURLString, "http://127.0.0.1:8000/foo"); |
778 ImageResource* image_resource = ImageResource::Create(ResourceRequest(url)); | 832 ImageResource* image_resource = ImageResource::Create(ResourceRequest(url)); |
779 std::unique_ptr<MockImageResourceObserver> observer = | 833 std::unique_ptr<MockImageResourceObserver> observer = |
780 MockImageResourceObserver::Create(image_resource->GetContent()); | 834 MockImageResourceObserver::Create(image_resource->GetContent()); |
781 | 835 |
782 ReceiveResponse(image_resource, url, "image/jpeg", | 836 ReceiveResponse(image_resource, url, "image/jpeg", |
783 reinterpret_cast<const char*>(kJpegImage), | 837 reinterpret_cast<const char*>(kJpegImage), |
784 sizeof(kJpegImage)); | 838 sizeof(kJpegImage)); |
785 | 839 |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1623 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); | 1677 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
1624 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); | 1678 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); |
1625 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->width()); | 1679 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->width()); |
1626 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height()); | 1680 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height()); |
1627 | 1681 |
1628 WTF::SetTimeFunctionsForTesting(nullptr); | 1682 WTF::SetTimeFunctionsForTesting(nullptr); |
1629 } | 1683 } |
1630 | 1684 |
1631 } // namespace | 1685 } // namespace |
1632 } // namespace blink | 1686 } // namespace blink |
OLD | NEW |