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

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: Fix test file name 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
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 test_file = test_file.Append(FILE_PATH_LITERAL("media"));
Lei Zhang 2013/08/08 00:08:02 test_file = test_file.AppendASCII("media")
vandebo (ex-Chrome) 2013/08/08 17:34:01 Done.
63 test_file = test_file.Append(FILE_PATH_LITERAL("test"));
64 test_file = test_file.Append(FILE_PATH_LITERAL("data"));
65 }
66 return test_file;
67 }
68
58 } // namespace 69 } // namespace
59 70
60 namespace chrome { 71 namespace chrome {
61 72
62 class MediaFileValidatorTest : public InProcessBrowserTest { 73 class MediaFileValidatorTest : public InProcessBrowserTest {
63 public: 74 public:
64 MediaFileValidatorTest() : test_file_size_(0) {} 75 MediaFileValidatorTest() : test_file_size_(0) {}
65 76
66 virtual ~MediaFileValidatorTest() {} 77 virtual ~MediaFileValidatorTest() {}
67 78
68 // Write |content| into |filename| in a test file system and try to move 79 // 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|. 80 // it into a media file system. The result is compared to |expected_result|.
70 void MoveTest(const std::string& filename, const std::string& content, 81 void MoveTest(const std::string& filename, const std::string& content,
71 bool expected_result) { 82 bool expected_result) {
72 content::BrowserThread::PostTask( 83 content::BrowserThread::PostTask(
73 content::BrowserThread::FILE, 84 content::BrowserThread::FILE,
74 FROM_HERE, 85 FROM_HERE,
75 base::Bind(&MediaFileValidatorTest::SetupOnFileThread, 86 base::Bind(&MediaFileValidatorTest::SetupOnFileThread,
76 base::Unretained(this), filename, content, expected_result)); 87 base::Unretained(this), filename, content, expected_result));
77 loop_runner_ = new content::MessageLoopRunner; 88 loop_runner_ = new content::MessageLoopRunner;
78 loop_runner_->Run(); 89 loop_runner_->Run();
79 } 90 }
80 91
92 void MoveTestFromFile(const std::string& filename,
Lei Zhang 2013/08/08 00:08:02 Add a comment.
vandebo (ex-Chrome) 2013/08/08 17:34:01 Done.
93 const base::FilePath& source, bool expected_result) {
94 content::BrowserThread::PostTask(
95 content::BrowserThread::FILE,
96 FROM_HERE,
97 base::Bind(&MediaFileValidatorTest::SetupFromFileOnFileThread,
98 base::Unretained(this), filename, source, expected_result));
99 loop_runner_ = new content::MessageLoopRunner;
100 loop_runner_->Run();
101 }
102
81 private: 103 private:
82 // Create the test files, filesystem objects, etc. 104 // Create the test files, filesystem objects, etc.
83 void SetupOnFileThread(const std::string& filename, 105 void SetupOnFileThread(const std::string& filename,
84 const std::string& content, 106 const std::string& content,
85 bool expected_result) { 107 bool expected_result) {
86 ASSERT_TRUE(base_dir_.CreateUniqueTempDir()); 108 ASSERT_TRUE(base_dir_.CreateUniqueTempDir());
87 base::FilePath base = base_dir_.path(); 109 base::FilePath base = base_dir_.path();
88 base::FilePath src_path = base.AppendASCII("src_fs"); 110 base::FilePath src_path = base.AppendASCII("src_fs");
89 ASSERT_TRUE(file_util::CreateDirectory(src_path)); 111 ASSERT_TRUE(file_util::CreateDirectory(src_path));
90 112
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 144
123 content::BrowserThread::PostTask( 145 content::BrowserThread::PostTask(
124 content::BrowserThread::IO, 146 content::BrowserThread::IO,
125 FROM_HERE, 147 FROM_HERE,
126 base::Bind(&MediaFileValidatorTest::CheckFiles, 148 base::Bind(&MediaFileValidatorTest::CheckFiles,
127 base::Unretained(this), true, 149 base::Unretained(this), true,
128 base::Bind(&MediaFileValidatorTest::OnTestFilesReady, 150 base::Bind(&MediaFileValidatorTest::OnTestFilesReady,
129 base::Unretained(this), expected_result))); 151 base::Unretained(this), expected_result)));
130 } 152 }
131 153
154 void SetupFromFileOnFileThread(const std::string& filename,
155 const base::FilePath& source,
156 bool expected_result) {
157 std::string content;
158 ASSERT_TRUE(file_util::ReadFileToString(source, &content));
159 SetupOnFileThread(filename, content, expected_result);
160 }
161
132 // Check that exactly one of |move_src_| and |move_dest_| exists. 162 // Check that exactly one of |move_src_| and |move_dest_| exists.
133 // |src_expected| indicates which one should exist. When complete, 163 // |src_expected| indicates which one should exist. When complete,
134 // |callback| is called with success/failure. 164 // |callback| is called with success/failure.
135 void CheckFiles(bool src_expected, 165 void CheckFiles(bool src_expected,
136 const base::Callback<void(bool success)>& callback) { 166 const base::Callback<void(bool success)>& callback) {
137 CheckFile(move_src_, src_expected ? test_file_size_ : kNoFileSize, 167 CheckFile(move_src_, src_expected ? test_file_size_ : kNoFileSize,
138 base::Bind(&MediaFileValidatorTest::OnCheckFilesFirstResult, 168 base::Bind(&MediaFileValidatorTest::OnCheckFilesFirstResult,
139 base::Unretained(this), !src_expected, callback)); 169 base::Unretained(this), !src_expected, callback));
140 } 170 }
141 171
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 int test_file_size_; 235 int test_file_size_;
206 236
207 fileapi::FileSystemURL move_src_; 237 fileapi::FileSystemURL move_src_;
208 fileapi::FileSystemURL move_dest_; 238 fileapi::FileSystemURL move_dest_;
209 239
210 scoped_refptr<content::MessageLoopRunner> loop_runner_; 240 scoped_refptr<content::MessageLoopRunner> loop_runner_;
211 241
212 DISALLOW_COPY_AND_ASSIGN(MediaFileValidatorTest); 242 DISALLOW_COPY_AND_ASSIGN(MediaFileValidatorTest);
213 }; 243 };
214 244
245 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, UnsupportedExtension) {
246 MoveTest("a.txt", std::string(kValidImage, arraysize(kValidImage)), false);
247 }
248
215 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidImage) { 249 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidImage) {
216 MoveTest("a.webp", std::string(kValidImage, arraysize(kValidImage)), true); 250 MoveTest("a.webp", std::string(kValidImage, arraysize(kValidImage)), true);
217 } 251 }
218 252
219 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidImage) { 253 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidImage) {
220 MoveTest("a.webp", std::string(kInvalidImage, arraysize(kInvalidImage)), 254 MoveTest("a.webp", std::string(kInvalidMediaFile,
221 false); 255 arraysize(kInvalidMediaFile)), false);
222 } 256 }
223 257
224 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, UnsupportedExtension) { 258 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidAudio) {
225 MoveTest("a.txt", std::string(kValidImage, arraysize(kValidImage)), false); 259 MoveTest("a.ogg", std::string(kInvalidMediaFile,
260 arraysize(kInvalidMediaFile)), false);
261 }
262
263 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidAudio) {
264 base::FilePath test_file = GetMediaTestDir().Append(
Lei Zhang 2013/08/08 00:08:02 AppendASCII() is shorter than APPEND(FPL()).
vandebo (ex-Chrome) 2013/08/08 17:34:01 Done.
265 FILE_PATH_LITERAL("sfx.ogg"));
266 ASSERT_FALSE(test_file.empty());
Lei Zhang 2013/08/08 00:08:02 This will never fail because you always do Append(
vandebo (ex-Chrome) 2013/08/08 17:34:01 Done.
267 MoveTestFromFile("sfx.ogg", test_file, true);
268 }
269
270 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, InvalidVideo) {
271 base::FilePath test_file = GetMediaTestDir().Append(
272 FILE_PATH_LITERAL("no_streams.webm"));
273 ASSERT_FALSE(test_file.empty());
274 MoveTestFromFile("no_streams.webm", test_file, false);
275 }
276
277 IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, ValidVideo) {
278 base::FilePath test_file = GetMediaTestDir().Append(
279 FILE_PATH_LITERAL("bear-320x240-multitrack.webm"));
280 ASSERT_FALSE(test_file.empty());
281 MoveTestFromFile("multitrack.webm", test_file, true);
226 } 282 }
227 283
228 } // namespace chrome 284 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698