Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(674)

Unified Diff: webkit/dom_storage/dom_storage_context_unittest.cc

Issue 9860018: DomStorageContext unittests (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/dom_storage/dom_storage_context.h ('k') | webkit/tools/test_shell/test_shell.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/dom_storage/dom_storage_context_unittest.cc
===================================================================
--- webkit/dom_storage/dom_storage_context_unittest.cc (revision 0)
+++ webkit/dom_storage/dom_storage_context_unittest.cc (revision 0)
@@ -0,0 +1,181 @@
+// Copyright (c) 2012 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 "base/bind.h"
+#include "base/file_util.h"
+#include "base/message_loop.h"
+#include "base/message_loop_proxy.h"
+#include "base/scoped_temp_dir.h"
+#include "base/threading/sequenced_worker_pool.h"
+#include "base/time.h"
+#include "base/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/dom_storage/dom_storage_area.h"
+#include "webkit/dom_storage/dom_storage_context.h"
+#include "webkit/dom_storage/dom_storage_namespace.h"
+#include "webkit/dom_storage/dom_storage_task_runner.h"
+#include "webkit/dom_storage/dom_storage_types.h"
+#include "webkit/quota/mock_special_storage_policy.h"
+
+namespace dom_storage {
+
+class DomStorageContextTest : public testing::Test {
+ public:
+ DomStorageContextTest()
+ : kOrigin(GURL("http://dom_storage/")),
+ kKey(ASCIIToUTF16("key")),
+ kValue(ASCIIToUTF16("value")),
+ kDontIncludeFileInfo(false),
+ kDoIncludeFileInfo(true) {
+ }
+
+ const GURL kOrigin;
+ const string16 kKey;
+ const string16 kValue;
+ const bool kDontIncludeFileInfo;
+ const bool kDoIncludeFileInfo;
+
+ virtual void SetUp() {
+ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+ storage_policy_ = new quota::MockSpecialStoragePolicy;
+ task_runner_ = new MockDomStorageTaskRunner(
+ base::MessageLoopProxy::current());
+ context_ = new DomStorageContext(temp_dir_.path(),
+ storage_policy_,
+ task_runner_);
+ }
+
+ virtual void TearDown() {
+ MessageLoop::current()->RunAllPending();
+ }
+
+ void VerifySingleOriginRemains(const GURL& origin) {
+ // Use a new instance to examine the contexts of temp_dir_.
+ scoped_refptr<DomStorageContext> context =
+ new DomStorageContext(temp_dir_.path(), NULL, NULL);
+ std::vector<DomStorageContext::UsageInfo> infos;
+ context->GetUsageInfo(&infos, kDontIncludeFileInfo);
+ EXPECT_EQ(1u, infos.size());
+ EXPECT_EQ(origin, infos[0].origin);
+ }
+
+ protected:
+ ScopedTempDir temp_dir_;
+ scoped_refptr<quota::MockSpecialStoragePolicy> storage_policy_;
+ scoped_refptr<MockDomStorageTaskRunner> task_runner_;
+ scoped_refptr<DomStorageContext> context_;
+ DISALLOW_COPY_AND_ASSIGN(DomStorageContextTest);
+};
+
+TEST_F(DomStorageContextTest, Basics) {
+ // This test doesn't do much, checks that the constructor
+ // initializes members properly and that invoking methods
+ // on a newly created object w/o any data on disk do no harm.
+ EXPECT_EQ(temp_dir_.path(), context_->directory());
+ EXPECT_EQ(storage_policy_.get(), context_->special_storage_policy_.get());
+ context_->PurgeMemory();
+ context_->DeleteOrigin(GURL("http://chromium.org/"));
+ context_->DeleteDataModifiedSince(base::Time::Now());
+ const int kFirstSessionStorageNamespaceId = 1;
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId));
+ EXPECT_FALSE(context_->GetStorageNamespace(kFirstSessionStorageNamespaceId));
+ EXPECT_EQ(kFirstSessionStorageNamespaceId, context_->AllocateSessionId());
+ std::vector<DomStorageContext::UsageInfo> infos;
+ context_->GetUsageInfo(&infos, kDontIncludeFileInfo);
+ EXPECT_TRUE(infos.empty());
+ context_->Shutdown();
+}
+
+TEST_F(DomStorageContextTest, UsageInfo) {
+ // Should be empty initially
+ std::vector<DomStorageContext::UsageInfo> infos;
+ context_->GetUsageInfo(&infos, kDontIncludeFileInfo);
+ EXPECT_TRUE(infos.empty());
+ context_->GetUsageInfo(&infos, kDoIncludeFileInfo);
+ EXPECT_TRUE(infos.empty());
+
+ // Put some data into local storage and shutdown the context
+ // to ensure data is written to disk.
+ NullableString16 old_value;
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)->
+ OpenStorageArea(kOrigin)->SetItem(kKey, kValue, &old_value));
+ context_->Shutdown();
+ context_ = NULL;
+ MessageLoop::current()->RunAllPending();
+
+ // Create a new context that points to the same directory, see that
+ // it knows about the origin that we stored data for.
+ context_ = new DomStorageContext(temp_dir_.path(), NULL, NULL);
+ context_->GetUsageInfo(&infos, kDontIncludeFileInfo);
+ EXPECT_EQ(1u, infos.size());
+ EXPECT_EQ(kOrigin, infos[0].origin);
+ EXPECT_EQ(0u, infos[0].data_size);
+ EXPECT_EQ(base::Time(), infos[0].last_modified);
+ infos.clear();
+ context_->GetUsageInfo(&infos, kDoIncludeFileInfo);
+ EXPECT_EQ(1u, infos.size());
+ EXPECT_EQ(kOrigin, infos[0].origin);
+ EXPECT_NE(0u, infos[0].data_size);
+ EXPECT_NE(base::Time(), infos[0].last_modified);
+}
+
+TEST_F(DomStorageContextTest, SessionOnly) {
+ const GURL kSessionOnlyOrigin("http://www.sessiononly.com/");
+ storage_policy_->AddSessionOnly(kSessionOnlyOrigin);
+
+ // Store data for a normal and a session-only origin and then
+ // invoke Shutdown() which should delete data for session-only
+ // origins.
+ NullableString16 old_value;
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)->
+ OpenStorageArea(kOrigin)->SetItem(kKey, kValue, &old_value));
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)->
+ OpenStorageArea(kSessionOnlyOrigin)->SetItem(kKey, kValue, &old_value));
+ context_->Shutdown();
+ context_ = NULL;
+ MessageLoop::current()->RunAllPending();
+
+ // Verify that the session-only origin data is gone.
+ VerifySingleOriginRemains(kOrigin);
+}
+
+TEST_F(DomStorageContextTest, ClearLocalState) {
+ const GURL kProtectedOrigin("http://www.protected.com/");
+ storage_policy_->AddProtected(kProtectedOrigin);
+
+ // Store data for a normal and a protected origin, setup shutdown options
+ // to clear normal local state, then shutdown and let things flush.
+ NullableString16 old_value;
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)->
+ OpenStorageArea(kOrigin)->SetItem(kKey, kValue, &old_value));
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)->
+ OpenStorageArea(kProtectedOrigin)->SetItem(kKey, kValue, &old_value));
+ context_->SetClearLocalState(true);
+ context_->Shutdown();
+ context_ = NULL;
+ MessageLoop::current()->RunAllPending();
+
+ VerifySingleOriginRemains(kProtectedOrigin);
+}
+
+TEST_F(DomStorageContextTest, SaveSessionState) {
+ const GURL kSessionOnlyOrigin("http://www.sessiononly.com/");
+ storage_policy_->AddSessionOnly(kSessionOnlyOrigin);
+
+ // Store data for a session-only origin, setup to save session data, then
+ // shutdown.
+ NullableString16 old_value;
+ EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)->
+ OpenStorageArea(kSessionOnlyOrigin)->SetItem(kKey, kValue, &old_value));
+ context_->SetClearLocalState(true);
+ context_->SaveSessionState(); // Should override clear behavior.
+ context_->Shutdown();
+ context_ = NULL;
+ MessageLoop::current()->RunAllPending();
+
+ VerifySingleOriginRemains(kSessionOnlyOrigin);
+}
+
+} // namespace dom_storage
+
Property changes on: webkit\dom_storage\dom_storage_context_unittest.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « webkit/dom_storage/dom_storage_context.h ('k') | webkit/tools/test_shell/test_shell.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698