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

Unified Diff: chrome/common/webkit_param_traits.h

Issue 62032: Stop serializing WebString over IPC. The new rule is that only POD (plain ol... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 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 | « chrome/common/render_messages_internal.h ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/webkit_param_traits.h
===================================================================
--- chrome/common/webkit_param_traits.h (revision 13158)
+++ chrome/common/webkit_param_traits.h (working copy)
@@ -4,6 +4,21 @@
//
// This file contains ParamTraits templates to support serialization of WebKit
// data types over IPC.
+//
+// NOTE: IT IS IMPORTANT THAT ONLY POD (plain old data) TYPES ARE SERIALIZED.
+//
+// There are several reasons for this restrictions:
+//
+// o We don't want inclusion of this file to imply linking to WebKit code.
+//
+// o Many WebKit structures are not thread-safe. WebString, for example,
+// contains a reference counted buffer, which does not use thread-safe
+// reference counting. If we allowed serializing WebString, then we may run
+// the risk of introducing subtle thread-safety bugs if people passed a
+// WebString across threads via PostTask(NewRunnableMethod(...)).
+//
+// o The WebKit API has redundant types for strings, and we should avoid using
+// those beyond code that interfaces with the WebKit API.
#ifndef CHROME_COMMON_WEBKIT_PARAM_TRAITS_H_
#define CHROME_COMMON_WEBKIT_PARAM_TRAITS_H_
@@ -11,7 +26,7 @@
#include "chrome/common/ipc_message_utils.h"
#include "third_party/WebKit/WebKit/chromium/public/WebCache.h"
#include "third_party/WebKit/WebKit/chromium/public/WebConsoleMessage.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebFindInPageRequest.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebFindOptions.h"
#include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/WebKit/chromium/public/WebScreenInfo.h"
@@ -80,27 +95,6 @@
};
template <>
-struct ParamTraits<WebKit::WebString> {
- typedef WebKit::WebString param_type;
- static void Write(Message* m, const param_type& p) {
- m->WriteData(reinterpret_cast<const char*>(p.data()),
- static_cast<int>(p.length() * sizeof(WebKit::WebUChar)));
- }
- static bool Read(const Message* m, void** iter, param_type* p) {
- const char* data;
- int data_len;
- if (!m->ReadData(iter, &data, &data_len))
- return false;
- p->assign(reinterpret_cast<const WebKit::WebUChar*>(data),
- static_cast<size_t>(data_len / sizeof(WebKit::WebUChar)));
- return true;
- }
- static void Log(const param_type& p, std::wstring* l) {
- l->append(UTF16ToWideHack(p));
- }
-};
-
-template <>
struct ParamTraits<WebKit::WebConsoleMessage::Level> {
typedef WebKit::WebConsoleMessage::Level param_type;
static void Write(Message* m, const param_type& p) {
@@ -119,46 +113,27 @@
};
template <>
-struct ParamTraits<WebKit::WebConsoleMessage> {
- typedef WebKit::WebConsoleMessage param_type;
+struct ParamTraits<WebKit::WebFindOptions> {
+ typedef WebKit::WebFindOptions param_type;
static void Write(Message* m, const param_type& p) {
- WriteParam(m, p.level);
- WriteParam(m, p.text);
- }
- static bool Read(const Message* m, void** iter, param_type* r) {
- return
- ReadParam(m, iter, &r->level) &&
- ReadParam(m, iter, &r->text);
- }
- static void Log(const param_type& p, std::wstring* l) {
- l->append(L"(");
- LogParam(p.level, l);
- l->append(L", ");
- LogParam(p.text, l);
- l->append(L")");
- }
-};
-
-template <>
-struct ParamTraits<WebKit::WebFindInPageRequest> {
- typedef WebKit::WebFindInPageRequest param_type;
- static void Write(Message* m, const param_type& p) {
- WriteParam(m, p.identifier);
- WriteParam(m, p.text);
WriteParam(m, p.forward);
WriteParam(m, p.matchCase);
WriteParam(m, p.findNext);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
- ReadParam(m, iter, &p->identifier) &&
- ReadParam(m, iter, &p->text) &&
ReadParam(m, iter, &p->forward) &&
ReadParam(m, iter, &p->matchCase) &&
ReadParam(m, iter, &p->findNext);
}
static void Log(const param_type& p, std::wstring* l) {
- l->append(L"<FindInPageRequest>");
+ l->append(L"(");
+ LogParam(p.forward, l);
+ l->append(L", ");
+ LogParam(p.matchCase, l);
+ l->append(L", ");
+ LogParam(p.findNext, l);
+ l->append(L")");
}
};
@@ -176,7 +151,7 @@
return true;
}
static void Log(const param_type& p, std::wstring* l) {
- std::wstring type;
+ const wchar_t* type;
switch (p) {
case WebKit::WebInputEvent::MouseDown:
type = L"MouseDown";
@@ -209,11 +184,10 @@
type = L"None";
break;
}
- LogParam(type, l);
+ LogParam(std::wstring(type), l);
}
};
-// Traits for WebKit::WebCache::UsageStats
template <>
struct ParamTraits<WebKit::WebCache::UsageStats> {
typedef WebKit::WebCache::UsageStats param_type;
« no previous file with comments | « chrome/common/render_messages_internal.h ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698