summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/serialized_var.h
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/proxy/serialized_var.h')
-rw-r--r--ppapi/proxy/serialized_var.h35
1 files changed, 25 insertions, 10 deletions
diff --git a/ppapi/proxy/serialized_var.h b/ppapi/proxy/serialized_var.h
index c0cb1ac..1ad218d 100644
--- a/ppapi/proxy/serialized_var.h
+++ b/ppapi/proxy/serialized_var.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// 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.
@@ -10,6 +10,7 @@
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
#include "ppapi/c/pp_var.h"
#include "ppapi/proxy/ppapi_proxy_export.h"
@@ -87,7 +88,6 @@ class PPAPI_PROXY_EXPORT SerializedVar {
public:
Inner();
Inner(VarSerializationRules* serialization_rules);
- Inner(VarSerializationRules* serialization_rules, const PP_Var& var);
~Inner();
VarSerializationRules* serialization_rules() {
@@ -101,8 +101,14 @@ class PPAPI_PROXY_EXPORT SerializedVar {
PP_Var GetVar() const;
PP_Var GetIncompleteVar() const;
void SetVar(PP_Var var);
- const std::string& GetString() const;
- std::string* GetStringPtr();
+ void SetString(scoped_ptr<std::string> str);
+ // Return a new string with the contents of the string referenced by Inner.
+ // The string referenced by the Inner will be empty after this.
+ scoped_ptr<std::string> GetStringDestructive();
+ // Return a pointer to our internal string pointer. This is so that the
+ // caller will be able to make this Inner point to a string that's owned
+ // elsewhere (i.e., in the tracker).
+ const std::string** GetStringPtrPtr();
// For the SerializedVarTestConstructor, this writes the Var value as if
// it was just received off the wire, without any serialization rules.
@@ -137,7 +143,7 @@ class PPAPI_PROXY_EXPORT SerializedVar {
VarSerializationRules* serialization_rules_;
// If this is set to VARTYPE_STRING and the 'value.id' is 0, then the
- // string_value_ contains the string. This means that the caller hasn't
+ // string_from_ipc_ holds the string. This means that the caller hasn't
// called Deserialize with a valid Dispatcher yet, which is how we can
// convert the serialized string value to a PP_Var string ID.
//
@@ -146,9 +152,17 @@ class PPAPI_PROXY_EXPORT SerializedVar {
// a string ID. Before this, the as_id will be 0 for VARTYPE_STRING.
PP_Var var_;
- // Holds the literal string value to/from IPC. This will be valid if the
- // var_ is VARTYPE_STRING.
- std::string string_value_;
+ // If valid, this is a pointer to a string owned by the VarTracker. When our
+ // outer SerializedVar gets serialized, it will write the string directly
+ // from the tracker so we do not need to make any unnecessary copies. This
+ // should only be valid on the sender side.
+ const std::string* tracker_string_ptr_;
+
+ // If valid, this is a string received from IPC which needs to be inserted
+ // in to the var tracker. When we provide it to the tracker, we pass
+ // ownership so that there are no unnecessary copies. This should only ever
+ // be valid on the receiver side.
+ scoped_ptr<std::string> string_from_ipc_;
CleanupMode cleanup_mode_;
@@ -167,7 +181,6 @@ class PPAPI_PROXY_EXPORT SerializedVar {
};
SerializedVar(VarSerializationRules* serialization_rules);
- SerializedVar(VarSerializationRules* serialization, const PP_Var& var);
mutable scoped_refptr<Inner> inner_;
};
@@ -453,7 +466,9 @@ class PPAPI_PROXY_EXPORT SerializedVarTestReader : public SerializedVar {
// actually want to check.
PP_Var GetIncompleteVar() const { return inner_->GetIncompleteVar(); }
- const std::string& GetString() const { return inner_->GetString(); }
+ const std::string* GetTrackerStringPtr() const {
+ return *inner_->GetStringPtrPtr();
+ }
};
} // namespace proxy