summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_message_utils.h
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-27 00:55:02 +0000
committerjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-27 00:55:02 +0000
commit15bf871f530cc5527db8a077e41dea8ea51bf31f (patch)
treeadd749cbb0ebbf7cfc3d2d95093716c9b167060e /ipc/ipc_message_utils.h
parent9fcb0c1a40e9e550c79c5eb650aeb8c39ae5f1d7 (diff)
downloadchromium_src-15bf871f530cc5527db8a077e41dea8ea51bf31f.zip
chromium_src-15bf871f530cc5527db8a077e41dea8ea51bf31f.tar.gz
chromium_src-15bf871f530cc5527db8a077e41dea8ea51bf31f.tar.bz2
Add a nullable string16 class to base. It combines a string16 + a null param
in order to cover all the possible states of a WebKit string. For strings where the null state is not meaninfully different from the empty state, this class should NOT be used. There are, however, some cases where we do need to track null. LocalStorage is an example. This class should be a fairly light weight way to do so. This change also adds implicit conversion to and from WebStrings. This also switches LocalStorage's IPCs over to using this new class. BUG=17343 TEST=none Review URL: http://codereview.chromium.org/174484 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24574 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_message_utils.h')
-rw-r--r--ipc/ipc_message_utils.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
index 5ec80a7..15d5297 100644
--- a/ipc/ipc_message_utils.h
+++ b/ipc/ipc_message_utils.h
@@ -11,6 +11,7 @@
#include "base/file_path.h"
#include "base/format_macros.h"
+#include "base/nullable_string16.h"
#include "base/string16.h"
#include "base/string_util.h"
#include "base/time.h"
@@ -545,6 +546,32 @@ struct ParamTraits<std::pair<A, B> > {
}
};
+template <>
+struct ParamTraits<NullableString16> {
+ typedef NullableString16 param_type;
+ static void Write(Message* m, const param_type& p) {
+ WriteParam(m, p.string());
+ WriteParam(m, p.is_null());
+ }
+ static bool Read(const Message* m, void** iter, param_type* r) {
+ string16 string;
+ if (!ReadParam(m, iter, &string))
+ return false;
+ bool is_null;
+ if (!ReadParam(m, iter, &is_null))
+ return false;
+ *r = NullableString16(string, is_null);
+ return true;
+ }
+ static void Log(const param_type& p, std::wstring* l) {
+ l->append(L"(");
+ LogParam(p.string(), l);
+ l->append(L", ");
+ LogParam(p.is_null(), l);
+ l->append(L")");
+ }
+};
+
// If WCHAR_T_IS_UTF16 is defined, then string16 is a std::wstring so we don't
// need this trait.
#if !defined(WCHAR_T_IS_UTF16)