blob: 626e895ffea8408448b7b1f8c37814e9696d6db1 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/file_handlers/mime_util.h"
#include <string>
#include <vector>
#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/memory/scoped_ptr.h"
#include "base/run_loop.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_file_system_context.h"
#include "content/public/test/test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
namespace app_file_handler_util {
namespace {
const char kOrigin[] = "chrome-extension://cmalghjoncmjoeakimpfhojhpgemgaje";
const char kJPEGExtensionFilePath[] = "/fake/path/foo.jpg";
const char kJPEGExtensionUpperCaseFilePath[] = "/fake/path/FOO.JPG";
// Saves the returned mime type to a variable.
void OnMimeTypeResult(std::string* output, const std::string& mime_type) {
*output = mime_type;
}
// Saves returned mime types to a vector.
void OnMimeTypesCollected(std::vector<std::string>* output,
scoped_ptr<std::vector<std::string> > mime_types) {
*output = *mime_types;
}
// Creates a native local file system URL for a local path.
fileapi::FileSystemURL CreateNativeLocalFileSystemURL(
fileapi::FileSystemContext* context,
const base::FilePath local_path) {
return context->CreateCrackedFileSystemURL(
GURL(kOrigin), fileapi::kFileSystemTypeNativeLocal, local_path);
}
} // namespace
class FileHandlersMimeUtilTest : public testing::Test {
protected:
FileHandlersMimeUtilTest() {}
virtual ~FileHandlersMimeUtilTest() {}
virtual void SetUp() OVERRIDE {
ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
file_system_context_ =
content::CreateFileSystemContextForTesting(NULL, data_dir_.path());
EXPECT_TRUE(base::CreateTemporaryFile(&html_mime_file_path_));
const std::string kSampleContent = "<html><body></body></html>";
EXPECT_TRUE(base::WriteFile(
html_mime_file_path_, kSampleContent.c_str(), kSampleContent.size()));
}
content::TestBrowserThreadBundle thread_bundle_;
TestingProfile profile_;
scoped_refptr<fileapi::FileSystemContext> file_system_context_;
base::ScopedTempDir data_dir_;
base::FilePath html_mime_file_path_;
};
TEST_F(FileHandlersMimeUtilTest, GetMimeTypeForLocalPath) {
{
std::string result;
GetMimeTypeForLocalPath(
&profile_,
base::FilePath::FromUTF8Unsafe(kJPEGExtensionFilePath),
base::Bind(&OnMimeTypeResult, &result));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ("image/jpeg", result);
}
{
std::string result;
GetMimeTypeForLocalPath(
&profile_,
base::FilePath::FromUTF8Unsafe(kJPEGExtensionUpperCaseFilePath),
base::Bind(&OnMimeTypeResult, &result));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ("image/jpeg", result);
}
{
std::string result;
GetMimeTypeForLocalPath(&profile_,
html_mime_file_path_,
base::Bind(&OnMimeTypeResult, &result));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ("text/html", result);
}
}
TEST_F(FileHandlersMimeUtilTest, MimeTypeCollector_ForURLs) {
MimeTypeCollector collector(&profile_);
std::vector<fileapi::FileSystemURL> urls;
urls.push_back(CreateNativeLocalFileSystemURL(
file_system_context_,
base::FilePath::FromUTF8Unsafe(kJPEGExtensionFilePath)));
urls.push_back(CreateNativeLocalFileSystemURL(
file_system_context_,
base::FilePath::FromUTF8Unsafe(kJPEGExtensionUpperCaseFilePath)));
urls.push_back(CreateNativeLocalFileSystemURL(file_system_context_,
html_mime_file_path_));
std::vector<std::string> result;
collector.CollectForURLs(urls, base::Bind(&OnMimeTypesCollected, &result));
content::RunAllBlockingPoolTasksUntilIdle();
ASSERT_EQ(3u, result.size());
EXPECT_EQ("image/jpeg", result[0]);
EXPECT_EQ("image/jpeg", result[1]);
EXPECT_EQ("text/html", result[2]);
}
TEST_F(FileHandlersMimeUtilTest, MimeTypeCollector_ForLocalPaths) {
MimeTypeCollector collector(&profile_);
std::vector<base::FilePath> local_paths;
local_paths.push_back(base::FilePath::FromUTF8Unsafe(kJPEGExtensionFilePath));
local_paths.push_back(
base::FilePath::FromUTF8Unsafe(kJPEGExtensionUpperCaseFilePath));
local_paths.push_back(html_mime_file_path_);
std::vector<std::string> result;
collector.CollectForLocalPaths(local_paths,
base::Bind(&OnMimeTypesCollected, &result));
content::RunAllBlockingPoolTasksUntilIdle();
ASSERT_EQ(3u, result.size());
EXPECT_EQ("image/jpeg", result[0]);
EXPECT_EQ("image/jpeg", result[1]);
EXPECT_EQ("text/html", result[2]);
}
} // namespace app_file_handler_util
} // namespace extensions