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

Unified Diff: chrome/browser/storage_partition_descriptor.h

Issue 11147026: Initial refactor to get profiles to propagate storage partition details. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes based on Albert's review. Created 8 years, 2 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
Index: chrome/browser/storage_partition_descriptor.h
diff --git a/chrome/browser/storage_partition_descriptor.h b/chrome/browser/storage_partition_descriptor.h
new file mode 100644
index 0000000000000000000000000000000000000000..dd6318bfbbc638a310479df5d97cb81bfe70e204
--- /dev/null
+++ b/chrome/browser/storage_partition_descriptor.h
@@ -0,0 +1,89 @@
+// 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.
+
+#ifndef CHROME_BROWSER_STORAGE_PARTITION_DESCRIPTOR_H_
+#define CHROME_BROWSER_STORAGE_PARTITION_DESCRIPTOR_H_
+
+#include "base/file_path.h"
+#include "base/hash.h"
+#include "base/hash_tables.h"
+
+// This structure combines the on-disk path and a boolean whether the partition
+// should be persisted on disk. It's purpose is to serve as a unique key to
+// look up RequestContext objects in the ProfileIOData derived classes.
+struct StoragePartitionDescriptor {
+ StoragePartitionDescriptor(const FilePath& partition_path,
+ const bool in_memory_only)
+ : path(partition_path),
+ in_memory(in_memory_only) {}
+
+ const FilePath path;
+ const bool in_memory;
+};
+
+// Functor for operator <.
+struct StoragePartitionDescriptorLess {
+ bool operator()(const StoragePartitionDescriptor& lhs,
+ const StoragePartitionDescriptor& rhs) const {
+ if (lhs.path < rhs.path)
+ return true;
+ if (lhs.in_memory < rhs.in_memory)
+ return true;
+
+ return false;
+ }
+};
+
+// Functor for operator ==.
+struct StoragePartitionDescriptorEq {
+ bool operator()(const StoragePartitionDescriptor& lhs,
+ const StoragePartitionDescriptor& rhs) const {
+ return lhs.path == rhs.path && lhs.in_memory == rhs.in_memory;
+ }
+};
+
+// Provide a hash function so that hash_sets and maps can contain
+// StoragePartitionDescriptor structs.
+namespace BASE_HASH_NAMESPACE {
+
+#if defined(COMPILER_MSVC)
+
+inline size_t hash_value(const StoragePartitionDescriptor& input) {
+ size_t value = hash_value(input.path.value());
+ return input.in_memory ? value : value + 1;
+}
+
+#elif defined(COMPILER_GCC)
+
+template <>
+struct hash<StoragePartitionDescriptor> {
+ size_t operator()(const StoragePartitionDescriptor& input) const {
+ size_t value = hash<FilePath::StringType>()(input.path.value());
+ return input.in_memory ? value : value + 1;
+ }
+};
+
+#endif
+} // namespace BASE_HASH_NAMESPACE
+
+// A macro to typedef a hash_map, keyed by StoragePartitionDescriptor to lookup
+// other types. The goal is to save each place we use such map from including
+// all of this compiler specific syntax.
+#if defined(COMPILER_MSVC)
+ #define DefineStoragePartitionDescriptorMap(_X_) \
awong 2012/10/19 21:20:24 We almost never allow macros, and if we do, they a
nasko 2012/10/19 22:09:00 Done.
+ typedef BASE_HASH_NAMESPACE::hash_map< \
+ StoragePartitionDescriptor, \
+ _X_, \
+ BASE_HASH_NAMESPACE::hash_compare<StoragePartitionDescriptor, \
+ StoragePartitionDescriptorLess> >
+#elif defined(COMPILER_GCC)
+ #define DefineStoragePartitionDescriptorMap(_X_) \
+ typedef BASE_HASH_NAMESPACE::hash_map< \
+ StoragePartitionDescriptor, \
+ _X_, \
+ BASE_HASH_NAMESPACE::hash<StoragePartitionDescriptor>, \
+ StoragePartitionDescriptorEq>
+#endif
+
+#endif // CHROME_BROWSER_STORAGE_PARTITION_DESCRIPTOR_H_

Powered by Google App Engine
This is Rietveld 408576698