Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / extensions / api / file_handlers / mime_util_unittest.cc
blobbc34cc217d05e40260c2a0789f335dfcef45c655
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
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/file_handlers/mime_util.h"
7 #include <string>
8 #include <vector>
10 #include "base/files/file_path.h"
11 #include "base/files/file_util.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/run_loop.h"
14 #include "chrome/test/base/testing_profile.h"
15 #include "content/public/browser/browser_thread.h"
16 #include "content/public/test/test_browser_thread_bundle.h"
17 #include "content/public/test/test_file_system_context.h"
18 #include "content/public/test/test_utils.h"
19 #include "testing/gtest/include/gtest/gtest.h"
21 namespace extensions {
22 namespace app_file_handler_util {
23 namespace {
25 const char kOrigin[] = "chrome-extension://cmalghjoncmjoeakimpfhojhpgemgaje";
26 const char kJPEGExtensionFilePath[] = "/fake/path/foo.jpg";
27 const char kJPEGExtensionUpperCaseFilePath[] = "/fake/path/FOO.JPG";
29 // Saves the returned mime type to a variable.
30 void OnMimeTypeResult(std::string* output, const std::string& mime_type) {
31 *output = mime_type;
34 // Saves returned mime types to a vector.
35 void OnMimeTypesCollected(std::vector<std::string>* output,
36 scoped_ptr<std::vector<std::string> > mime_types) {
37 *output = *mime_types;
40 // Creates a native local file system URL for a local path.
41 storage::FileSystemURL CreateNativeLocalFileSystemURL(
42 storage::FileSystemContext* context,
43 const base::FilePath local_path) {
44 return context->CreateCrackedFileSystemURL(
45 GURL(kOrigin), storage::kFileSystemTypeNativeLocal, local_path);
48 } // namespace
50 class FileHandlersMimeUtilTest : public testing::Test {
51 protected:
52 FileHandlersMimeUtilTest() {}
53 ~FileHandlersMimeUtilTest() override {}
55 void SetUp() override {
56 ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
57 file_system_context_ =
58 content::CreateFileSystemContextForTesting(NULL, data_dir_.path());
60 EXPECT_TRUE(base::CreateTemporaryFile(&html_mime_file_path_));
61 const std::string kSampleContent = "<html><body></body></html>";
62 EXPECT_TRUE(base::WriteFile(
63 html_mime_file_path_, kSampleContent.c_str(), kSampleContent.size()));
66 content::TestBrowserThreadBundle thread_bundle_;
67 TestingProfile profile_;
68 scoped_refptr<storage::FileSystemContext> file_system_context_;
69 base::ScopedTempDir data_dir_;
70 base::FilePath html_mime_file_path_;
73 TEST_F(FileHandlersMimeUtilTest, GetMimeTypeForLocalPath) {
75 std::string result;
76 GetMimeTypeForLocalPath(
77 &profile_,
78 base::FilePath::FromUTF8Unsafe(kJPEGExtensionFilePath),
79 base::Bind(&OnMimeTypeResult, &result));
80 content::RunAllBlockingPoolTasksUntilIdle();
81 EXPECT_EQ("image/jpeg", result);
85 std::string result;
86 GetMimeTypeForLocalPath(
87 &profile_,
88 base::FilePath::FromUTF8Unsafe(kJPEGExtensionUpperCaseFilePath),
89 base::Bind(&OnMimeTypeResult, &result));
90 content::RunAllBlockingPoolTasksUntilIdle();
91 EXPECT_EQ("image/jpeg", result);
95 std::string result;
96 GetMimeTypeForLocalPath(&profile_,
97 html_mime_file_path_,
98 base::Bind(&OnMimeTypeResult, &result));
99 content::RunAllBlockingPoolTasksUntilIdle();
100 EXPECT_EQ("text/html", result);
104 TEST_F(FileHandlersMimeUtilTest, MimeTypeCollector_ForURLs) {
105 MimeTypeCollector collector(&profile_);
107 std::vector<storage::FileSystemURL> urls;
108 urls.push_back(CreateNativeLocalFileSystemURL(
109 file_system_context_.get(),
110 base::FilePath::FromUTF8Unsafe(kJPEGExtensionFilePath)));
111 urls.push_back(CreateNativeLocalFileSystemURL(
112 file_system_context_.get(),
113 base::FilePath::FromUTF8Unsafe(kJPEGExtensionUpperCaseFilePath)));
114 urls.push_back(CreateNativeLocalFileSystemURL(file_system_context_.get(),
115 html_mime_file_path_));
117 std::vector<std::string> result;
118 collector.CollectForURLs(urls, base::Bind(&OnMimeTypesCollected, &result));
119 content::RunAllBlockingPoolTasksUntilIdle();
121 ASSERT_EQ(3u, result.size());
122 EXPECT_EQ("image/jpeg", result[0]);
123 EXPECT_EQ("image/jpeg", result[1]);
124 EXPECT_EQ("text/html", result[2]);
127 TEST_F(FileHandlersMimeUtilTest, MimeTypeCollector_ForLocalPaths) {
128 MimeTypeCollector collector(&profile_);
130 std::vector<base::FilePath> local_paths;
131 local_paths.push_back(base::FilePath::FromUTF8Unsafe(kJPEGExtensionFilePath));
132 local_paths.push_back(
133 base::FilePath::FromUTF8Unsafe(kJPEGExtensionUpperCaseFilePath));
134 local_paths.push_back(html_mime_file_path_);
136 std::vector<std::string> result;
137 collector.CollectForLocalPaths(local_paths,
138 base::Bind(&OnMimeTypesCollected, &result));
139 content::RunAllBlockingPoolTasksUntilIdle();
141 ASSERT_EQ(3u, result.size());
142 EXPECT_EQ("image/jpeg", result[0]);
143 EXPECT_EQ("image/jpeg", result[1]);
144 EXPECT_EQ("text/html", result[2]);
147 } // namespace app_file_handler_util
148 } // namespace extensions