Chromium Code Reviews| 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 <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 | 43 |
| 44 ExtensionMsg_PermissionSetStruct::~ExtensionMsg_PermissionSetStruct() { | 44 ExtensionMsg_PermissionSetStruct::~ExtensionMsg_PermissionSetStruct() { |
| 45 } | 45 } |
| 46 | 46 |
| 47 std::unique_ptr<const PermissionSet> | 47 std::unique_ptr<const PermissionSet> |
| 48 ExtensionMsg_PermissionSetStruct::ToPermissionSet() const { | 48 ExtensionMsg_PermissionSetStruct::ToPermissionSet() const { |
| 49 return base::WrapUnique(new PermissionSet(apis, manifest_permissions, | 49 return base::WrapUnique(new PermissionSet(apis, manifest_permissions, |
| 50 explicit_hosts, scriptable_hosts)); | 50 explicit_hosts, scriptable_hosts)); |
| 51 } | 51 } |
| 52 | 52 |
| 53 ExtensionMsg_RuntimeBlockedAllowedHostsStruct:: | |
| 54 ExtensionMsg_RuntimeBlockedAllowedHostsStruct() {} | |
| 55 | |
| 56 ExtensionMsg_RuntimeBlockedAllowedHostsStruct:: | |
| 57 ExtensionMsg_RuntimeBlockedAllowedHostsStruct( | |
| 58 const extensions::URLPatternSet& runtime_blocked_hosts, | |
| 59 const extensions::URLPatternSet& runtime_allowed_hosts, | |
| 60 const base::ProcessHandle host) { | |
| 61 auto pickle_urlpatternset = []( | |
| 62 base::Pickle& pickle, const extensions::URLPatternSet& pattern_list) { | |
|
dcheng
2017/01/04 19:38:16
Chromium style does not permit mutable reference p
nrpeter
2017/01/19 01:50:45
Done.
| |
| 63 pickle.WriteUInt32(pattern_list.patterns().size()); | |
| 64 for (URLPatternSet::const_iterator pattern = pattern_list.begin(); | |
| 65 pattern != pattern_list.end(); ++pattern) { | |
| 66 pickle.WriteInt(pattern->valid_schemes()); | |
| 67 pickle.WriteString(pattern->GetAsString()); | |
| 68 } | |
| 69 }; | |
| 70 | |
| 71 base::Pickle pickle; | |
| 72 | |
| 73 pickle_urlpatternset(pickle, runtime_blocked_hosts); | |
| 74 pickle_urlpatternset(pickle, runtime_allowed_hosts); | |
| 75 | |
| 76 size_t alloc_size = pickle.size(); | |
| 77 base::SharedMemoryCreateOptions options; | |
| 78 base::SharedMemory shared_memory; | |
| 79 options.size = alloc_size; | |
| 80 options.share_read_only = true; | |
| 81 | |
| 82 if (!shared_memory.Create(options)) { | |
| 83 LOG(ERROR) << "Cannot create shared memory buffer"; | |
| 84 hosts = base::SharedMemory::NULLHandle(); | |
| 85 return; | |
| 86 } | |
| 87 if (!shared_memory.Map(alloc_size)) { | |
| 88 LOG(ERROR) << "Cannot map shared memory buffer to populate"; | |
| 89 hosts = base::SharedMemory::NULLHandle(); | |
| 90 } | |
| 91 memcpy(shared_memory.memory(), pickle.data(), alloc_size); | |
| 92 if (!shared_memory.ShareReadOnlyToProcess(host, &hosts)) { | |
| 93 LOG(ERROR) << "Cannot share memory buffer to renderer"; | |
| 94 hosts = base::SharedMemory::NULLHandle(); | |
| 95 } | |
| 96 } | |
| 97 | |
| 98 ExtensionMsg_RuntimeBlockedAllowedHostsStruct:: | |
| 99 ExtensionMsg_RuntimeBlockedAllowedHostsStruct( | |
| 100 const ExtensionMsg_RuntimeBlockedAllowedHostsStruct& other) = default; | |
| 101 | |
| 102 void ExtensionMsg_RuntimeBlockedAllowedHostsStruct::Unpickle( | |
| 103 extensions::URLPatternSet* runtime_blocked_hosts, | |
| 104 extensions::URLPatternSet* runtime_allowed_hosts) const { | |
| 105 auto unpickle_urlpatternset = [](URLPatternSet* pattern_list, | |
| 106 base::PickleIterator* iter) { | |
| 107 uint32_t num_patterns = 0; | |
| 108 CHECK(iter->ReadUInt32(&num_patterns)); | |
|
zmin
2016/12/22 22:15:39
Again, CHECK is a very strong assertion. It means
nrpeter
2017/01/19 01:50:45
Done.
| |
| 109 pattern_list->ClearPatterns(); | |
| 110 for (uint32_t i = 0; i < num_patterns; ++i) { | |
| 111 int valid_schemes; | |
| 112 CHECK(iter->ReadInt(&valid_schemes)); | |
| 113 std::string pattern_str; | |
| 114 CHECK(iter->ReadString(&pattern_str)); | |
| 115 URLPattern pattern(valid_schemes); | |
| 116 URLPattern::ParseResult result = pattern.Parse(pattern_str); | |
| 117 CHECK(URLPattern::PARSE_SUCCESS == result) | |
| 118 << URLPattern::GetParseResultString(result) << " " | |
| 119 << pattern_str.c_str(); | |
| 120 pattern_list->AddPattern(pattern); | |
| 121 } | |
| 122 }; | |
| 123 | |
| 124 base::SharedMemory shared_memory(hosts, true); | |
| 125 | |
| 126 shared_memory.Map(sizeof(base::Pickle::Header)); | |
| 127 base::Pickle::Header* pickle_header = | |
| 128 reinterpret_cast<base::Pickle::Header*>(shared_memory.memory()); | |
| 129 int pickle_size = sizeof(base::Pickle::Header) + pickle_header->payload_size; | |
| 130 shared_memory.Unmap(); | |
| 131 shared_memory.Map(pickle_size); | |
| 132 | |
| 133 base::Pickle pickle(reinterpret_cast<char*>(shared_memory.memory()), | |
| 134 pickle_size); | |
| 135 base::PickleIterator iter(pickle); | |
| 136 unpickle_urlpatternset(runtime_blocked_hosts, &iter); | |
| 137 unpickle_urlpatternset(runtime_allowed_hosts, &iter); | |
| 138 } | |
| 139 | |
| 140 ExtensionMsg_RuntimeBlockedAllowedHostsStruct:: | |
| 141 ~ExtensionMsg_RuntimeBlockedAllowedHostsStruct() {} | |
| 142 | |
| 53 ExtensionMsg_Loaded_Params::ExtensionMsg_Loaded_Params() | 143 ExtensionMsg_Loaded_Params::ExtensionMsg_Loaded_Params() |
| 54 : location(Manifest::INVALID_LOCATION), | 144 : location(Manifest::INVALID_LOCATION), |
| 55 creation_flags(Extension::NO_FLAGS) {} | 145 creation_flags(Extension::NO_FLAGS) {} |
| 56 | 146 |
| 57 ExtensionMsg_Loaded_Params::~ExtensionMsg_Loaded_Params() {} | 147 ExtensionMsg_Loaded_Params::~ExtensionMsg_Loaded_Params() {} |
| 58 | 148 |
| 59 ExtensionMsg_Loaded_Params::ExtensionMsg_Loaded_Params( | 149 ExtensionMsg_Loaded_Params::ExtensionMsg_Loaded_Params( |
| 60 const Extension* extension, | 150 const Extension* extension, |
| 61 bool include_tab_permissions) | 151 bool include_tab_permissions, |
| 152 const base::ProcessHandle handle) | |
| 62 : manifest(extension->manifest()->value()->DeepCopy()), | 153 : manifest(extension->manifest()->value()->DeepCopy()), |
| 63 location(extension->location()), | 154 location(extension->location()), |
| 64 path(extension->path()), | 155 path(extension->path()), |
| 65 active_permissions(extension->permissions_data()->active_permissions()), | 156 active_permissions(extension->permissions_data()->active_permissions()), |
| 66 withheld_permissions(extension->permissions_data() | 157 withheld_permissions( |
| 67 ->withheld_permissions()), | 158 extension->permissions_data()->withheld_permissions()), |
| 159 hosts(ExtensionMsg_RuntimeBlockedAllowedHostsStruct( | |
| 160 extension->permissions_data()->runtime_blocked_hosts(), | |
| 161 extension->permissions_data()->runtime_allowed_hosts(), | |
| 162 handle)), | |
| 163 is_default_runtime_blocked_allowed_hosts( | |
| 164 extension->permissions_data()->IsRuntimeBlockedAllowedHostsDefault()), | |
| 68 id(extension->id()), | 165 id(extension->id()), |
| 69 creation_flags(extension->creation_flags()) { | 166 creation_flags(extension->creation_flags()) { |
| 70 if (include_tab_permissions) { | 167 if (include_tab_permissions) { |
| 71 for (const auto& pair : | 168 for (const auto& pair : |
| 72 extension->permissions_data()->tab_specific_permissions()) { | 169 extension->permissions_data()->tab_specific_permissions()) { |
| 73 tab_specific_permissions[pair.first] = | 170 tab_specific_permissions[pair.first] = |
| 74 ExtensionMsg_PermissionSetStruct(*pair.second); | 171 ExtensionMsg_PermissionSetStruct(*pair.second); |
| 75 } | 172 } |
| 76 } | 173 } |
| 77 } | 174 } |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 *r = HostID(type, id); | 427 *r = HostID(type, id); |
| 331 return true; | 428 return true; |
| 332 } | 429 } |
| 333 | 430 |
| 334 void ParamTraits<HostID>::Log( | 431 void ParamTraits<HostID>::Log( |
| 335 const param_type& p, std::string* l) { | 432 const param_type& p, std::string* l) { |
| 336 LogParam(p.type(), l); | 433 LogParam(p.type(), l); |
| 337 LogParam(p.id(), l); | 434 LogParam(p.id(), l); |
| 338 } | 435 } |
| 339 | 436 |
| 437 void ParamTraits<ExtensionMsg_RuntimeBlockedAllowedHostsStruct>::GetSize( | |
| 438 base::PickleSizer* s, | |
| 439 const param_type& p) { | |
| 440 GetParamSize(s, p.hosts); | |
| 441 } | |
| 442 | |
| 443 void ParamTraits<ExtensionMsg_RuntimeBlockedAllowedHostsStruct>::Write( | |
| 444 base::Pickle* m, | |
| 445 const param_type& p) { | |
| 446 WriteParam(m, p.hosts); | |
| 447 } | |
| 448 | |
| 449 bool ParamTraits<ExtensionMsg_RuntimeBlockedAllowedHostsStruct>::Read( | |
| 450 const base::Pickle* m, | |
| 451 base::PickleIterator* iter, | |
| 452 param_type* p) { | |
| 453 return ReadParam(m, iter, &p->hosts); | |
| 454 } | |
| 455 | |
| 456 void ParamTraits<ExtensionMsg_RuntimeBlockedAllowedHostsStruct>::Log( | |
| 457 const param_type& p, | |
| 458 std::string* l) { | |
| 459 LogParam(p.hosts, l); | |
| 460 } | |
| 461 | |
| 340 void ParamTraits<ExtensionMsg_PermissionSetStruct>::GetSize( | 462 void ParamTraits<ExtensionMsg_PermissionSetStruct>::GetSize( |
| 341 base::PickleSizer* s, const param_type& p) { | 463 base::PickleSizer* s, const param_type& p) { |
| 342 GetParamSize(s, p.apis); | 464 GetParamSize(s, p.apis); |
| 343 GetParamSize(s, p.manifest_permissions); | 465 GetParamSize(s, p.manifest_permissions); |
| 344 GetParamSize(s, p.explicit_hosts); | 466 GetParamSize(s, p.explicit_hosts); |
| 345 GetParamSize(s, p.scriptable_hosts); | 467 GetParamSize(s, p.scriptable_hosts); |
| 346 } | 468 } |
| 347 | 469 |
| 348 void ParamTraits<ExtensionMsg_PermissionSetStruct>::Write(base::Pickle* m, | 470 void ParamTraits<ExtensionMsg_PermissionSetStruct>::Write(base::Pickle* m, |
| 349 const param_type& p) { | 471 const param_type& p) { |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 374 void ParamTraits<ExtensionMsg_Loaded_Params>::Write(base::Pickle* m, | 496 void ParamTraits<ExtensionMsg_Loaded_Params>::Write(base::Pickle* m, |
| 375 const param_type& p) { | 497 const param_type& p) { |
| 376 WriteParam(m, p.location); | 498 WriteParam(m, p.location); |
| 377 WriteParam(m, p.path); | 499 WriteParam(m, p.path); |
| 378 WriteParam(m, *(p.manifest)); | 500 WriteParam(m, *(p.manifest)); |
| 379 WriteParam(m, p.creation_flags); | 501 WriteParam(m, p.creation_flags); |
| 380 WriteParam(m, p.id); | 502 WriteParam(m, p.id); |
| 381 WriteParam(m, p.active_permissions); | 503 WriteParam(m, p.active_permissions); |
| 382 WriteParam(m, p.withheld_permissions); | 504 WriteParam(m, p.withheld_permissions); |
| 383 WriteParam(m, p.tab_specific_permissions); | 505 WriteParam(m, p.tab_specific_permissions); |
| 506 WriteParam(m, p.hosts); | |
| 507 WriteParam(m, p.is_default_runtime_blocked_allowed_hosts); | |
| 384 } | 508 } |
| 385 | 509 |
| 386 bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m, | 510 bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m, |
| 387 base::PickleIterator* iter, | 511 base::PickleIterator* iter, |
| 388 param_type* p) { | 512 param_type* p) { |
| 389 p->manifest.reset(new base::DictionaryValue()); | 513 p->manifest.reset(new base::DictionaryValue()); |
| 390 return ReadParam(m, iter, &p->location) && ReadParam(m, iter, &p->path) && | 514 return ReadParam(m, iter, &p->location) && ReadParam(m, iter, &p->path) && |
| 391 ReadParam(m, iter, p->manifest.get()) && | 515 ReadParam(m, iter, p->manifest.get()) && |
| 392 ReadParam(m, iter, &p->creation_flags) && ReadParam(m, iter, &p->id) && | 516 ReadParam(m, iter, &p->creation_flags) && ReadParam(m, iter, &p->id) && |
| 393 ReadParam(m, iter, &p->active_permissions) && | 517 ReadParam(m, iter, &p->active_permissions) && |
| 394 ReadParam(m, iter, &p->withheld_permissions) && | 518 ReadParam(m, iter, &p->withheld_permissions) && |
| 395 ReadParam(m, iter, &p->tab_specific_permissions); | 519 ReadParam(m, iter, &p->tab_specific_permissions) && |
| 520 ReadParam(m, iter, &p->hosts) && | |
| 521 ReadParam(m, iter, &p->is_default_runtime_blocked_allowed_hosts); | |
| 396 } | 522 } |
| 397 | 523 |
| 398 void ParamTraits<ExtensionMsg_Loaded_Params>::Log(const param_type& p, | 524 void ParamTraits<ExtensionMsg_Loaded_Params>::Log(const param_type& p, |
| 399 std::string* l) { | 525 std::string* l) { |
| 400 l->append(p.id); | 526 l->append(p.id); |
| 401 } | 527 } |
| 402 | 528 |
| 403 } // namespace IPC | 529 } // namespace IPC |
| OLD | NEW |