summaryrefslogtreecommitdiffstats
path: root/webkit/support/test_webkit_platform_support.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/support/test_webkit_platform_support.cc')
-rw-r--r--webkit/support/test_webkit_platform_support.cc51
1 files changed, 50 insertions, 1 deletions
diff --git a/webkit/support/test_webkit_platform_support.cc b/webkit/support/test_webkit_platform_support.cc
index 505c13b..57fe67e 100644
--- a/webkit/support/test_webkit_platform_support.cc
+++ b/webkit/support/test_webkit_platform_support.cc
@@ -324,8 +324,57 @@ TestWebKitPlatformSupport::createLocalStorageNamespace(
return dom_storage_system_.CreateLocalStorageNamespace();
}
+// Wrap a WebKit::WebIDBFactory to rewrite the data directory to
+// a scoped temp directory. In multiprocess Chromium this is rewritten
+// to a real profile directory during IPC.
+class TestWebIDBFactory : public WebKit::WebIDBFactory {
+ public:
+ TestWebIDBFactory()
+ : factory_(WebKit::WebIDBFactory::create()) {
+ // Create a new temp directory for Indexed DB storage, specific to this
+ // factory. If this fails, WebKit uses in-memory storage.
+ if (!indexed_db_dir_.CreateUniqueTempDir()) {
+ LOG(WARNING) << "Failed to create a temp dir for Indexed DB, "
+ "using in-memory storage.";
+ DCHECK(indexed_db_dir_.path().empty());
+ }
+ data_dir_ = webkit_support::GetAbsoluteWebStringFromUTF8Path(
+ indexed_db_dir_.path().AsUTF8Unsafe());
+ }
+
+ virtual void getDatabaseNames(WebKit::WebIDBCallbacks* callbacks,
+ const WebKit::WebSecurityOrigin& origin,
+ WebKit::WebFrame* frame,
+ const WebString& dataDir) {
+ factory_->getDatabaseNames(callbacks, origin, frame,
+ dataDir.isEmpty() ? data_dir_ : dataDir);
+ }
+
+ virtual void open(const WebString& name,
+ WebKit::WebIDBCallbacks* callbacks,
+ const WebKit::WebSecurityOrigin& origin,
+ WebKit::WebFrame* frame,
+ const WebString& dataDir) {
+ factory_->open(name, callbacks, origin, frame,
+ dataDir.isEmpty() ? data_dir_ : dataDir);
+ }
+
+ virtual void deleteDatabase(const WebString& name,
+ WebKit::WebIDBCallbacks* callbacks,
+ const WebKit::WebSecurityOrigin& origin,
+ WebKit::WebFrame* frame,
+ const WebString& dataDir) {
+ factory_->deleteDatabase(name, callbacks, origin, frame,
+ dataDir.isEmpty() ? data_dir_ : dataDir);
+ }
+ private:
+ scoped_ptr<WebIDBFactory> factory_;
+ ScopedTempDir indexed_db_dir_;
+ WebString data_dir_;
+};
+
WebKit::WebIDBFactory* TestWebKitPlatformSupport::idbFactory() {
- return WebKit::WebIDBFactory::create();
+ return new TestWebIDBFactory();
}
void TestWebKitPlatformSupport::createIDBKeysFromSerializedValuesAndKeyPath(