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

Side by Side Diff: extensions/common/extension_messages.cc

Issue 2499493004: Communicate ExtensionSettings policy to renderers (Closed)
Patch Set: URLPatternSets use shared memory for IPC. Default scope patterns sent once per renderer. Created 4 years 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
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698