| Index: chrome/browser/browsing_data_file_system_helper_unittest.cc
|
| diff --git a/chrome/browser/browsing_data_file_system_helper_unittest.cc b/chrome/browser/browsing_data_file_system_helper_unittest.cc
|
| index 06cdca619c29910440e6c99f5556be17ddf1a083..cdea1095aa36174307a8a1061c14babd0e8bb7e9 100644
|
| --- a/chrome/browser/browsing_data_file_system_helper_unittest.cc
|
| +++ b/chrome/browser/browsing_data_file_system_helper_unittest.cc
|
| @@ -8,24 +8,246 @@
|
| #include "chrome/browser/browsing_data_file_system_helper.h"
|
| #include "chrome/test/testing_browser_process_test.h"
|
| #include "chrome/test/testing_profile.h"
|
| +#include "content/browser/browser_thread.h"
|
| +#include "webkit/fileapi/file_system_context.h"
|
| +#include "webkit/fileapi/file_system_path_manager.h"
|
| +#include "webkit/fileapi/file_system_types.h"
|
| +#include "webkit/fileapi/file_system_usage_cache.h"
|
| +#include "webkit/fileapi/sandbox_mount_point_provider.h"
|
|
|
| namespace {
|
|
|
| -typedef TestingBrowserProcessTest CannedBrowsingDataFileSystemHelperTest;
|
| +const fileapi::FileSystemType kTemporary = fileapi::kFileSystemTypeTemporary;
|
| +const fileapi::FileSystemType kPersistent = fileapi::kFileSystemTypePersistent;
|
|
|
| -TEST_F(CannedBrowsingDataFileSystemHelperTest, Empty) {
|
| - TestingProfile profile;
|
| +const char kTestOrigin1[] = "http://host1:1/";
|
| +const char kTestOrigin2[] = "http://host2:1/";
|
| +const char kTestOrigin3[] = "http://host3:1/";
|
|
|
| - const GURL origin("http://host1:1/");
|
| +const GURL kOrigin1(kTestOrigin1);
|
| +const GURL kOrigin2(kTestOrigin2);
|
| +const GURL kOrigin3(kTestOrigin3);
|
|
|
| - scoped_refptr<CannedBrowsingDataFileSystemHelper> helper(
|
| - new CannedBrowsingDataFileSystemHelper(&profile));
|
| +const int kEmptyFileSystemSize = fileapi::FileSystemUsageCache::kUsageFileSize;
|
|
|
| - ASSERT_TRUE(helper->empty());
|
| - helper->AddFileSystem(origin, fileapi::kFileSystemTypeTemporary, 0);
|
| - ASSERT_FALSE(helper->empty());
|
| - helper->Reset();
|
| - ASSERT_TRUE(helper->empty());
|
| +typedef std::vector<BrowsingDataFileSystemHelper::FileSystemInfo>
|
| + FileSystemInfoVector;
|
| +typedef scoped_ptr<FileSystemInfoVector> ScopedFileSystemInfoVector;
|
| +
|
| +class BrowsingDataFileSystemHelperTest : public testing::Test {
|
| + public:
|
| + BrowsingDataFileSystemHelperTest()
|
| + : helper_(BrowsingDataFileSystemHelper::Create(&profile_)),
|
| + canned_helper_(new CannedBrowsingDataFileSystemHelper(&profile_)),
|
| + ui_thread_(BrowserThread::UI, &message_loop_),
|
| + file_thread_(BrowserThread::FILE, &message_loop_),
|
| + io_thread_(BrowserThread::IO, &message_loop_) {
|
| + }
|
| + virtual ~BrowsingDataFileSystemHelperTest() {}
|
| +
|
| + TestingProfile* GetProfile() {
|
| + return &profile_;
|
| + }
|
| +
|
| + void FindFileSystemPathCallback(bool success,
|
| + const FilePath& path,
|
| + const std::string& name) {
|
| + found_file_system_ = success;
|
| + Notify();
|
| + }
|
| +
|
| + bool FileSystemContainsOriginAndType(const GURL& origin,
|
| + fileapi::FileSystemType type) {
|
| + sandbox_->ValidateFileSystemRootAndGetURL(
|
| + origin, type, false, NewCallback(this,
|
| + &BrowsingDataFileSystemHelperTest::FindFileSystemPathCallback));
|
| + BlockUntilNotified();
|
| + return found_file_system_;
|
| + }
|
| +
|
| + void CallbackStartFetching(
|
| + const std::vector<BrowsingDataFileSystemHelper::FileSystemInfo>&
|
| + file_system_info_list) {
|
| + file_system_info_list_.reset(
|
| + new std::vector<BrowsingDataFileSystemHelper::FileSystemInfo>(
|
| + file_system_info_list));
|
| + Notify();
|
| + }
|
| +
|
| + void FetchFileSystems() {
|
| + helper_->StartFetching(NewCallback(this,
|
| + &BrowsingDataFileSystemHelperTest::CallbackStartFetching));
|
| + BlockUntilNotified();
|
| + }
|
| +
|
| + void FetchCannedFileSystems() {
|
| + canned_helper_->StartFetching(NewCallback(this,
|
| + &BrowsingDataFileSystemHelperTest::CallbackStartFetching));
|
| + BlockUntilNotified();
|
| + }
|
| +
|
| + virtual void PopulateTestFileSystemData() {
|
| + // Set up kOrigin1 with a temporary file system, kOrigin2 with a persistent
|
| + // file system, and kOrigin3 with both.
|
| + sandbox_ = profile_.GetFileSystemContext()->path_manager()->
|
| + sandbox_provider();
|
| +
|
| + CreateDirectoryForOriginAndType(kOrigin1, kTemporary);
|
| + CreateDirectoryForOriginAndType(kOrigin2, kPersistent);
|
| + CreateDirectoryForOriginAndType(kOrigin3, kTemporary);
|
| + CreateDirectoryForOriginAndType(kOrigin3, kPersistent);
|
| +
|
| + EXPECT_FALSE(FileSystemContainsOriginAndType(kOrigin1, kPersistent));
|
| + EXPECT_TRUE(FileSystemContainsOriginAndType(kOrigin1, kTemporary));
|
| + EXPECT_TRUE(FileSystemContainsOriginAndType(kOrigin2, kPersistent));
|
| + EXPECT_FALSE(FileSystemContainsOriginAndType(kOrigin2, kTemporary));
|
| + EXPECT_TRUE(FileSystemContainsOriginAndType(kOrigin3, kPersistent));
|
| + EXPECT_TRUE(FileSystemContainsOriginAndType(kOrigin3, kTemporary));
|
| + }
|
| +
|
| + void CreateDirectoryForOriginAndType(const GURL& origin,
|
| + fileapi::FileSystemType type) {
|
| + FilePath target = sandbox_->ValidateFileSystemRootAndGetPathOnFileThread(
|
| + origin, type, FilePath(), true);
|
| + EXPECT_TRUE(file_util::DirectoryExists(target));
|
| + }
|
| +
|
| + FileSystemInfoVector* GetFileSystems() {
|
| + return file_system_info_list_.get();
|
| + }
|
| +
|
| + void BlockUntilNotified() {
|
| + MessageLoop::current()->Run();
|
| + }
|
| +
|
| + void Notify() {
|
| + MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + // Temporary storage to pass information back from callbacks.
|
| + bool found_file_system_;
|
| + ScopedFileSystemInfoVector file_system_info_list_;
|
| +
|
| + scoped_refptr<BrowsingDataFileSystemHelper> helper_;
|
| + scoped_refptr<CannedBrowsingDataFileSystemHelper> canned_helper_;
|
| +
|
| + private:
|
| + // message_loop_, as well as all the threads associated with it must be
|
| + // defined before profile_ to prevent explosions. Oh how I love C++.
|
| + MessageLoopForUI message_loop_;
|
| + BrowserThread ui_thread_;
|
| + BrowserThread file_thread_;
|
| + BrowserThread io_thread_;
|
| + TestingProfile profile_;
|
| +
|
| + // We don't own this pointer: don't delete it.
|
| + fileapi::SandboxMountPointProvider* sandbox_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BrowsingDataFileSystemHelperTest);
|
| +};
|
| +
|
| +TEST_F(BrowsingDataFileSystemHelperTest, FetchData) {
|
| + PopulateTestFileSystemData();
|
| +
|
| + FetchFileSystems();
|
| +
|
| + EXPECT_EQ(3UL, file_system_info_list_->size());
|
| +
|
| + // Order is arbitrary, verify all three origins.
|
| + bool test_hosts_found[3] = {false, false, false};
|
| + for (size_t i = 0; i < file_system_info_list_->size(); i++) {
|
| + BrowsingDataFileSystemHelper::FileSystemInfo info =
|
| + file_system_info_list_->at(i);
|
| + if (info.origin == kOrigin1) {
|
| + test_hosts_found[0] = true;
|
| + EXPECT_FALSE(info.has_persistent);
|
| + EXPECT_TRUE(info.has_temporary);
|
| + EXPECT_EQ(0, info.usage_persistent);
|
| + EXPECT_EQ(kEmptyFileSystemSize, info.usage_temporary);
|
| + } else if (info.origin == kOrigin2) {
|
| + test_hosts_found[1] = true;
|
| + EXPECT_TRUE(info.has_persistent);
|
| + EXPECT_FALSE(info.has_temporary);
|
| + EXPECT_EQ(kEmptyFileSystemSize, info.usage_persistent);
|
| + EXPECT_EQ(0, info.usage_temporary);
|
| + } else if (info.origin == kOrigin3) {
|
| + test_hosts_found[2] = true;
|
| + EXPECT_TRUE(info.has_persistent);
|
| + EXPECT_TRUE(info.has_temporary);
|
| + EXPECT_EQ(kEmptyFileSystemSize, info.usage_persistent);
|
| + EXPECT_EQ(kEmptyFileSystemSize, info.usage_temporary);
|
| + } else {
|
| + ADD_FAILURE() << info.origin.spec() << " isn't an origin we added.";
|
| + }
|
| + }
|
| + for (size_t i = 0; i < arraysize(test_hosts_found); i++) {
|
| + EXPECT_TRUE(test_hosts_found[i]);
|
| + }
|
| +}
|
| +
|
| +TEST_F(BrowsingDataFileSystemHelperTest, DeleteData) {
|
| + PopulateTestFileSystemData();
|
| +
|
| + helper_->DeleteFileSystemOrigin(kOrigin1);
|
| + helper_->DeleteFileSystemOrigin(kOrigin2);
|
| +
|
| + FetchFileSystems();
|
| +
|
| + EXPECT_EQ(3UL, file_system_info_list_->size());
|
| + for (size_t i = 0; i < file_system_info_list_->size(); ++i) {
|
| + BrowsingDataFileSystemHelper::FileSystemInfo info =
|
| + file_system_info_list_->at(0);
|
| + if (info.origin == kOrigin3) {
|
| + EXPECT_TRUE(info.has_persistent);
|
| + EXPECT_TRUE(info.has_temporary);
|
| + EXPECT_EQ(kEmptyFileSystemSize, info.usage_persistent);
|
| + EXPECT_EQ(kEmptyFileSystemSize, info.usage_temporary);
|
| + } else {
|
| + EXPECT_FALSE(info.has_persistent);
|
| + EXPECT_FALSE(info.has_temporary);
|
| + }
|
| + }
|
| +}
|
| +
|
| +TEST_F(BrowsingDataFileSystemHelperTest, Empty) {
|
| + ASSERT_TRUE(canned_helper_->empty());
|
| + canned_helper_->AddFileSystem(kOrigin1, kTemporary, 0);
|
| + ASSERT_FALSE(canned_helper_->empty());
|
| + canned_helper_->Reset();
|
| + ASSERT_TRUE(canned_helper_->empty());
|
| +}
|
| +
|
| +TEST_F(BrowsingDataFileSystemHelperTest, CannedAddFileSystem) {
|
| + canned_helper_->AddFileSystem(kOrigin1, kPersistent, 200);
|
| + canned_helper_->AddFileSystem(kOrigin2, kTemporary, 100);
|
| +
|
| + FetchCannedFileSystems();
|
| +
|
| + EXPECT_EQ(2U, file_system_info_list_->size());
|
| + EXPECT_EQ(kOrigin1, file_system_info_list_->at(0).origin);
|
| + EXPECT_TRUE(file_system_info_list_->at(0).has_persistent);
|
| + EXPECT_FALSE(file_system_info_list_->at(0).has_temporary);
|
| + EXPECT_EQ(200, file_system_info_list_->at(0).usage_persistent);
|
| + EXPECT_EQ(0, file_system_info_list_->at(0).usage_temporary);
|
| + EXPECT_EQ(kOrigin2, file_system_info_list_->at(1).origin);
|
| + EXPECT_FALSE(file_system_info_list_->at(1).has_persistent);
|
| + EXPECT_TRUE(file_system_info_list_->at(1).has_temporary);
|
| + EXPECT_EQ(0, file_system_info_list_->at(1).usage_persistent);
|
| + EXPECT_EQ(100, file_system_info_list_->at(1).usage_temporary);
|
| +}
|
| +
|
| +TEST_F(BrowsingDataFileSystemHelperTest, CannedUnique) {
|
| + canned_helper_->AddFileSystem(kOrigin3, kPersistent, 200);
|
| + canned_helper_->AddFileSystem(kOrigin3, kTemporary, 100);
|
| +
|
| + FetchCannedFileSystems();
|
| +
|
| + EXPECT_EQ(1U, file_system_info_list_->size());
|
| + EXPECT_EQ(kOrigin3, file_system_info_list_->at(0).origin);
|
| + EXPECT_TRUE(file_system_info_list_->at(0).has_persistent);
|
| + EXPECT_TRUE(file_system_info_list_->at(0).has_temporary);
|
| + EXPECT_EQ(200, file_system_info_list_->at(0).usage_persistent);
|
| + EXPECT_EQ(100, file_system_info_list_->at(0).usage_temporary);
|
| }
|
|
|
| } // namespace
|
|
|