| 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 "chrome/grit/generated_resources.h" | 7 #include "chrome/grit/generated_resources.h" |
| 8 #include "chrome/test/base/in_process_browser_test.h" | 8 #include "chrome/test/base/in_process_browser_test.h" |
| 9 #include "content/public/browser/browser_child_process_observer.h" | 9 #include "content/public/browser/browser_child_process_observer.h" |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, BasicDecode) { | 140 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, BasicDecode) { |
| 141 scoped_refptr<content::MessageLoopRunner> runner = | 141 scoped_refptr<content::MessageLoopRunner> runner = |
| 142 new content::MessageLoopRunner; | 142 new content::MessageLoopRunner; |
| 143 TestImageRequest test_request(runner->QuitClosure()); | 143 TestImageRequest test_request(runner->QuitClosure()); |
| 144 ImageDecoder::Start(&test_request, GetValidPngString()); | 144 ImageDecoder::Start(&test_request, GetValidPngString()); |
| 145 runner->Run(); | 145 runner->Run(); |
| 146 EXPECT_TRUE(test_request.decode_succeeded()); | 146 EXPECT_TRUE(test_request.decode_succeeded()); |
| 147 } | 147 } |
| 148 | 148 |
| 149 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, BasicDecodeFile) { |
| 150 scoped_refptr<content::MessageLoopRunner> runner = |
| 151 new content::MessageLoopRunner; |
| 152 TestImageRequest test_request(runner->QuitClosure()); |
| 153 ImageDecoder::StartByFilePath( |
| 154 &test_request, |
| 155 base::FilePath( |
| 156 FILE_PATH_LITERAL("chrome/test/data/image_decoding/droids.jpg"))); |
| 157 runner->Run(); |
| 158 EXPECT_TRUE(test_request.decode_succeeded()); |
| 159 } |
| 160 |
| 149 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, StartAndDestroy) { | 161 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, StartAndDestroy) { |
| 150 scoped_refptr<content::MessageLoopRunner> runner = | 162 scoped_refptr<content::MessageLoopRunner> runner = |
| 151 new content::MessageLoopRunner; | 163 new content::MessageLoopRunner; |
| 152 scoped_ptr<TestImageRequest> test_request( | 164 scoped_ptr<TestImageRequest> test_request( |
| 153 new TestImageRequest(runner->QuitClosure())); | 165 new TestImageRequest(runner->QuitClosure())); |
| 154 ImageDecoder::Start(test_request.get(), std::string()); | 166 ImageDecoder::Start(test_request.get(), std::string()); |
| 155 test_request.reset(); | 167 test_request.reset(); |
| 156 runner->Run(); | 168 runner->Run(); |
| 157 } | 169 } |
| 158 | 170 |
| 159 // Killing the utility process counts as a crash. Thus the request fails. | 171 // Killing the utility process counts as a crash. Thus the request fails. |
| 160 // If ImageDecoder did not handle the crash properly, the request never finishes | 172 // If ImageDecoder did not handle the crash properly, the request never finishes |
| 161 // and this test would hang. | 173 // and this test would hang. |
| 162 // Note: This test is inherently racy because KillProcessObserver lives on the | 174 // Note: This test is inherently racy because KillProcessObserver lives on the |
| 163 // UI thread but ImageDecoder does its work mainly on the IO thread. So the test | 175 // UI thread but ImageDecoder does its work mainly on the IO thread. So the test |
| 164 // checks for both possible valid outcomes. | 176 // checks for both possible valid outcomes. |
| 165 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, StartAndKillProcess) { | 177 IN_PROC_BROWSER_TEST_F(ImageDecoderBrowserTest, StartAndKillProcess) { |
| 166 KillProcessObserver observer; | 178 KillProcessObserver observer; |
| 167 scoped_refptr<content::MessageLoopRunner> runner = | 179 scoped_refptr<content::MessageLoopRunner> runner = |
| 168 new content::MessageLoopRunner; | 180 new content::MessageLoopRunner; |
| 169 TestImageRequest test_request(runner->QuitClosure()); | 181 TestImageRequest test_request(runner->QuitClosure()); |
| 170 ImageDecoder::Start(&test_request, GetValidPngString()); | 182 ImageDecoder::Start(&test_request, GetValidPngString()); |
| 171 runner->Run(); | 183 runner->Run(); |
| 172 if (!test_request.decode_succeeded()) { | 184 if (!test_request.decode_succeeded()) { |
| 173 // The UI thread won the race. Make sure the utility process did get killed. | 185 // The UI thread won the race. Make sure the utility process did get killed. |
| 174 EXPECT_TRUE(observer.did_kill()); | 186 EXPECT_TRUE(observer.did_kill()); |
| 175 } | 187 } |
| 176 // Else the IO thread won the race and the image got decoded. Oh well. | 188 // Else the IO thread won the race and the image got decoded. Oh well. |
| 177 } | 189 } |
| OLD | NEW |