OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "extensions/common/extension_messages.h" | 5 #include "extensions/common/extension_messages.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "content/public/common/common_param_traits.h" | 9 #include "content/public/common/common_param_traits.h" |
10 #include "extensions/common/extension.h" | 10 #include "extensions/common/extension.h" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 } | 85 } |
86 } | 86 } |
87 return extension; | 87 return extension; |
88 } | 88 } |
89 | 89 |
90 namespace IPC { | 90 namespace IPC { |
91 | 91 |
92 template <> | 92 template <> |
93 struct ParamTraits<Manifest::Location> { | 93 struct ParamTraits<Manifest::Location> { |
94 typedef Manifest::Location param_type; | 94 typedef Manifest::Location param_type; |
95 static void Write(Message* m, const param_type& p) { | 95 static void Write(base::Pickle* m, const param_type& p) { |
96 int val = static_cast<int>(p); | 96 int val = static_cast<int>(p); |
97 WriteParam(m, val); | 97 WriteParam(m, val); |
98 } | 98 } |
99 static bool Read(const Message* m, | 99 static bool Read(const base::Pickle* m, |
100 base::PickleIterator* iter, | 100 base::PickleIterator* iter, |
101 param_type* p) { | 101 param_type* p) { |
102 int val = 0; | 102 int val = 0; |
103 if (!ReadParam(m, iter, &val) || | 103 if (!ReadParam(m, iter, &val) || |
104 val < Manifest::INVALID_LOCATION || | 104 val < Manifest::INVALID_LOCATION || |
105 val >= Manifest::NUM_LOCATIONS) | 105 val >= Manifest::NUM_LOCATIONS) |
106 return false; | 106 return false; |
107 *p = static_cast<param_type>(val); | 107 *p = static_cast<param_type>(val); |
108 return true; | 108 return true; |
109 } | 109 } |
110 static void Log(const param_type& p, std::string* l) { | 110 static void Log(const param_type& p, std::string* l) { |
111 ParamTraits<int>::Log(static_cast<int>(p), l); | 111 ParamTraits<int>::Log(static_cast<int>(p), l); |
112 } | 112 } |
113 }; | 113 }; |
114 | 114 |
115 void ParamTraits<URLPattern>::Write(Message* m, const param_type& p) { | 115 void ParamTraits<URLPattern>::Write(base::Pickle* m, const param_type& p) { |
116 WriteParam(m, p.valid_schemes()); | 116 WriteParam(m, p.valid_schemes()); |
117 WriteParam(m, p.GetAsString()); | 117 WriteParam(m, p.GetAsString()); |
118 } | 118 } |
119 | 119 |
120 bool ParamTraits<URLPattern>::Read(const Message* m, | 120 bool ParamTraits<URLPattern>::Read(const base::Pickle* m, |
121 base::PickleIterator* iter, | 121 base::PickleIterator* iter, |
122 param_type* p) { | 122 param_type* p) { |
123 int valid_schemes; | 123 int valid_schemes; |
124 std::string spec; | 124 std::string spec; |
125 if (!ReadParam(m, iter, &valid_schemes) || | 125 if (!ReadParam(m, iter, &valid_schemes) || |
126 !ReadParam(m, iter, &spec)) | 126 !ReadParam(m, iter, &spec)) |
127 return false; | 127 return false; |
128 | 128 |
129 // TODO(jstritar): We don't want the URLPattern to fail parsing when the | 129 // TODO(jstritar): We don't want the URLPattern to fail parsing when the |
130 // scheme is invalid. Instead, the pattern should parse but it should not | 130 // scheme is invalid. Instead, the pattern should parse but it should not |
131 // match the invalid patterns. We get around this by setting the valid | 131 // match the invalid patterns. We get around this by setting the valid |
132 // schemes after parsing the pattern. Update these method calls once we can | 132 // schemes after parsing the pattern. Update these method calls once we can |
133 // ignore scheme validation with URLPattern parse options. crbug.com/90544 | 133 // ignore scheme validation with URLPattern parse options. crbug.com/90544 |
134 p->SetValidSchemes(URLPattern::SCHEME_ALL); | 134 p->SetValidSchemes(URLPattern::SCHEME_ALL); |
135 URLPattern::ParseResult result = p->Parse(spec); | 135 URLPattern::ParseResult result = p->Parse(spec); |
136 p->SetValidSchemes(valid_schemes); | 136 p->SetValidSchemes(valid_schemes); |
137 return URLPattern::PARSE_SUCCESS == result; | 137 return URLPattern::PARSE_SUCCESS == result; |
138 } | 138 } |
139 | 139 |
140 void ParamTraits<URLPattern>::Log(const param_type& p, std::string* l) { | 140 void ParamTraits<URLPattern>::Log(const param_type& p, std::string* l) { |
141 LogParam(p.GetAsString(), l); | 141 LogParam(p.GetAsString(), l); |
142 } | 142 } |
143 | 143 |
144 void ParamTraits<URLPatternSet>::Write(Message* m, const param_type& p) { | 144 void ParamTraits<URLPatternSet>::Write(base::Pickle* m, const param_type& p) { |
145 WriteParam(m, p.patterns()); | 145 WriteParam(m, p.patterns()); |
146 } | 146 } |
147 | 147 |
148 bool ParamTraits<URLPatternSet>::Read(const Message* m, | 148 bool ParamTraits<URLPatternSet>::Read(const base::Pickle* m, |
149 base::PickleIterator* iter, | 149 base::PickleIterator* iter, |
150 param_type* p) { | 150 param_type* p) { |
151 std::set<URLPattern> patterns; | 151 std::set<URLPattern> patterns; |
152 if (!ReadParam(m, iter, &patterns)) | 152 if (!ReadParam(m, iter, &patterns)) |
153 return false; | 153 return false; |
154 | 154 |
155 for (std::set<URLPattern>::iterator i = patterns.begin(); | 155 for (std::set<URLPattern>::iterator i = patterns.begin(); |
156 i != patterns.end(); ++i) | 156 i != patterns.end(); ++i) |
157 p->AddPattern(*i); | 157 p->AddPattern(*i); |
158 return true; | 158 return true; |
159 } | 159 } |
160 | 160 |
161 void ParamTraits<URLPatternSet>::Log(const param_type& p, std::string* l) { | 161 void ParamTraits<URLPatternSet>::Log(const param_type& p, std::string* l) { |
162 LogParam(p.patterns(), l); | 162 LogParam(p.patterns(), l); |
163 } | 163 } |
164 | 164 |
165 void ParamTraits<APIPermission::ID>::Write( | 165 void ParamTraits<APIPermission::ID>::Write(base::Pickle* m, |
166 Message* m, const param_type& p) { | 166 const param_type& p) { |
167 WriteParam(m, static_cast<int>(p)); | 167 WriteParam(m, static_cast<int>(p)); |
168 } | 168 } |
169 | 169 |
170 bool ParamTraits<APIPermission::ID>::Read(const Message* m, | 170 bool ParamTraits<APIPermission::ID>::Read(const base::Pickle* m, |
171 base::PickleIterator* iter, | 171 base::PickleIterator* iter, |
172 param_type* p) { | 172 param_type* p) { |
173 int api_id = -2; | 173 int api_id = -2; |
174 if (!ReadParam(m, iter, &api_id)) | 174 if (!ReadParam(m, iter, &api_id)) |
175 return false; | 175 return false; |
176 | 176 |
177 *p = static_cast<APIPermission::ID>(api_id); | 177 *p = static_cast<APIPermission::ID>(api_id); |
178 return true; | 178 return true; |
179 } | 179 } |
180 | 180 |
181 void ParamTraits<APIPermission::ID>::Log( | 181 void ParamTraits<APIPermission::ID>::Log( |
182 const param_type& p, std::string* l) { | 182 const param_type& p, std::string* l) { |
183 LogParam(static_cast<int>(p), l); | 183 LogParam(static_cast<int>(p), l); |
184 } | 184 } |
185 | 185 |
186 void ParamTraits<APIPermissionSet>::Write( | 186 void ParamTraits<APIPermissionSet>::Write(base::Pickle* m, |
187 Message* m, const param_type& p) { | 187 const param_type& p) { |
188 APIPermissionSet::const_iterator it = p.begin(); | 188 APIPermissionSet::const_iterator it = p.begin(); |
189 const APIPermissionSet::const_iterator end = p.end(); | 189 const APIPermissionSet::const_iterator end = p.end(); |
190 WriteParam(m, p.size()); | 190 WriteParam(m, p.size()); |
191 for (; it != end; ++it) { | 191 for (; it != end; ++it) { |
192 WriteParam(m, it->id()); | 192 WriteParam(m, it->id()); |
193 it->Write(m); | 193 it->Write(m); |
194 } | 194 } |
195 } | 195 } |
196 | 196 |
197 bool ParamTraits<APIPermissionSet>::Read(const Message* m, | 197 bool ParamTraits<APIPermissionSet>::Read(const base::Pickle* m, |
198 base::PickleIterator* iter, | 198 base::PickleIterator* iter, |
199 param_type* r) { | 199 param_type* r) { |
200 size_t size; | 200 size_t size; |
201 if (!ReadParam(m, iter, &size)) | 201 if (!ReadParam(m, iter, &size)) |
202 return false; | 202 return false; |
203 for (size_t i = 0; i < size; ++i) { | 203 for (size_t i = 0; i < size; ++i) { |
204 APIPermission::ID id; | 204 APIPermission::ID id; |
205 if (!ReadParam(m, iter, &id)) | 205 if (!ReadParam(m, iter, &id)) |
206 return false; | 206 return false; |
207 const APIPermissionInfo* permission_info = | 207 const APIPermissionInfo* permission_info = |
208 extensions::PermissionsInfo::GetInstance()->GetByID(id); | 208 extensions::PermissionsInfo::GetInstance()->GetByID(id); |
209 if (!permission_info) | 209 if (!permission_info) |
210 return false; | 210 return false; |
211 scoped_ptr<APIPermission> p(permission_info->CreateAPIPermission()); | 211 scoped_ptr<APIPermission> p(permission_info->CreateAPIPermission()); |
212 if (!p->Read(m, iter)) | 212 if (!p->Read(m, iter)) |
213 return false; | 213 return false; |
214 r->insert(p.release()); | 214 r->insert(p.release()); |
215 } | 215 } |
216 return true; | 216 return true; |
217 } | 217 } |
218 | 218 |
219 void ParamTraits<APIPermissionSet>::Log( | 219 void ParamTraits<APIPermissionSet>::Log( |
220 const param_type& p, std::string* l) { | 220 const param_type& p, std::string* l) { |
221 LogParam(p.map(), l); | 221 LogParam(p.map(), l); |
222 } | 222 } |
223 | 223 |
224 void ParamTraits<ManifestPermissionSet>::Write( | 224 void ParamTraits<ManifestPermissionSet>::Write(base::Pickle* m, |
225 Message* m, const param_type& p) { | 225 const param_type& p) { |
226 ManifestPermissionSet::const_iterator it = p.begin(); | 226 ManifestPermissionSet::const_iterator it = p.begin(); |
227 const ManifestPermissionSet::const_iterator end = p.end(); | 227 const ManifestPermissionSet::const_iterator end = p.end(); |
228 WriteParam(m, p.size()); | 228 WriteParam(m, p.size()); |
229 for (; it != end; ++it) { | 229 for (; it != end; ++it) { |
230 WriteParam(m, it->name()); | 230 WriteParam(m, it->name()); |
231 it->Write(m); | 231 it->Write(m); |
232 } | 232 } |
233 } | 233 } |
234 | 234 |
235 bool ParamTraits<ManifestPermissionSet>::Read(const Message* m, | 235 bool ParamTraits<ManifestPermissionSet>::Read(const base::Pickle* m, |
236 base::PickleIterator* iter, | 236 base::PickleIterator* iter, |
237 param_type* r) { | 237 param_type* r) { |
238 size_t size; | 238 size_t size; |
239 if (!ReadParam(m, iter, &size)) | 239 if (!ReadParam(m, iter, &size)) |
240 return false; | 240 return false; |
241 for (size_t i = 0; i < size; ++i) { | 241 for (size_t i = 0; i < size; ++i) { |
242 std::string name; | 242 std::string name; |
243 if (!ReadParam(m, iter, &name)) | 243 if (!ReadParam(m, iter, &name)) |
244 return false; | 244 return false; |
245 scoped_ptr<ManifestPermission> p(ManifestHandler::CreatePermission(name)); | 245 scoped_ptr<ManifestPermission> p(ManifestHandler::CreatePermission(name)); |
246 if (!p) | 246 if (!p) |
247 return false; | 247 return false; |
248 if (!p->Read(m, iter)) | 248 if (!p->Read(m, iter)) |
249 return false; | 249 return false; |
250 r->insert(p.release()); | 250 r->insert(p.release()); |
251 } | 251 } |
252 return true; | 252 return true; |
253 } | 253 } |
254 | 254 |
255 void ParamTraits<ManifestPermissionSet>::Log( | 255 void ParamTraits<ManifestPermissionSet>::Log( |
256 const param_type& p, std::string* l) { | 256 const param_type& p, std::string* l) { |
257 LogParam(p.map(), l); | 257 LogParam(p.map(), l); |
258 } | 258 } |
259 | 259 |
260 void ParamTraits<HostID>::Write( | 260 void ParamTraits<HostID>::Write(base::Pickle* m, const param_type& p) { |
261 Message* m, const param_type& p) { | |
262 WriteParam(m, p.type()); | 261 WriteParam(m, p.type()); |
263 WriteParam(m, p.id()); | 262 WriteParam(m, p.id()); |
264 } | 263 } |
265 | 264 |
266 bool ParamTraits<HostID>::Read(const Message* m, | 265 bool ParamTraits<HostID>::Read(const base::Pickle* m, |
267 base::PickleIterator* iter, | 266 base::PickleIterator* iter, |
268 param_type* r) { | 267 param_type* r) { |
269 HostID::HostType type; | 268 HostID::HostType type; |
270 std::string id; | 269 std::string id; |
271 if (!ReadParam(m, iter, &type)) | 270 if (!ReadParam(m, iter, &type)) |
272 return false; | 271 return false; |
273 if (!ReadParam(m, iter, &id)) | 272 if (!ReadParam(m, iter, &id)) |
274 return false; | 273 return false; |
275 *r = HostID(type, id); | 274 *r = HostID(type, id); |
276 return true; | 275 return true; |
277 } | 276 } |
278 | 277 |
279 void ParamTraits<HostID>::Log( | 278 void ParamTraits<HostID>::Log( |
280 const param_type& p, std::string* l) { | 279 const param_type& p, std::string* l) { |
281 LogParam(p.type(), l); | 280 LogParam(p.type(), l); |
282 LogParam(p.id(), l); | 281 LogParam(p.id(), l); |
283 } | 282 } |
284 | 283 |
285 void ParamTraits<ExtensionMsg_PermissionSetStruct>::Write(Message* m, | 284 void ParamTraits<ExtensionMsg_PermissionSetStruct>::Write(base::Pickle* m, |
286 const param_type& p) { | 285 const param_type& p) { |
287 WriteParam(m, p.apis); | 286 WriteParam(m, p.apis); |
288 WriteParam(m, p.manifest_permissions); | 287 WriteParam(m, p.manifest_permissions); |
289 WriteParam(m, p.explicit_hosts); | 288 WriteParam(m, p.explicit_hosts); |
290 WriteParam(m, p.scriptable_hosts); | 289 WriteParam(m, p.scriptable_hosts); |
291 } | 290 } |
292 | 291 |
293 bool ParamTraits<ExtensionMsg_PermissionSetStruct>::Read( | 292 bool ParamTraits<ExtensionMsg_PermissionSetStruct>::Read( |
294 const Message* m, | 293 const base::Pickle* m, |
295 base::PickleIterator* iter, | 294 base::PickleIterator* iter, |
296 param_type* p) { | 295 param_type* p) { |
297 return ReadParam(m, iter, &p->apis) && | 296 return ReadParam(m, iter, &p->apis) && |
298 ReadParam(m, iter, &p->manifest_permissions) && | 297 ReadParam(m, iter, &p->manifest_permissions) && |
299 ReadParam(m, iter, &p->explicit_hosts) && | 298 ReadParam(m, iter, &p->explicit_hosts) && |
300 ReadParam(m, iter, &p->scriptable_hosts); | 299 ReadParam(m, iter, &p->scriptable_hosts); |
301 } | 300 } |
302 | 301 |
303 void ParamTraits<ExtensionMsg_PermissionSetStruct>::Log(const param_type& p, | 302 void ParamTraits<ExtensionMsg_PermissionSetStruct>::Log(const param_type& p, |
304 std::string* l) { | 303 std::string* l) { |
305 LogParam(p.apis, l); | 304 LogParam(p.apis, l); |
306 LogParam(p.manifest_permissions, l); | 305 LogParam(p.manifest_permissions, l); |
307 LogParam(p.explicit_hosts, l); | 306 LogParam(p.explicit_hosts, l); |
308 LogParam(p.scriptable_hosts, l); | 307 LogParam(p.scriptable_hosts, l); |
309 } | 308 } |
310 | 309 |
311 void ParamTraits<ExtensionMsg_Loaded_Params>::Write(Message* m, | 310 void ParamTraits<ExtensionMsg_Loaded_Params>::Write(base::Pickle* m, |
312 const param_type& p) { | 311 const param_type& p) { |
313 WriteParam(m, p.location); | 312 WriteParam(m, p.location); |
314 WriteParam(m, p.path); | 313 WriteParam(m, p.path); |
315 WriteParam(m, *(p.manifest)); | 314 WriteParam(m, *(p.manifest)); |
316 WriteParam(m, p.creation_flags); | 315 WriteParam(m, p.creation_flags); |
317 WriteParam(m, p.active_permissions); | 316 WriteParam(m, p.active_permissions); |
318 WriteParam(m, p.withheld_permissions); | 317 WriteParam(m, p.withheld_permissions); |
319 } | 318 } |
320 | 319 |
321 bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const Message* m, | 320 bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m, |
322 base::PickleIterator* iter, | 321 base::PickleIterator* iter, |
323 param_type* p) { | 322 param_type* p) { |
324 p->manifest.reset(new base::DictionaryValue()); | 323 p->manifest.reset(new base::DictionaryValue()); |
325 return ReadParam(m, iter, &p->location) && ReadParam(m, iter, &p->path) && | 324 return ReadParam(m, iter, &p->location) && ReadParam(m, iter, &p->path) && |
326 ReadParam(m, iter, p->manifest.get()) && | 325 ReadParam(m, iter, p->manifest.get()) && |
327 ReadParam(m, iter, &p->creation_flags) && | 326 ReadParam(m, iter, &p->creation_flags) && |
328 ReadParam(m, iter, &p->active_permissions) && | 327 ReadParam(m, iter, &p->active_permissions) && |
329 ReadParam(m, iter, &p->withheld_permissions); | 328 ReadParam(m, iter, &p->withheld_permissions); |
330 } | 329 } |
331 | 330 |
332 void ParamTraits<ExtensionMsg_Loaded_Params>::Log(const param_type& p, | 331 void ParamTraits<ExtensionMsg_Loaded_Params>::Log(const param_type& p, |
333 std::string* l) { | 332 std::string* l) { |
334 l->append(p.id); | 333 l->append(p.id); |
335 } | 334 } |
336 | 335 |
337 } // namespace IPC | 336 } // namespace IPC |
OLD | NEW |