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

Side by Side Diff: chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc

Issue 20190002: Add a copy or move validator to that can handle support audio and video files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Comments Created 7 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/media_galleries/fileapi/media_file_validator_factory.cc » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/message_loop/message_loop_proxy.h" 11 #include "base/message_loop/message_loop_proxy.h"
12 #include "base/path_service.h"
12 #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" 13 #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h"
13 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/in_process_browser_test.h"
14 #include "content/public/test/browser_test.h" 15 #include "content/public/test/browser_test.h"
15 #include "content/public/test/test_utils.h" 16 #include "content/public/test/test_utils.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webkit/browser/fileapi/copy_or_move_file_validator.h" 18 #include "webkit/browser/fileapi/copy_or_move_file_validator.h"
18 #include "webkit/browser/fileapi/file_system_backend.h" 19 #include "webkit/browser/fileapi/file_system_backend.h"
19 #include "webkit/browser/fileapi/file_system_context.h" 20 #include "webkit/browser/fileapi/file_system_context.h"
20 #include "webkit/browser/fileapi/file_system_operation_runner.h" 21 #include "webkit/browser/fileapi/file_system_operation_runner.h"
21 #include "webkit/browser/fileapi/file_system_url.h" 22 #include "webkit/browser/fileapi/file_system_url.h"
22 #include "webkit/browser/fileapi/isolated_context.h" 23 #include "webkit/browser/fileapi/isolated_context.h"
23 #include "webkit/browser/fileapi/mock_file_system_context.h" 24 #include "webkit/browser/fileapi/mock_file_system_context.h"
24 #include "webkit/browser/fileapi/test_file_system_backend.h" 25 #include "webkit/browser/fileapi/test_file_system_backend.h"
25 #include "webkit/common/fileapi/file_system_types.h" 26 #include "webkit/common/fileapi/file_system_types.h"
26 27
27 namespace { 28 namespace {
28 29
29 const char kOrigin[] = "http://foo"; 30 const char kOrigin[] = "http://foo";
30 31
31 const char kValidImage[] = "RIFF0\0\0\0WEBPVP8 $\0\0\0\xB2\x02\0\x9D\x01\x2A" 32 const char kValidImage[] = "RIFF0\0\0\0WEBPVP8 $\0\0\0\xB2\x02\0\x9D\x01\x2A"
32 "\x01\0\x01\0\x2F\x9D\xCE\xE7s\xA8((((\x01\x9CK(\0" 33 "\x01\0\x01\0\x2F\x9D\xCE\xE7s\xA8((((\x01\x9CK(\0"
33 "\x05\xCE\xB3l\0\0\xFE\xD8\x80\0\0"; 34 "\x05\xCE\xB3l\0\0\xFE\xD8\x80\0\0";
34 35
35 const char kInvalidImage[] = "Not an image"; 36 const char kInvalidMediaFile[] = "Not a media file";
36 37
37 const int64 kNoFileSize = -1; 38 const int64 kNoFileSize = -1;
38 39
39 void HandleCheckFileResult(int64 expected_size, 40 void HandleCheckFileResult(int64 expected_size,
40 const base::Callback<void(bool success)>& callback, 41 const base::Callback<void(bool success)>& callback,
41 base::PlatformFileError result, 42 base::PlatformFileError result,
42 const base::PlatformFileInfo& file_info) { 43 const base::PlatformFileInfo& file_info) {
43 if (result == base::PLATFORM_FILE_OK) { 44 if (result == base::PLATFORM_FILE_OK) {
44 if (!file_info.is_directory && expected_size != kNoFileSize && 45 if (!file_info.is_directory && expected_size != kNoFileSize &&
45 file_info.size == expected_size) { 46 file_info.size == expected_size) {
46 callback.Run(true); 47 callback.Run(true);
47 return; 48 return;
48 } 49 }
49 } else { 50 } else {
50 if (expected_size == kNoFileSize) { 51 if (expected_size == kNoFileSize) {
51 callback.Run(true); 52 callback.Run(true);
52 return; 53 return;
53 } 54 }
54 } 55 }
55 callback.Run(false); 56 callback.Run(false);
56 } 57 }
57 58
59 base::FilePath GetMediaTestDir() {
60 base::FilePath test_file;
61 if (!PathService::Get(base::DIR_SOURCE_ROOT, &test_file))
62 return base::FilePath();
63 return test_file.AppendASCII("media").AppendASCII("test").AppendASCII("data");
64 }
65
58 } // namespace 66 } // namespace
59 67
60 namespace chrome { 68 namespace chrome {
61 69
62 class MediaFileValidatorTest : public InProcessBrowserTest { 70 class MediaFileValidatorTest : public InProcessBrowserTest {
63 public: 71 public:
64 MediaFileValidatorTest() : test_file_size_(0) {} 72 MediaFileValidatorTest() : test_file_size_(0) {}
65 73
66 virtual ~MediaFileValidatorTest() {} 74 virtual ~MediaFileValidatorTest() {}
67 75
68 // Write |content| into |filename| in a test file system and try to move 76 // Write |content| into |filename| in a test file system and try to move
69 // it into a media file system. The result is compared to |expected_result|. 77 // it into a media file system. The result is compared to |expected_result|.
70 void MoveTest(const std::string& filename, const std::string& content, 78 void MoveTest(const std::string& filename, const std::string& content,
71 bool expected_result) { 79 bool expected_result) {
72 content::BrowserThread::PostTask( 80 content::BrowserThread::PostTask(
73 content::BrowserThread::FILE, 81 content::BrowserThread::FILE,
74 FROM_HERE, 82 FROM_HERE,
75 base::Bind(&MediaFileValidatorTest::SetupOnFileThread, 83 base::Bind(&MediaFileValidatorTest::SetupOnFileThread,
76 base::Unretained(this), filename, content, expected_result)); 84 base::Unretained(this), filename, content, expected_result));
77 loop_runner_ = new content::MessageLoopRunner; 85 loop_runner_ = new content::MessageLoopRunner;
78 loop_runner_->Run(); 86 loop_runner_->Run();
79 } 87 }
80 88
89 // Write |source| into |filename| in a test file system and try to move it
90 // into a media file system. The result is compared to |expected_result|.
91 void MoveTestFromFile(const std::string& filename,
92 const base::FilePath& source, bool expected_result) {
93 content::BrowserThread::PostTask(
94 content::BrowserThread::FILE,
95 FROM_HERE,
96 base::Bind(&MediaFileValidatorTest::SetupFromFileOnFileThread,
97 base::Unretained(this), filename, source, expected_result));
98 loop_runner_ = new content::MessageLoopRunner;
99 loop_runner_->Run();
100 }
101
81 private: 102 private:
82 // Create the test files, filesystem objects, etc. 103 // Create the test files, filesystem objects, etc.
83 void SetupOnFileThread(const std::string& filename, 104 void SetupOnFileThread(const std::string& filename,
84 const std::string& content, 105 const std::string& content,
85 bool expected_result) { 106 bool expected_result) {
86 ASSERT_TRUE(base_dir_.CreateUniqueTempDir()); 107 ASSERT_TRUE(base_dir_.CreateUniqueTempDir());
87 base::FilePath base = base_dir_.path(); 108 base::FilePath base = base_dir_.path();
88 base::FilePath src_path = base.AppendASCII("src_fs"); 109 base::FilePath src_path = base.AppendASCII("src_fs");
89 ASSERT_TRUE(file_util::CreateDirectory(src_path)); 110 ASSERT_TRUE(file_util::CreateDirectory(src_path));
90 111
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 143
123 content::BrowserThread::PostTask( 144 content::BrowserThread::PostTask(
124 content::BrowserThread::IO, 145 content::BrowserThread::IO,
125 FROM_HERE, 146 FROM_HERE,
126 base::Bind(&MediaFileValidatorTest::CheckFiles, 147 base::Bind(&MediaFileValidatorTest::CheckFiles,
127 base::Unretained(this), true, 148 base::Unretained(this), true,
128 base::Bind(&MediaFileValidatorTest::OnTestFilesReady, 149 base::Bind(&MediaFileValidatorTest::OnTestFilesReady,
129 base::Unretained(this), expected_result))); 150 base::Unretained(this), expected_result)));
130 } 151 }
131 152
153 void SetupFromFileOnFileThread(const std::string& filename,
154 const base::FilePath& source,
155 bool expected_result) {
156 std::string content;
157 ASSERT_TRUE(file_util::ReadFileToString(source, &content));
158 SetupOnFileThread(filename, content, expected_result);
159 }
160
132 // Check that exactly one of |move_src_| and |move_dest_| exists. 161 // Check that exactly one of |move_src_| and |move_dest_| exists.
133 // |src_expected| indicates which one should exist. When complete, 162 // |src_expected| indicates which one should exist. When complete,
134 // |callback| is called with success/failure. 163 // |callback| is called with success/failure.
135 void CheckFiles(bool src_expected, 164 void CheckFiles(bool src_expected,
136 const base::Callback<void(bool success)>& callback) { 165 const base::Callback<void(bool success)>& callback) {
137 CheckFile(move_src_, src_expected ? test_file_size_ : kNoFileSize, 166 CheckFile(move_src_, src_expected ? test_file_size_ : kNoFileSize,
138 base::Bind(&MediaFileValidatorTest::OnCheckFilesFirstResult, 167 base::Bind(&MediaFileValidatorTest::OnCheckFilesFirstResult,
139 base::Unretained(this), !src_expected, callback)); 168 base::Unretained(this), !src_expected, callback));
140 } 169 }
141 170
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 int test_file_size_; 234 int test_file_size_;
206 235
207 fileapi::FileSystemURL move_src_; 236 fileapi::FileSystemURL move_src_;
208 fileapi::FileSystemURL move_dest_; 237 fileapi::FileSystemURL move_dest_;
209 238
210 scoped_refptr<content::MessageLoopRunner> loop_runner_; 239 scoped_refptr<content::MessageLoopRunner> loop_runner_;
211 240
212 DISALLOW_COPY_AND_ASSIGN(MediaFileValidatorTest); 241 DISALLOW_COPY_AND_ASSIGN(MediaFileValidatorTest);
213 }; 242 };
214 243
244 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, UnsupportedExtension) {
245 MoveTest("a.txt", std::string(kValidImage, arraysize(kValidImage)), false);
246 }
247
215 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidImage) { 248 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidImage) {
216 MoveTest("a.webp", std::string(kValidImage, arraysize(kValidImage)), true); 249 MoveTest("a.webp", std::string(kValidImage, arraysize(kValidImage)), true);
217 } 250 }
218 251
219 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidImage) { 252 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidImage) {
220 MoveTest("a.webp", std::string(kInvalidImage, arraysize(kInvalidImage)), 253 MoveTest("a.webp", std::string(kInvalidMediaFile,
221 false); 254 arraysize(kInvalidMediaFile)), false);
222 } 255 }
223 256
224 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, UnsupportedExtension) { 257 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidAudio) {
225 MoveTest("a.txt", std::string(kValidImage, arraysize(kValidImage)), false); 258 MoveTest("a.ogg", std::string(kInvalidMediaFile,
259 arraysize(kInvalidMediaFile)), false);
260 }
261
262 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidAudio) {
263 base::FilePath test_file = GetMediaTestDir();
264 ASSERT_FALSE(test_file.empty());
265 test_file = test_file.AppendASCII("sfx.ogg");
266 MoveTestFromFile("sfx.ogg", test_file, true);
267 }
268
269 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidVideo) {
270 base::FilePath test_file = GetMediaTestDir();
271 ASSERT_FALSE(test_file.empty());
272 test_file = test_file.AppendASCII("no_streams.webm");
273 MoveTestFromFile("no_streams.webm", test_file, false);
274 }
275
276 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidVideo) {
277 base::FilePath test_file = GetMediaTestDir();
278 ASSERT_FALSE(test_file.empty());
279 test_file = test_file.AppendASCII("bear-320x240-multitrack.webm");
280 MoveTestFromFile("multitrack.webm", test_file, true);
226 } 281 }
227 282
228 } // namespace chrome 283 } // namespace chrome
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/media_galleries/fileapi/media_file_validator_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698