Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(753)

Side by Side Diff: chrome/browser/image_decoder_browsertest.cc

Issue 1764603002: Added ROBUST_PNG_CODEC to ImageDecoder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/image_decoder.cc ('k') | chrome/common/chrome_utility_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/image_decoder.h" 5 #include "chrome/browser/image_decoder.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "chrome/grit/generated_resources.h" 9 #include "chrome/grit/generated_resources.h"
10 #include "chrome/test/base/in_process_browser_test.h" 10 #include "chrome/test/base/in_process_browser_test.h"
(...skipping 12 matching lines...) Expand all
23 static const char kPngData[] = 23 static const char kPngData[] =
24 "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52" 24 "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52"
25 "\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90\x77\x53" 25 "\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90\x77\x53"
26 "\xde\x00\x00\x00\x0c\x49\x44\x41\x54\x08\xd7\x63\xf8\xff\xff\x3f" 26 "\xde\x00\x00\x00\x0c\x49\x44\x41\x54\x08\xd7\x63\xf8\xff\xff\x3f"
27 "\x00\x05\xfe\x02\xfe\xdc\xcc\x59\xe7\x00\x00\x00\x00\x49\x45\x4e" 27 "\x00\x05\xfe\x02\xfe\xdc\xcc\x59\xe7\x00\x00\x00\x00\x49\x45\x4e"
28 "\x44\xae\x42\x60\x82"; 28 "\x44\xae\x42\x60\x82";
29 // Need to specify the buffer size because it contains NULs. 29 // Need to specify the buffer size because it contains NULs.
30 return std::string(kPngData, sizeof(kPngData) - 1); 30 return std::string(kPngData, sizeof(kPngData) - 1);
31 } 31 }
32 32
33 #if defined(OS_CHROMEOS)
34
35 std::string GetValidJpgString() {
36 // 1x1 JPG created from the 1x1 PNG above.
37 static const char kJpgData[] =
38 "\xFF\xD8\xFF\xE0\x00\x10\x4A\x46\x49\x46\x00\x01\x01\x01\x00\x48"
39 "\x00\x48\x00\x00\xFF\xDB\x00\x43\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
40 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
41 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
42 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
43 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDB\x00\x43\x01\xFF\xFF"
44 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
45 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
46 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
47 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0"
48 "\x00\x11\x08\x00\x01\x00\x01\x03\x01\x22\x00\x02\x11\x01\x03\x11"
49 "\x01\xFF\xC4\x00\x15\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00"
50 "\x00\x00\x00\x00\x00\x00\x00\x03\xFF\xC4\x00\x14\x10\x01\x00\x00"
51 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xC4"
52 "\x00\x14\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
53 "\x00\x00\x00\x00\xFF\xC4\x00\x14\x11\x01\x00\x00\x00\x00\x00\x00"
54 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xDA\x00\x0C\x03\x01"
55 "\x00\x02\x11\x03\x11\x00\x3F\x00\xA0\x00\xFF\xD9";
56 // Need to specify the buffer size because it contains NULs.
57 return std::string(kJpgData, sizeof(kJpgData) - 1);
58 }
59
60 #endif // defined(OS_CHROMEOS)
61
33 class TestImageRequest : public ImageDecoder::ImageRequest { 62 class TestImageRequest : public ImageDecoder::ImageRequest {
34 public: 63 public:
35 explicit TestImageRequest(const base::Closure& quit_closure) 64 explicit TestImageRequest(const base::Closure& quit_closure)
36 : decode_succeeded_(false), 65 : decode_succeeded_(false),
37 quit_closure_(quit_closure), 66 quit_closure_(quit_closure),
38 quit_called_(false) { 67 quit_called_(false) {
39 } 68 }
40 69
41 ~TestImageRequest() override { 70 ~TestImageRequest() override {
42 if (!quit_called_) { 71 if (!quit_called_) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 161
133 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, Basic) { 162 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, Basic) {
134 scoped_refptr<content::MessageLoopRunner> runner = 163 scoped_refptr<content::MessageLoopRunner> runner =
135 new content::MessageLoopRunner; 164 new content::MessageLoopRunner;
136 TestImageRequest test_request(runner->QuitClosure()); 165 TestImageRequest test_request(runner->QuitClosure());
137 ImageDecoder::Start(&test_request, std::string()); 166 ImageDecoder::Start(&test_request, std::string());
138 runner->Run(); 167 runner->Run();
139 EXPECT_FALSE(test_request.decode_succeeded()); 168 EXPECT_FALSE(test_request.decode_succeeded());
140 } 169 }
141 170
171 #if defined(OS_CHROMEOS)
172
173 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, RobustJpegCodecWithJpegData) {
174 scoped_refptr<content::MessageLoopRunner> runner =
175 new content::MessageLoopRunner;
176 TestImageRequest test_request(runner->QuitClosure());
177 ImageDecoder::StartWithOptions(&test_request, GetValidJpgString(),
178 ImageDecoder::ROBUST_JPEG_CODEC,
179 false /* shrink_to_fit */);
180 runner->Run();
181 EXPECT_TRUE(test_request.decode_succeeded());
182 }
183
184 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, RobustJpegCodecWithPngData) {
185 scoped_refptr<content::MessageLoopRunner> runner =
186 new content::MessageLoopRunner;
187 TestImageRequest test_request(runner->QuitClosure());
188 ImageDecoder::StartWithOptions(&test_request, GetValidPngString(),
189 ImageDecoder::ROBUST_JPEG_CODEC,
190 false /* shrink_to_fit */);
191 runner->Run();
192 // Should fail with PNG data because only JPEG data is allowed.
193 EXPECT_FALSE(test_request.decode_succeeded());
194 }
195
196 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, RobustPngCodecWithPngData) {
197 scoped_refptr<content::MessageLoopRunner> runner =
198 new content::MessageLoopRunner;
199 TestImageRequest test_request(runner->QuitClosure());
200 ImageDecoder::StartWithOptions(&test_request, GetValidPngString(),
201 ImageDecoder::ROBUST_PNG_CODEC,
202 false /* shrink_to_fit */);
203 runner->Run();
204 EXPECT_TRUE(test_request.decode_succeeded());
205 }
206
207 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, RobustPngCodecWithJpegData) {
208 scoped_refptr<content::MessageLoopRunner> runner =
209 new content::MessageLoopRunner;
210 TestImageRequest test_request(runner->QuitClosure());
211 ImageDecoder::StartWithOptions(&test_request, GetValidJpgString(),
212 ImageDecoder::ROBUST_PNG_CODEC,
213 false /* shrink_to_fit */);
214 runner->Run();
215 // Should fail with JPEG data because only PNG data is allowed.
216 EXPECT_FALSE(test_request.decode_succeeded());
217 }
218
219 #endif // defined(OS_CHROMEOS)
220
142 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, BasicDecode) { 221 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, BasicDecode) {
143 scoped_refptr<content::MessageLoopRunner> runner = 222 scoped_refptr<content::MessageLoopRunner> runner =
144 new content::MessageLoopRunner; 223 new content::MessageLoopRunner;
145 TestImageRequest test_request(runner->QuitClosure()); 224 TestImageRequest test_request(runner->QuitClosure());
146 ImageDecoder::Start(&test_request, GetValidPngString()); 225 ImageDecoder::Start(&test_request, GetValidPngString());
147 runner->Run(); 226 runner->Run();
148 EXPECT_TRUE(test_request.decode_succeeded()); 227 EXPECT_TRUE(test_request.decode_succeeded());
149 } 228 }
150 229
151 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, StartAndDestroy) { 230 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, StartAndDestroy) {
(...skipping 18 matching lines...) Expand all
170 new content::MessageLoopRunner; 249 new content::MessageLoopRunner;
171 TestImageRequest test_request(runner->QuitClosure()); 250 TestImageRequest test_request(runner->QuitClosure());
172 ImageDecoder::Start(&test_request, GetValidPngString()); 251 ImageDecoder::Start(&test_request, GetValidPngString());
173 runner->Run(); 252 runner->Run();
174 if (!test_request.decode_succeeded()) { 253 if (!test_request.decode_succeeded()) {
175 // The UI thread won the race. Make sure the utility process did get killed. 254 // The UI thread won the race. Make sure the utility process did get killed.
176 EXPECT_TRUE(observer.did_kill()); 255 EXPECT_TRUE(observer.did_kill());
177 } 256 }
178 // Else the IO thread won the race and the image got decoded. Oh well. 257 // Else the IO thread won the race and the image got decoded. Oh well.
179 } 258 }
OLDNEW
« no previous file with comments | « chrome/browser/image_decoder.cc ('k') | chrome/common/chrome_utility_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698