| 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 |