OLD | NEW |
---|---|
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 Loading... | |
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) | |
Lei Zhang
2016/03/08 23:37:59
nit: add extra space, run git cl lint.
satorux1
2016/03/09 05:28:18
Done.
| |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |