summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authordarin@google.com <darin@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-06 18:44:29 +0000
committerdarin@google.com <darin@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-06 18:44:29 +0000
commit6408eba7f314035688d4222360d0b0346f0ed2f7 (patch)
treeb86b552ee768762b4ebdd581779bcbe6b3c16ed9 /chrome
parente6d08cad82c6175196682a0730be347d5dddd415 (diff)
downloadchromium_src-6408eba7f314035688d4222360d0b0346f0ed2f7.zip
chromium_src-6408eba7f314035688d4222360d0b0346f0ed2f7.tar.gz
chromium_src-6408eba7f314035688d4222360d0b0346f0ed2f7.tar.bz2
Improve NPRuntime marshalling by adding glue functions for serializing / deserializing a NPIdentifier. Also kill some extraneous std::string copies in NPVariant_Param code.
If you like I could eliminate NPIdentifier_Param in place of using NPIdentifier directly. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@442 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/common/plugin_messages.h40
-rw-r--r--chrome/plugin/npobject_proxy.cc2
-rw-r--r--chrome/plugin/npobject_util.cc21
3 files changed, 19 insertions, 44 deletions
diff --git a/chrome/common/plugin_messages.h b/chrome/common/plugin_messages.h
index a06439b..85463cb 100644
--- a/chrome/common/plugin_messages.h
+++ b/chrome/common/plugin_messages.h
@@ -44,6 +44,7 @@
#include "chrome/common/ipc_message.h"
#include "chrome/common/ipc_message_utils.h"
#include "googleurl/src/gurl.h"
+#include "webkit/glue/npruntime_util.h"
void PluginMessagesInit();
@@ -107,9 +108,7 @@ struct PluginMsg_DidReceiveResponseParams {
};
struct NPIdentifier_Param {
- bool is_string;
- std::string string;
- int number;
+ NPIdentifier identifier;
};
enum NPVariant_ParamEnum {
@@ -380,12 +379,12 @@ struct ParamTraits<NPEvent> {
switch(p.event) {
case WM_KEYDOWN:
event = L"WM_KEYDOWN";
- wparam = StringPrintf(L"%d", p.wParam);
- lparam = StringPrintf(L"%d", p.lParam);
+ wparam = IntToString(p.wParam);
+ lparam = IntToString(p.lParam);
break;
case WM_KEYUP:
event = L"WM_KEYDOWN";
- wparam = StringPrintf(L"%d", p.wParam);
+ wparam = IntToString(p.wParam);
lparam = StringPrintf(L"%x", p.lParam);
break;
case WM_MOUSEMOVE:
@@ -444,31 +443,18 @@ template <>
struct ParamTraits<NPIdentifier_Param> {
typedef NPIdentifier_Param param_type;
static void Write(Message* m, const param_type& p) {
- WriteParam(m, p.is_string);
- if (p.is_string) {
- WriteParam(m, p.string);
- } else {
- WriteParam(m, p.number);
- }
+ webkit_glue::SerializeNPIdentifier(p.identifier, m);
}
static bool Read(const Message* m, void** iter, param_type* r) {
- if (!ReadParam(m, iter, &r->is_string))
- return false;
-
- bool result;
- if (r->is_string) {
- result = ReadParam(m, iter, &r->string);
- } else {
- result = ReadParam(m, iter, &r->number);
- }
-
- return result;
+ return webkit_glue::DeserializeNPIdentifier(*m, iter, &r->identifier);
}
static void Log(const param_type& p, std::wstring* l) {
- if (p.is_string) {
- l->append(ASCIIToWide(p.string));
+ if (NPN_IdentifierIsString(p.identifier)) {
+ NPUTF8* str = NPN_UTF8FromIdentifier(p.identifier);
+ l->append(UTF8ToWide(str));
+ NPN_MemFree(str);
} else {
- l->append(StringPrintf(L"%d", p.number));
+ l->append(IntToString(NPN_IntFromIdentifier(p.identifier)));
}
}
};
@@ -485,7 +471,7 @@ struct ParamTraits<NPVariant_Param> {
} else if (p.type == NPVARIANT_PARAM_DOUBLE) {
WriteParam(m, p.double_value);
} else if (p.type == NPVARIANT_PARAM_STRING) {
- WriteParam(m, std::string(p.string_value));
+ WriteParam(m, p.string_value);
} else if (p.type == NPVARIANT_PARAM_OBJECT_ROUTING_ID) {
// This is the routing id used to connect NPObjectProxy in the other
// process with NPObjectStub in this process.
diff --git a/chrome/plugin/npobject_proxy.cc b/chrome/plugin/npobject_proxy.cc
index 2dc8819..edc5b1c 100644
--- a/chrome/plugin/npobject_proxy.cc
+++ b/chrome/plugin/npobject_proxy.cc
@@ -176,7 +176,7 @@ bool NPObjectProxy::NPInvokePrivate(NPP npp,
NPIdentifier_Param name_param;
if (is_default) {
// The data won't actually get used, but set it so we don't send random data.
- name_param.is_string = true;
+ name_param.identifier = NULL;
} else {
CreateNPIdentifierParam(name, &name_param);
}
diff --git a/chrome/plugin/npobject_util.cc b/chrome/plugin/npobject_util.cc
index fa6f68e..1f4b67d 100644
--- a/chrome/plugin/npobject_util.cc
+++ b/chrome/plugin/npobject_util.cc
@@ -150,22 +150,11 @@ bool IsPluginProcess() {
}
void CreateNPIdentifierParam(NPIdentifier id, NPIdentifier_Param* param) {
- param->is_string = NPN_IdentifierIsString(id);
- if (param->is_string) {
- NPUTF8* utf8 = NPN_UTF8FromIdentifier(id);
- param->string = utf8;
- NPN_MemFree(utf8);
- } else {
- param->number = NPN_IntFromIdentifier(id);
- }
+ param->identifier = id;
}
-NPIdentifier CreateNPIdentifier(const NPIdentifier_Param& param) {
- if (param.is_string) {
- return NPN_GetStringIdentifier(param.string.c_str());
- } else {
- return NPN_GetIntIdentifier(param.number);
- }
+NPIdentifier CreateNPIdentifier(const NPIdentifier_Param& param) {
+ return param.identifier;
}
void CreateNPVariantParam(const NPVariant& variant,
@@ -194,8 +183,8 @@ void CreateNPVariantParam(const NPVariant& variant,
case NPVariantType_String:
param->type = NPVARIANT_PARAM_STRING;
if (variant.value.stringValue.UTF8Length) {
- param->string_value = std::string(variant.value.stringValue.UTF8Characters,
- variant.value.stringValue.UTF8Length);
+ param->string_value.assign(variant.value.stringValue.UTF8Characters,
+ variant.value.stringValue.UTF8Length);
}
break;
case NPVariantType_Object: