summaryrefslogtreecommitdiffstats
path: root/webkit/browser
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-28 08:56:14 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-28 08:56:14 +0000
commit4d28164be0247d020e8290440d682787a82eaba3 (patch)
treef6a33c3860cfe5e7583d640921c5e424495bd1b7 /webkit/browser
parent82d74151175944904dde63e23291ae09cbb9dab3 (diff)
downloadchromium_src-4d28164be0247d020e8290440d682787a82eaba3.zip
chromium_src-4d28164be0247d020e8290440d682787a82eaba3.tar.gz
chromium_src-4d28164be0247d020e8290440d682787a82eaba3.tar.bz2
Temporarily disable IsolatedStorage special handling
Hitting CHECK on production build, need more investigation. BUG=264429 TEST=ObfuscatedFileUtilTest.MigrationBackFromIsolated, manual (confirmed migration) Review URL: https://chromiumcodereview.appspot.com/20665002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214112 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/browser')
-rw-r--r--webkit/browser/fileapi/obfuscated_file_util.cc35
-rw-r--r--webkit/browser/fileapi/obfuscated_file_util.h2
-rw-r--r--webkit/browser/fileapi/obfuscated_file_util_unittest.cc46
-rw-r--r--webkit/browser/fileapi/sandbox_isolated_origin_database.cc22
-rw-r--r--webkit/browser/fileapi/sandbox_isolated_origin_database.h7
5 files changed, 94 insertions, 18 deletions
diff --git a/webkit/browser/fileapi/obfuscated_file_util.cc b/webkit/browser/fileapi/obfuscated_file_util.cc
index e0e05e0..2be70a0 100644
--- a/webkit/browser/fileapi/obfuscated_file_util.cc
+++ b/webkit/browser/fileapi/obfuscated_file_util.cc
@@ -993,6 +993,9 @@ int64 ObfuscatedFileUtil::ComputeFilePathCost(const base::FilePath& path) {
}
void ObfuscatedFileUtil::MaybePrepopulateDatabase() {
+ // Always disable this for now. crbug.com/264429
+ return;
+
base::FilePath isolated_origin_dir = file_system_directory_.Append(
SandboxIsolatedOriginDatabase::kOriginDirectory);
if (!base::DirectoryExists(isolated_origin_dir))
@@ -1306,16 +1309,19 @@ bool ObfuscatedFileUtil::InitOriginDatabase(bool create) {
return false;
}
- if (!isolated_origin_.is_empty()) {
- origin_database_.reset(
- new SandboxIsolatedOriginDatabase(
- webkit_database::GetIdentifierFromOrigin(isolated_origin_),
- file_system_directory_));
- return true;
- }
-
origin_database_.reset(
new SandboxOriginDatabase(file_system_directory_));
+
+ base::FilePath isolated_origin_dir = file_system_directory_.Append(
+ SandboxIsolatedOriginDatabase::kOriginDirectory);
+ if (base::DirectoryExists(isolated_origin_dir) &&
+ !isolated_origin_.is_empty()) {
+ SandboxIsolatedOriginDatabase::MigrateBackDatabase(
+ webkit_database::GetIdentifierFromOrigin(isolated_origin_),
+ file_system_directory_,
+ static_cast<SandboxOriginDatabase*>(origin_database_.get()));
+ }
+
return true;
}
@@ -1438,16 +1444,9 @@ bool ObfuscatedFileUtil::HasIsolatedStorage(const GURL& origin) {
special_storage_policy_->HasIsolatedStorage(origin)) {
if (isolated_origin_.is_empty())
isolated_origin_ = origin;
- CHECK_EQ(isolated_origin_.spec(), origin.spec())
- << "multiple origins for an isolated site";
- return true;
- }
- // This could happen when the origin is already unloaded and
- // special_storage_policy_->HasIsolatedStorage(origin) returns false
- // for the same origin.
- if (!isolated_origin_.is_empty()) {
- CHECK_EQ(isolated_origin_.spec(), origin.spec());
- return true;
+ // Record isolated_origin_, but always disable for now.
+ // crbug.com/264429
+ return false;
}
return false;
}
diff --git a/webkit/browser/fileapi/obfuscated_file_util.h b/webkit/browser/fileapi/obfuscated_file_util.h
index 4c39e52..0d9750d 100644
--- a/webkit/browser/fileapi/obfuscated_file_util.h
+++ b/webkit/browser/fileapi/obfuscated_file_util.h
@@ -193,6 +193,8 @@ class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE ObfuscatedFileUtil
DestroyDirectoryDatabase_Isolated);
FRIEND_TEST_ALL_PREFIXES(ObfuscatedFileUtilTest,
GetDirectoryDatabase_Isolated);
+ FRIEND_TEST_ALL_PREFIXES(ObfuscatedFileUtilTest,
+ MigrationBackFromIsolated);
base::PlatformFileError GetFileInfoInternal(
SandboxDirectoryDatabase* db,
diff --git a/webkit/browser/fileapi/obfuscated_file_util_unittest.cc b/webkit/browser/fileapi/obfuscated_file_util_unittest.cc
index ced3d71..8f44d8b 100644
--- a/webkit/browser/fileapi/obfuscated_file_util_unittest.cc
+++ b/webkit/browser/fileapi/obfuscated_file_util_unittest.cc
@@ -26,10 +26,12 @@
#include "webkit/browser/fileapi/obfuscated_file_util.h"
#include "webkit/browser/fileapi/sandbox_directory_database.h"
#include "webkit/browser/fileapi/sandbox_file_system_test_helper.h"
+#include "webkit/browser/fileapi/sandbox_isolated_origin_database.h"
#include "webkit/browser/fileapi/sandbox_origin_database.h"
#include "webkit/browser/fileapi/test_file_set.h"
#include "webkit/browser/quota/mock_special_storage_policy.h"
#include "webkit/browser/quota/quota_manager.h"
+#include "webkit/common/database/database_identifier.h"
#include "webkit/common/quota/quota_types.h"
namespace fileapi {
@@ -2327,4 +2329,48 @@ TEST_F(ObfuscatedFileUtilTest, GetDirectoryDatabase_Isolated) {
ASSERT_EQ(db, db2);
}
+TEST_F(ObfuscatedFileUtilTest, MigrationBackFromIsolated) {
+ std::string kFakeDirectoryData("0123456789");
+ base::FilePath old_directory_db_path;
+
+ // Initialize the directory with one origin using
+ // SandboxIsolatedOriginDatabase.
+ {
+ std::string origin_string =
+ webkit_database::GetIdentifierFromOrigin(origin_);
+ SandboxIsolatedOriginDatabase database_old(origin_string, data_dir_path());
+ base::FilePath path;
+ EXPECT_TRUE(database_old.GetPathForOrigin(origin_string, &path));
+ EXPECT_FALSE(path.empty());
+
+ // Populate the origin directory with some fake data.
+ old_directory_db_path = data_dir_path().Append(path);
+ ASSERT_TRUE(file_util::CreateDirectory(old_directory_db_path));
+ EXPECT_EQ(static_cast<int>(kFakeDirectoryData.size()),
+ file_util::WriteFile(old_directory_db_path.AppendASCII("dummy"),
+ kFakeDirectoryData.data(),
+ kFakeDirectoryData.size()));
+ }
+
+ storage_policy_->AddIsolated(origin_);
+ ObfuscatedFileUtil file_util(
+ storage_policy_.get(), data_dir_path(),
+ base::MessageLoopProxy::current().get());
+ base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
+ base::FilePath origin_directory = file_util.GetDirectoryForOrigin(
+ origin_, true /* create */, &error);
+ EXPECT_EQ(base::PLATFORM_FILE_OK, error);
+
+ // The database is migrated from the old one.
+ EXPECT_TRUE(base::DirectoryExists(origin_directory));
+ EXPECT_FALSE(base::DirectoryExists(old_directory_db_path));
+
+ // Check we see the same contents in the new origin directory.
+ std::string origin_db_data;
+ EXPECT_TRUE(base::PathExists(origin_directory.AppendASCII("dummy")));
+ EXPECT_TRUE(file_util::ReadFileToString(
+ origin_directory.AppendASCII("dummy"), &origin_db_data));
+ EXPECT_EQ(kFakeDirectoryData, origin_db_data);
+}
+
} // namespace fileapi
diff --git a/webkit/browser/fileapi/sandbox_isolated_origin_database.cc b/webkit/browser/fileapi/sandbox_isolated_origin_database.cc
index 77b00f9..7ed4e8c 100644
--- a/webkit/browser/fileapi/sandbox_isolated_origin_database.cc
+++ b/webkit/browser/fileapi/sandbox_isolated_origin_database.cc
@@ -55,6 +55,28 @@ bool SandboxIsolatedOriginDatabase::ListAllOrigins(
void SandboxIsolatedOriginDatabase::DropDatabase() {
}
+void SandboxIsolatedOriginDatabase::MigrateBackDatabase(
+ const std::string& origin,
+ const base::FilePath& file_system_directory,
+ SandboxOriginDatabase* database) {
+ base::FilePath isolated_directory =
+ file_system_directory.Append(kOriginDirectory);
+
+ if (database->HasOriginPath(origin)) {
+ // Don't bother.
+ base::DeleteFile(isolated_directory, true /* recursive */);
+ return;
+ }
+
+ base::FilePath directory_name;
+ if (database->GetPathForOrigin(origin, &directory_name)) {
+ base::FilePath origin_directory =
+ file_system_directory.Append(directory_name);
+ base::DeleteFile(origin_directory, true /* recursive */);
+ base::Move(isolated_directory, origin_directory);
+ }
+}
+
void SandboxIsolatedOriginDatabase::MigrateDatabaseIfNeeded() {
if (migration_checked_)
return;
diff --git a/webkit/browser/fileapi/sandbox_isolated_origin_database.h b/webkit/browser/fileapi/sandbox_isolated_origin_database.h
index d262921..2505659 100644
--- a/webkit/browser/fileapi/sandbox_isolated_origin_database.h
+++ b/webkit/browser/fileapi/sandbox_isolated_origin_database.h
@@ -9,6 +9,8 @@
namespace fileapi {
+class SandboxOriginDatabase;
+
class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE SandboxIsolatedOriginDatabase
: public SandboxOriginDatabaseInterface {
public:
@@ -27,6 +29,11 @@ class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE SandboxIsolatedOriginDatabase
virtual bool ListAllOrigins(std::vector<OriginRecord>* origins) OVERRIDE;
virtual void DropDatabase() OVERRIDE;
+ static void MigrateBackDatabase(
+ const std::string& origin,
+ const base::FilePath& file_system_directory,
+ SandboxOriginDatabase* origin_database);
+
private:
void MigrateDatabaseIfNeeded();