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

Side by Side Diff: content/browser/child_process_security_policy_impl.cc

Issue 9360014: Create a content public browser API around the ChildProcessSecurityPolicy class. The implementati... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 8 years, 10 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 #include "content/browser/child_process_security_policy.h" 5 #include "content/browser/child_process_security_policy_impl.h"
6 6
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/platform_file.h" 10 #include "base/platform_file.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "content/browser/site_instance_impl.h" 13 #include "content/browser/site_instance_impl.h"
14 #include "content/public/browser/content_browser_client.h" 14 #include "content/public/browser/content_browser_client.h"
15 #include "content/public/common/bindings_policy.h" 15 #include "content/public/common/bindings_policy.h"
16 #include "content/public/common/url_constants.h" 16 #include "content/public/common/url_constants.h"
17 #include "googleurl/src/gurl.h" 17 #include "googleurl/src/gurl.h"
18 #include "net/url_request/url_request.h" 18 #include "net/url_request/url_request.h"
19 #include "webkit/fileapi/isolated_context.h" 19 #include "webkit/fileapi/isolated_context.h"
20 20
21 using content::ChildProcessSecurityPolicy;
21 using content::SiteInstance; 22 using content::SiteInstance;
22 23
23 static const int kReadFilePermissions = 24 static const int kReadFilePermissions =
24 base::PLATFORM_FILE_OPEN | 25 base::PLATFORM_FILE_OPEN |
25 base::PLATFORM_FILE_READ | 26 base::PLATFORM_FILE_READ |
26 base::PLATFORM_FILE_EXCLUSIVE_READ | 27 base::PLATFORM_FILE_EXCLUSIVE_READ |
27 base::PLATFORM_FILE_ASYNC; 28 base::PLATFORM_FILE_ASYNC;
28 29
29 static const int kEnumerateDirectoryPermissions = 30 static const int kEnumerateDirectoryPermissions =
30 kReadFilePermissions | 31 kReadFilePermissions |
31 base::PLATFORM_FILE_ENUMERATE; 32 base::PLATFORM_FILE_ENUMERATE;
32 33
33 // The SecurityState class is used to maintain per-child process security state 34 // The SecurityState class is used to maintain per-child process security state
34 // information. 35 // information.
35 class ChildProcessSecurityPolicy::SecurityState { 36 class ChildProcessSecurityPolicyImpl::SecurityState {
36 public: 37 public:
37 SecurityState() 38 SecurityState()
38 : enabled_bindings_(0), 39 : enabled_bindings_(0),
39 can_read_raw_cookies_(false) { } 40 can_read_raw_cookies_(false) { }
40 41
41 ~SecurityState() { 42 ~SecurityState() {
42 scheme_policy_.clear(); 43 scheme_policy_.clear();
43 fileapi::IsolatedContext* isolated_context = 44 fileapi::IsolatedContext* isolated_context =
44 fileapi::IsolatedContext::GetInstance(); 45 fileapi::IsolatedContext::GetInstance();
45 for (FileSystemSet::iterator iter = access_granted_filesystems_.begin(); 46 for (FileSystemSet::iterator iter = access_granted_filesystems_.begin();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 bool can_read_raw_cookies_; 156 bool can_read_raw_cookies_;
156 157
157 GURL origin_lock_; 158 GURL origin_lock_;
158 159
159 // The set of isolated filesystems the child process is permitted to access. 160 // The set of isolated filesystems the child process is permitted to access.
160 FileSystemSet access_granted_filesystems_; 161 FileSystemSet access_granted_filesystems_;
161 162
162 DISALLOW_COPY_AND_ASSIGN(SecurityState); 163 DISALLOW_COPY_AND_ASSIGN(SecurityState);
163 }; 164 };
164 165
165 ChildProcessSecurityPolicy::ChildProcessSecurityPolicy() { 166 ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() {
166 // We know about these schemes and believe them to be safe. 167 // We know about these schemes and believe them to be safe.
167 RegisterWebSafeScheme(chrome::kHttpScheme); 168 RegisterWebSafeScheme(chrome::kHttpScheme);
168 RegisterWebSafeScheme(chrome::kHttpsScheme); 169 RegisterWebSafeScheme(chrome::kHttpsScheme);
169 RegisterWebSafeScheme(chrome::kFtpScheme); 170 RegisterWebSafeScheme(chrome::kFtpScheme);
170 RegisterWebSafeScheme(chrome::kDataScheme); 171 RegisterWebSafeScheme(chrome::kDataScheme);
171 RegisterWebSafeScheme("feed"); 172 RegisterWebSafeScheme("feed");
172 RegisterWebSafeScheme(chrome::kBlobScheme); 173 RegisterWebSafeScheme(chrome::kBlobScheme);
173 RegisterWebSafeScheme(chrome::kFileSystemScheme); 174 RegisterWebSafeScheme(chrome::kFileSystemScheme);
174 175
175 // We know about the following pseudo schemes and treat them specially. 176 // We know about the following pseudo schemes and treat them specially.
176 RegisterPseudoScheme(chrome::kAboutScheme); 177 RegisterPseudoScheme(chrome::kAboutScheme);
177 RegisterPseudoScheme(chrome::kJavaScriptScheme); 178 RegisterPseudoScheme(chrome::kJavaScriptScheme);
178 RegisterPseudoScheme(chrome::kViewSourceScheme); 179 RegisterPseudoScheme(chrome::kViewSourceScheme);
179 } 180 }
180 181
181 ChildProcessSecurityPolicy::~ChildProcessSecurityPolicy() { 182 ChildProcessSecurityPolicyImpl::~ChildProcessSecurityPolicyImpl() {
182 web_safe_schemes_.clear(); 183 web_safe_schemes_.clear();
183 pseudo_schemes_.clear(); 184 pseudo_schemes_.clear();
184 STLDeleteContainerPairSecondPointers(security_state_.begin(), 185 STLDeleteContainerPairSecondPointers(security_state_.begin(),
185 security_state_.end()); 186 security_state_.end());
186 security_state_.clear(); 187 security_state_.clear();
187 } 188 }
188 189
189 // static 190 // static
190 ChildProcessSecurityPolicy* ChildProcessSecurityPolicy::GetInstance() { 191 ChildProcessSecurityPolicy* ChildProcessSecurityPolicy::GetInstance() {
191 return Singleton<ChildProcessSecurityPolicy>::get(); 192 return ChildProcessSecurityPolicyImpl::GetInstance();
192 } 193 }
193 194
194 void ChildProcessSecurityPolicy::Add(int child_id) { 195 ChildProcessSecurityPolicyImpl* ChildProcessSecurityPolicyImpl::GetInstance() {
196 return Singleton<ChildProcessSecurityPolicyImpl>::get();
197 }
198
199 void ChildProcessSecurityPolicyImpl::Add(int child_id) {
195 base::AutoLock lock(lock_); 200 base::AutoLock lock(lock_);
196 AddChild(child_id); 201 AddChild(child_id);
197 } 202 }
198 203
199 void ChildProcessSecurityPolicy::AddWorker(int child_id, 204 void ChildProcessSecurityPolicyImpl::AddWorker(int child_id,
200 int main_render_process_id) { 205 int main_render_process_id) {
201 base::AutoLock lock(lock_); 206 base::AutoLock lock(lock_);
202 AddChild(child_id); 207 AddChild(child_id);
203 worker_map_[child_id] = main_render_process_id; 208 worker_map_[child_id] = main_render_process_id;
204 } 209 }
205 210
206 void ChildProcessSecurityPolicy::Remove(int child_id) { 211 void ChildProcessSecurityPolicyImpl::Remove(int child_id) {
207 base::AutoLock lock(lock_); 212 base::AutoLock lock(lock_);
208 if (!security_state_.count(child_id)) 213 if (!security_state_.count(child_id))
209 return; // May be called multiple times. 214 return; // May be called multiple times.
210 215
211 delete security_state_[child_id]; 216 delete security_state_[child_id];
212 security_state_.erase(child_id); 217 security_state_.erase(child_id);
213 worker_map_.erase(child_id); 218 worker_map_.erase(child_id);
214 } 219 }
215 220
216 void ChildProcessSecurityPolicy::RegisterWebSafeScheme( 221 void ChildProcessSecurityPolicyImpl::RegisterWebSafeScheme(
217 const std::string& scheme) { 222 const std::string& scheme) {
218 base::AutoLock lock(lock_); 223 base::AutoLock lock(lock_);
219 DCHECK(web_safe_schemes_.count(scheme) == 0) << "Add schemes at most once."; 224 DCHECK(web_safe_schemes_.count(scheme) == 0) << "Add schemes at most once.";
220 DCHECK(pseudo_schemes_.count(scheme) == 0) << "Web-safe implies not pseudo."; 225 DCHECK(pseudo_schemes_.count(scheme) == 0) << "Web-safe implies not pseudo.";
221 226
222 web_safe_schemes_.insert(scheme); 227 web_safe_schemes_.insert(scheme);
223 } 228 }
224 229
225 bool ChildProcessSecurityPolicy::IsWebSafeScheme(const std::string& scheme) { 230 bool ChildProcessSecurityPolicyImpl::IsWebSafeScheme(
231 const std::string& scheme) {
226 base::AutoLock lock(lock_); 232 base::AutoLock lock(lock_);
227 233
228 return (web_safe_schemes_.find(scheme) != web_safe_schemes_.end()); 234 return (web_safe_schemes_.find(scheme) != web_safe_schemes_.end());
229 } 235 }
230 236
231 void ChildProcessSecurityPolicy::RegisterPseudoScheme( 237 void ChildProcessSecurityPolicyImpl::RegisterPseudoScheme(
232 const std::string& scheme) { 238 const std::string& scheme) {
233 base::AutoLock lock(lock_); 239 base::AutoLock lock(lock_);
234 DCHECK(pseudo_schemes_.count(scheme) == 0) << "Add schemes at most once."; 240 DCHECK(pseudo_schemes_.count(scheme) == 0) << "Add schemes at most once.";
235 DCHECK(web_safe_schemes_.count(scheme) == 0) << 241 DCHECK(web_safe_schemes_.count(scheme) == 0) <<
236 "Pseudo implies not web-safe."; 242 "Pseudo implies not web-safe.";
237 243
238 pseudo_schemes_.insert(scheme); 244 pseudo_schemes_.insert(scheme);
239 } 245 }
240 246
241 bool ChildProcessSecurityPolicy::IsPseudoScheme(const std::string& scheme) { 247 bool ChildProcessSecurityPolicyImpl::IsPseudoScheme(
248 const std::string& scheme) {
242 base::AutoLock lock(lock_); 249 base::AutoLock lock(lock_);
243 250
244 return (pseudo_schemes_.find(scheme) != pseudo_schemes_.end()); 251 return (pseudo_schemes_.find(scheme) != pseudo_schemes_.end());
245 } 252 }
246 253
247 void ChildProcessSecurityPolicy::RegisterDisabledSchemes( 254 void ChildProcessSecurityPolicyImpl::RegisterDisabledSchemes(
248 const std::set<std::string>& schemes) { 255 const std::set<std::string>& schemes) {
249 base::AutoLock lock(lock_); 256 base::AutoLock lock(lock_);
250 disabled_schemes_ = schemes; 257 disabled_schemes_ = schemes;
251 } 258 }
252 259
253 bool ChildProcessSecurityPolicy::IsDisabledScheme(const std::string& scheme) { 260 bool ChildProcessSecurityPolicyImpl::IsDisabledScheme(
261 const std::string& scheme) {
254 base::AutoLock lock(lock_); 262 base::AutoLock lock(lock_);
255 return disabled_schemes_.find(scheme) != disabled_schemes_.end(); 263 return disabled_schemes_.find(scheme) != disabled_schemes_.end();
256 } 264 }
257 265
258 void ChildProcessSecurityPolicy::GrantRequestURL( 266 void ChildProcessSecurityPolicyImpl::GrantRequestURL(
259 int child_id, const GURL& url) { 267 int child_id, const GURL& url) {
260 268
261 if (!url.is_valid()) 269 if (!url.is_valid())
262 return; // Can't grant the capability to request invalid URLs. 270 return; // Can't grant the capability to request invalid URLs.
263 271
264 if (IsWebSafeScheme(url.scheme())) 272 if (IsWebSafeScheme(url.scheme()))
265 return; // The scheme has already been whitelisted for every child process. 273 return; // The scheme has already been whitelisted for every child process.
266 274
267 if (IsPseudoScheme(url.scheme())) { 275 if (IsPseudoScheme(url.scheme())) {
268 // The view-source scheme is a special case of a pseudo-URL that eventually 276 // The view-source scheme is a special case of a pseudo-URL that eventually
(...skipping 14 matching lines...) Expand all
283 SecurityStateMap::iterator state = security_state_.find(child_id); 291 SecurityStateMap::iterator state = security_state_.find(child_id);
284 if (state == security_state_.end()) 292 if (state == security_state_.end())
285 return; 293 return;
286 294
287 // If the child process has been commanded to request a scheme, then we 295 // If the child process has been commanded to request a scheme, then we
288 // grant it the capability to request URLs of that scheme. 296 // grant it the capability to request URLs of that scheme.
289 state->second->GrantScheme(url.scheme()); 297 state->second->GrantScheme(url.scheme());
290 } 298 }
291 } 299 }
292 300
293 void ChildProcessSecurityPolicy::GrantReadFile(int child_id, 301 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id,
294 const FilePath& file) { 302 const FilePath& file) {
295 GrantPermissionsForFile(child_id, file, kReadFilePermissions); 303 GrantPermissionsForFile(child_id, file, kReadFilePermissions);
296 } 304 }
297 305
298 void ChildProcessSecurityPolicy::GrantReadDirectory(int child_id, 306 void ChildProcessSecurityPolicyImpl::GrantReadDirectory(
299 const FilePath& directory) { 307 int child_id, const FilePath& directory) {
300 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); 308 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions);
301 } 309 }
302 310
303 void ChildProcessSecurityPolicy::GrantPermissionsForFile( 311 void ChildProcessSecurityPolicyImpl::GrantPermissionsForFile(
304 int child_id, const FilePath& file, int permissions) { 312 int child_id, const FilePath& file, int permissions) {
305 base::AutoLock lock(lock_); 313 base::AutoLock lock(lock_);
306 314
307 SecurityStateMap::iterator state = security_state_.find(child_id); 315 SecurityStateMap::iterator state = security_state_.find(child_id);
308 if (state == security_state_.end()) 316 if (state == security_state_.end())
309 return; 317 return;
310 318
311 state->second->GrantPermissionsForFile(file, permissions); 319 state->second->GrantPermissionsForFile(file, permissions);
312 } 320 }
313 321
314 void ChildProcessSecurityPolicy::RevokeAllPermissionsForFile( 322 void ChildProcessSecurityPolicyImpl::RevokeAllPermissionsForFile(
315 int child_id, const FilePath& file) { 323 int child_id, const FilePath& file) {
316 base::AutoLock lock(lock_); 324 base::AutoLock lock(lock_);
317 325
318 SecurityStateMap::iterator state = security_state_.find(child_id); 326 SecurityStateMap::iterator state = security_state_.find(child_id);
319 if (state == security_state_.end()) 327 if (state == security_state_.end())
320 return; 328 return;
321 329
322 state->second->RevokeAllPermissionsForFile(file); 330 state->second->RevokeAllPermissionsForFile(file);
323 } 331 }
324 332
325 void ChildProcessSecurityPolicy::GrantAccessFileSystem( 333 void ChildProcessSecurityPolicyImpl::GrantAccessFileSystem(
326 int child_id, const std::string& filesystem_id) { 334 int child_id, const std::string& filesystem_id) {
327 base::AutoLock lock(lock_); 335 base::AutoLock lock(lock_);
328 336
329 SecurityStateMap::iterator state = security_state_.find(child_id); 337 SecurityStateMap::iterator state = security_state_.find(child_id);
330 if (state == security_state_.end()) 338 if (state == security_state_.end())
331 return; 339 return;
332 340
333 state->second->GrantAccessFileSystem(filesystem_id); 341 state->second->GrantAccessFileSystem(filesystem_id);
334 } 342 }
335 343
336 void ChildProcessSecurityPolicy::GrantScheme(int child_id, 344 void ChildProcessSecurityPolicyImpl::GrantScheme(int child_id,
337 const std::string& scheme) { 345 const std::string& scheme) {
338 base::AutoLock lock(lock_); 346 base::AutoLock lock(lock_);
339 347
340 SecurityStateMap::iterator state = security_state_.find(child_id); 348 SecurityStateMap::iterator state = security_state_.find(child_id);
341 if (state == security_state_.end()) 349 if (state == security_state_.end())
342 return; 350 return;
343 351
344 state->second->GrantScheme(scheme); 352 state->second->GrantScheme(scheme);
345 } 353 }
346 354
347 void ChildProcessSecurityPolicy::GrantWebUIBindings(int child_id) { 355 void ChildProcessSecurityPolicyImpl::GrantWebUIBindings(int child_id) {
348 base::AutoLock lock(lock_); 356 base::AutoLock lock(lock_);
349 357
350 SecurityStateMap::iterator state = security_state_.find(child_id); 358 SecurityStateMap::iterator state = security_state_.find(child_id);
351 if (state == security_state_.end()) 359 if (state == security_state_.end())
352 return; 360 return;
353 361
354 state->second->GrantBindings(content::BINDINGS_POLICY_WEB_UI); 362 state->second->GrantBindings(content::BINDINGS_POLICY_WEB_UI);
355 363
356 // Web UI bindings need the ability to request chrome: URLs. 364 // Web UI bindings need the ability to request chrome: URLs.
357 state->second->GrantScheme(chrome::kChromeUIScheme); 365 state->second->GrantScheme(chrome::kChromeUIScheme);
358 366
359 // Web UI pages can contain links to file:// URLs. 367 // Web UI pages can contain links to file:// URLs.
360 state->second->GrantScheme(chrome::kFileScheme); 368 state->second->GrantScheme(chrome::kFileScheme);
361 } 369 }
362 370
363 void ChildProcessSecurityPolicy::GrantReadRawCookies(int child_id) { 371 void ChildProcessSecurityPolicyImpl::GrantReadRawCookies(int child_id) {
364 base::AutoLock lock(lock_); 372 base::AutoLock lock(lock_);
365 373
366 SecurityStateMap::iterator state = security_state_.find(child_id); 374 SecurityStateMap::iterator state = security_state_.find(child_id);
367 if (state == security_state_.end()) 375 if (state == security_state_.end())
368 return; 376 return;
369 377
370 state->second->GrantReadRawCookies(); 378 state->second->GrantReadRawCookies();
371 } 379 }
372 380
373 void ChildProcessSecurityPolicy::RevokeReadRawCookies(int child_id) { 381 void ChildProcessSecurityPolicyImpl::RevokeReadRawCookies(int child_id) {
374 base::AutoLock lock(lock_); 382 base::AutoLock lock(lock_);
375 383
376 SecurityStateMap::iterator state = security_state_.find(child_id); 384 SecurityStateMap::iterator state = security_state_.find(child_id);
377 if (state == security_state_.end()) 385 if (state == security_state_.end())
378 return; 386 return;
379 387
380 state->second->RevokeReadRawCookies(); 388 state->second->RevokeReadRawCookies();
381 } 389 }
382 390
383 bool ChildProcessSecurityPolicy::CanRequestURL( 391 bool ChildProcessSecurityPolicyImpl::CanRequestURL(
384 int child_id, const GURL& url) { 392 int child_id, const GURL& url) {
385 if (!url.is_valid()) 393 if (!url.is_valid())
386 return false; // Can't request invalid URLs. 394 return false; // Can't request invalid URLs.
387 395
388 if (IsDisabledScheme(url.scheme())) 396 if (IsDisabledScheme(url.scheme()))
389 return false; // The scheme is disabled by policy. 397 return false; // The scheme is disabled by policy.
390 398
391 if (IsWebSafeScheme(url.scheme())) 399 if (IsWebSafeScheme(url.scheme()))
392 return true; // The scheme has been white-listed for every child process. 400 return true; // The scheme has been white-listed for every child process.
393 401
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 SecurityStateMap::iterator state = security_state_.find(child_id); 433 SecurityStateMap::iterator state = security_state_.find(child_id);
426 if (state == security_state_.end()) 434 if (state == security_state_.end())
427 return false; 435 return false;
428 436
429 // Otherwise, we consult the child process's security state to see if it is 437 // Otherwise, we consult the child process's security state to see if it is
430 // allowed to request the URL. 438 // allowed to request the URL.
431 return state->second->CanRequestURL(url); 439 return state->second->CanRequestURL(url);
432 } 440 }
433 } 441 }
434 442
435 bool ChildProcessSecurityPolicy::CanReadFile(int child_id, 443 bool ChildProcessSecurityPolicyImpl::CanReadFile(int child_id,
436 const FilePath& file) { 444 const FilePath& file) {
437 return HasPermissionsForFile(child_id, file, kReadFilePermissions); 445 return HasPermissionsForFile(child_id, file, kReadFilePermissions);
438 } 446 }
439 447
440 bool ChildProcessSecurityPolicy::CanReadDirectory(int child_id, 448 bool ChildProcessSecurityPolicyImpl::CanReadDirectory(
441 const FilePath& directory) { 449 int child_id, const FilePath& directory) {
442 return HasPermissionsForFile(child_id, 450 return HasPermissionsForFile(child_id,
443 directory, 451 directory,
444 kEnumerateDirectoryPermissions); 452 kEnumerateDirectoryPermissions);
445 } 453 }
446 454
447 bool ChildProcessSecurityPolicy::HasPermissionsForFile( 455 bool ChildProcessSecurityPolicyImpl::HasPermissionsForFile(
448 int child_id, const FilePath& file, int permissions) { 456 int child_id, const FilePath& file, int permissions) {
449 base::AutoLock lock(lock_); 457 base::AutoLock lock(lock_);
450 bool result = ChildProcessHasPermissionsForFile(child_id, file, permissions); 458 bool result = ChildProcessHasPermissionsForFile(child_id, file, permissions);
451 if (!result) { 459 if (!result) {
452 // If this is a worker thread that has no access to a given file, 460 // If this is a worker thread that has no access to a given file,
453 // let's check that its renderer process has access to that file instead. 461 // let's check that its renderer process has access to that file instead.
454 WorkerToMainProcessMap::iterator iter = worker_map_.find(child_id); 462 WorkerToMainProcessMap::iterator iter = worker_map_.find(child_id);
455 if (iter != worker_map_.end() && iter->second != 0) { 463 if (iter != worker_map_.end() && iter->second != 0) {
456 result = ChildProcessHasPermissionsForFile(iter->second, 464 result = ChildProcessHasPermissionsForFile(iter->second,
457 file, 465 file,
458 permissions); 466 permissions);
459 } 467 }
460 } 468 }
461 return result; 469 return result;
462 } 470 }
463 471
464 bool ChildProcessSecurityPolicy::HasWebUIBindings(int child_id) { 472 bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) {
465 base::AutoLock lock(lock_); 473 base::AutoLock lock(lock_);
466 474
467 SecurityStateMap::iterator state = security_state_.find(child_id); 475 SecurityStateMap::iterator state = security_state_.find(child_id);
468 if (state == security_state_.end()) 476 if (state == security_state_.end())
469 return false; 477 return false;
470 478
471 return state->second->has_web_ui_bindings(); 479 return state->second->has_web_ui_bindings();
472 } 480 }
473 481
474 bool ChildProcessSecurityPolicy::CanReadRawCookies(int child_id) { 482 bool ChildProcessSecurityPolicyImpl::CanReadRawCookies(int child_id) {
475 base::AutoLock lock(lock_); 483 base::AutoLock lock(lock_);
476 484
477 SecurityStateMap::iterator state = security_state_.find(child_id); 485 SecurityStateMap::iterator state = security_state_.find(child_id);
478 if (state == security_state_.end()) 486 if (state == security_state_.end())
479 return false; 487 return false;
480 488
481 return state->second->can_read_raw_cookies(); 489 return state->second->can_read_raw_cookies();
482 } 490 }
483 491
484 void ChildProcessSecurityPolicy::AddChild(int child_id) { 492 void ChildProcessSecurityPolicyImpl::AddChild(int child_id) {
485 if (security_state_.count(child_id) != 0) { 493 if (security_state_.count(child_id) != 0) {
486 NOTREACHED() << "Add child process at most once."; 494 NOTREACHED() << "Add child process at most once.";
487 return; 495 return;
488 } 496 }
489 497
490 security_state_[child_id] = new SecurityState(); 498 security_state_[child_id] = new SecurityState();
491 } 499 }
492 500
493 bool ChildProcessSecurityPolicy::ChildProcessHasPermissionsForFile( 501 bool ChildProcessSecurityPolicyImpl::ChildProcessHasPermissionsForFile(
494 int child_id, const FilePath& file, int permissions) { 502 int child_id, const FilePath& file, int permissions) {
495 SecurityStateMap::iterator state = security_state_.find(child_id); 503 SecurityStateMap::iterator state = security_state_.find(child_id);
496 if (state == security_state_.end()) 504 if (state == security_state_.end())
497 return false; 505 return false;
498 return state->second->HasPermissionsForFile(file, permissions); 506 return state->second->HasPermissionsForFile(file, permissions);
499 } 507 }
500 508
501 bool ChildProcessSecurityPolicy::CanUseCookiesForOrigin(int child_id, 509 bool ChildProcessSecurityPolicyImpl::CanUseCookiesForOrigin(int child_id,
502 const GURL& gurl) { 510 const GURL& gurl) {
503 base::AutoLock lock(lock_); 511 base::AutoLock lock(lock_);
504 SecurityStateMap::iterator state = security_state_.find(child_id); 512 SecurityStateMap::iterator state = security_state_.find(child_id);
505 if (state == security_state_.end()) 513 if (state == security_state_.end())
506 return false; 514 return false;
507 return state->second->CanUseCookiesForOrigin(gurl); 515 return state->second->CanUseCookiesForOrigin(gurl);
508 } 516 }
509 517
510 void ChildProcessSecurityPolicy::LockToOrigin(int child_id, const GURL& gurl) { 518 void ChildProcessSecurityPolicyImpl::LockToOrigin(int child_id,
519 const GURL& gurl) {
511 // "gurl" can be currently empty in some cases, such as file://blah. 520 // "gurl" can be currently empty in some cases, such as file://blah.
512 DCHECK(SiteInstanceImpl::GetSiteForURL(NULL, gurl) == gurl); 521 DCHECK(SiteInstanceImpl::GetSiteForURL(NULL, gurl) == gurl);
513 base::AutoLock lock(lock_); 522 base::AutoLock lock(lock_);
514 SecurityStateMap::iterator state = security_state_.find(child_id); 523 SecurityStateMap::iterator state = security_state_.find(child_id);
515 DCHECK(state != security_state_.end()); 524 DCHECK(state != security_state_.end());
516 state->second->LockToOrigin(gurl); 525 state->second->LockToOrigin(gurl);
517 } 526 }
OLDNEW
« no previous file with comments | « content/browser/child_process_security_policy_impl.h ('k') | content/browser/child_process_security_policy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698