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

Side by Side Diff: ppapi/proxy/serialized_var.h

Issue 16140011: Don't send PP_Vars/V8 values with cycles across PostMessage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PPAPI_PROXY_SERIALIZED_VAR_H_ 5 #ifndef PPAPI_PROXY_SERIALIZED_VAR_H_
6 #define PPAPI_PROXY_SERIALIZED_VAR_H_ 6 #define PPAPI_PROXY_SERIALIZED_VAR_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 ~SerializedVar(); 77 ~SerializedVar();
78 78
79 // Backend implementation for IPC::ParamTraits<SerializedVar>. 79 // Backend implementation for IPC::ParamTraits<SerializedVar>.
80 void WriteToMessage(IPC::Message* m) const { 80 void WriteToMessage(IPC::Message* m) const {
81 inner_->WriteToMessage(m); 81 inner_->WriteToMessage(m);
82 } 82 }
83 bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter) { 83 bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter) {
84 return inner_->ReadFromMessage(m, iter); 84 return inner_->ReadFromMessage(m, iter);
85 } 85 }
86 86
87 bool is_valid_var() const {
88 return inner_->is_valid_var();
89 }
90
87 RawVarDataGraph* raw_var_data() const { 91 RawVarDataGraph* raw_var_data() const {
88 return inner_->raw_var_data(); 92 return inner_->raw_var_data();
89 } 93 }
90 94
91 protected: 95 protected:
92 friend class SerializedVarReceiveInput; 96 friend class SerializedVarReceiveInput;
93 friend class SerializedVarReturnValue; 97 friend class SerializedVarReturnValue;
94 friend class SerializedVarOutParam; 98 friend class SerializedVarOutParam;
95 friend class SerializedVarSendInput; 99 friend class SerializedVarSendInput;
96 friend class SerializedVarSendInputShmem; 100 friend class SerializedVarSendInputShmem;
97 friend class SerializedVarTestConstructor; 101 friend class SerializedVarTestConstructor;
98 friend class SerializedVarVectorReceiveInput; 102 friend class SerializedVarVectorReceiveInput;
99 103
100 class PPAPI_PROXY_EXPORT Inner : public base::RefCounted<Inner> { 104 class PPAPI_PROXY_EXPORT Inner : public base::RefCounted<Inner> {
101 public: 105 public:
102 Inner(); 106 Inner();
103 Inner(VarSerializationRules* serialization_rules); 107 Inner(VarSerializationRules* serialization_rules);
104 ~Inner(); 108 ~Inner();
105 109
106 VarSerializationRules* serialization_rules() { 110 VarSerializationRules* serialization_rules() {
107 return serialization_rules_.get(); 111 return serialization_rules_.get();
108 } 112 }
109 void set_serialization_rules(VarSerializationRules* serialization_rules) { 113 void set_serialization_rules(VarSerializationRules* serialization_rules) {
110 serialization_rules_ = serialization_rules; 114 serialization_rules_ = serialization_rules;
111 } 115 }
112 116
117 bool is_valid_var() const {
118 return is_valid_var_;
119 }
120
113 RawVarDataGraph* raw_var_data() { 121 RawVarDataGraph* raw_var_data() {
114 return raw_var_data_.get(); 122 return raw_var_data_.get();
115 } 123 }
116 124
117 // See outer class's declarations above. 125 // See outer class's declarations above.
118 PP_Var GetVar(); 126 PP_Var GetVar();
119 void SetVar(PP_Var var); 127 void SetVar(PP_Var var);
120 void SetInstance(PP_Instance instance); 128 void SetInstance(PP_Instance instance);
121 129
122 // For the SerializedVarTestConstructor, this writes the Var value as if 130 // For the SerializedVarTestConstructor, this writes the Var value as if
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // 163 //
156 // This var may not be complete until the serialization rules are set when 164 // This var may not be complete until the serialization rules are set when
157 // reading from IPC since we'll need that to convert the string_value to 165 // reading from IPC since we'll need that to convert the string_value to
158 // a string ID. Before this, the as_id will be 0 for VARTYPE_STRING. 166 // a string ID. Before this, the as_id will be 0 for VARTYPE_STRING.
159 PP_Var var_; 167 PP_Var var_;
160 168
161 PP_Instance instance_; 169 PP_Instance instance_;
162 170
163 CleanupMode cleanup_mode_; 171 CleanupMode cleanup_mode_;
164 172
173 // If the var is not properly serialized, this will be false.
174 bool is_valid_var_;
175
165 #ifndef NDEBUG 176 #ifndef NDEBUG
166 // When being sent or received over IPC, we should only be serialized or 177 // When being sent or received over IPC, we should only be serialized or
167 // deserialized once. These flags help us assert this is true. 178 // deserialized once. These flags help us assert this is true.
168 mutable bool has_been_serialized_; 179 mutable bool has_been_serialized_;
169 mutable bool has_been_deserialized_; 180 mutable bool has_been_deserialized_;
170 #endif 181 #endif
171 182
172 // ReadFromMessage() may be called on the I/O thread, e.g., when reading the 183 // ReadFromMessage() may be called on the I/O thread, e.g., when reading the
173 // reply to a sync message. We cannot use the var tracker on the I/O thread, 184 // reply to a sync message. We cannot use the var tracker on the I/O thread,
174 // which means we cannot create some types of PP_Var 185 // which means we cannot create some types of PP_Var
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 class PPAPI_PROXY_EXPORT SerializedVarReceiveInput { 346 class PPAPI_PROXY_EXPORT SerializedVarReceiveInput {
336 public: 347 public:
337 // We rely on the implicit constructor here since the IPC layer will call 348 // We rely on the implicit constructor here since the IPC layer will call
338 // us with a SerializedVar. Pass this object by value, the copy constructor 349 // us with a SerializedVar. Pass this object by value, the copy constructor
339 // will pass along the pointer (as cheap as passing a pointer arg). 350 // will pass along the pointer (as cheap as passing a pointer arg).
340 SerializedVarReceiveInput(const SerializedVar& serialized); 351 SerializedVarReceiveInput(const SerializedVar& serialized);
341 ~SerializedVarReceiveInput(); 352 ~SerializedVarReceiveInput();
342 353
343 PP_Var Get(Dispatcher* dispatcher); 354 PP_Var Get(Dispatcher* dispatcher);
344 PP_Var GetForInstance(Dispatcher* dispatcher, PP_Instance instance); 355 PP_Var GetForInstance(Dispatcher* dispatcher, PP_Instance instance);
356 bool is_valid_var() { return serialized_.is_valid_var(); }
345 357
346 private: 358 private:
347 const SerializedVar& serialized_; 359 const SerializedVar& serialized_;
348 }; 360 };
349 361
350 // For receiving an input vector of vars from the remote side. 362 // For receiving an input vector of vars from the remote side.
351 // 363 //
352 // Example: 364 // Example:
353 // OnMsgMyFunction(SerializedVarVectorReceiveInput vector) { 365 // OnMsgMyFunction(SerializedVarVectorReceiveInput vector) {
354 // uint32_t size; 366 // uint32_t size;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 public: 482 public:
471 explicit SerializedVarTestReader(const SerializedVar& var); 483 explicit SerializedVarTestReader(const SerializedVar& var);
472 484
473 PP_Var GetVar() const { return inner_->GetVar(); } 485 PP_Var GetVar() const { return inner_->GetVar(); }
474 }; 486 };
475 487
476 } // namespace proxy 488 } // namespace proxy
477 } // namespace ppapi 489 } // namespace ppapi
478 490
479 #endif // PPAPI_PROXY_SERIALIZED_VAR_H_ 491 #endif // PPAPI_PROXY_SERIALIZED_VAR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698