diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-18 13:54:59 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-18 13:54:59 +0000 |
commit | 67a7851692243892bb2d7253d2f1974833e57432 (patch) | |
tree | 98bdc05f9af985cbcc8b9cc6ea0ccf472a85b588 /chrome/common/indexed_db_param_traits.h | |
parent | e40cc399bd7e438579d6fcfa208103c12caf9052 (diff) | |
download | chromium_src-67a7851692243892bb2d7253d2f1974833e57432.zip chromium_src-67a7851692243892bb2d7253d2f1974833e57432.tar.gz chromium_src-67a7851692243892bb2d7253d2f1974833e57432.tar.bz2 |
Adds IDBKeyPath parser / extractor, and provides a mechanism to call it sandboxed.
TEST=idbkeypathextractor_browsertests.cc
Review URL: http://codereview.chromium.org/3043037
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56524 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/indexed_db_param_traits.h')
-rw-r--r-- | chrome/common/indexed_db_param_traits.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/chrome/common/indexed_db_param_traits.h b/chrome/common/indexed_db_param_traits.h new file mode 100644 index 0000000..11d2050 --- /dev/null +++ b/chrome/common/indexed_db_param_traits.h @@ -0,0 +1,102 @@ +// Copyright (c) 2010 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_COMMON_INDEXED_DB_PARAM_TRAITS_H_ +#define CHROME_COMMON_INDEXED_DB_PARAM_TRAITS_H_ +#pragma once + +#include "chrome/common/indexed_db_key.h" +#include "chrome/common/serialized_script_value.h" + +namespace IPC { + +// These datatypes are used by utility_messages.h and render_messages.h. +// Unfortunately we can't move it to common: MSVC linker complains about +// WebKit datatypes that are not linked on npchrome_frame (even though it's +// never actually used by that target). + +template <> +struct ParamTraits<SerializedScriptValue> { + typedef SerializedScriptValue param_type; + static void Write(Message* m, const param_type& p) { + WriteParam(m, p.is_null()); + WriteParam(m, p.is_invalid()); + WriteParam(m, p.data()); + } + static bool Read(const Message* m, void** iter, param_type* r) { + bool is_null; + bool is_invalid; + string16 data; + bool ok = + ReadParam(m, iter, &is_null) && + ReadParam(m, iter, &is_invalid) && + ReadParam(m, iter, &data); + if (!ok) + return false; + r->set_is_null(is_null); + r->set_is_invalid(is_invalid); + r->set_data(data); + return true; + } + static void Log(const param_type& p, std::wstring* l) { + l->append(L"<SerializedScriptValue>("); + LogParam(p.is_null(), l); + l->append(L", "); + LogParam(p.is_invalid(), l); + l->append(L", "); + LogParam(p.data(), l); + l->append(L")"); + } +}; + +template <> +struct ParamTraits<IndexedDBKey> { + typedef IndexedDBKey param_type; + static void Write(Message* m, const param_type& p) { + WriteParam(m, int(p.type())); + // TODO(jorlow): Technically, we only need to pack the type being used. + WriteParam(m, p.string()); + WriteParam(m, p.number()); + } + static bool Read(const Message* m, void** iter, param_type* r) { + int type; + string16 string; + int32 number; + bool ok = + ReadParam(m, iter, &type) && + ReadParam(m, iter, &string) && + ReadParam(m, iter, &number); + if (!ok) + return false; + switch (type) { + case WebKit::WebIDBKey::NullType: + r->SetNull(); + return true; + case WebKit::WebIDBKey::StringType: + r->Set(string); + return true; + case WebKit::WebIDBKey::NumberType: + r->Set(number); + return true; + case WebKit::WebIDBKey::InvalidType: + r->SetInvalid(); + return true; + } + NOTREACHED(); + return false; + } + static void Log(const param_type& p, std::wstring* l) { + l->append(L"<IndexedDBKey>("); + LogParam(int(p.type()), l); + l->append(L", "); + LogParam(p.string(), l); + l->append(L", "); + LogParam(p.number(), l); + l->append(L")"); + } +}; + +} // namespace IPC + +#endif // CHROME_COMMON_INDEXED_DB_PARAM_TRAITS_H_ |