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

Unified Diff: content/browser/child_process_security_policy_impl.cc

Issue 2831683002: Introduce support for origins that require process isolation. (Closed)
Patch Set: Charlie's comments (round 3) Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/child_process_security_policy_impl.cc
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index 28ce45ad809ad34567726a34478ff43627bf5f67..16f4f0efbec14f250bef83b54426b4bb3f05adec 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -14,6 +14,7 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
+#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "build/build_config.h"
#include "content/browser/site_instance_impl.h"
@@ -252,14 +253,10 @@ class ChildProcessSecurityPolicyImpl::SecurityState {
return false;
}
- bool CanAccessDataForOrigin(const GURL& gurl) {
+ bool CanAccessDataForOrigin(const GURL& site_url) {
if (origin_lock_.is_empty())
return true;
- // TODO(creis): We must pass the valid browser_context to convert hosted
- // apps URLs. Currently, hosted apps cannot set cookies in this mode.
- // See http://crbug.com/160576.
- GURL site_gurl = SiteInstanceImpl::GetSiteForURL(NULL, gurl);
- return origin_lock_ == site_gurl;
+ return origin_lock_ == site_url;
}
void LockToOrigin(const GURL& gurl) {
@@ -921,7 +918,16 @@ bool ChildProcessSecurityPolicyImpl::ChildProcessHasPermissionsForFile(
}
bool ChildProcessSecurityPolicyImpl::CanAccessDataForOrigin(int child_id,
- const GURL& gurl) {
+ const GURL& url) {
+ // It's important to call GetSiteForURL before acquiring |lock_|, since
+ // GetSiteForURL consults IsIsolatedOrigin, which needs to grab the same
+ // lock.
+ //
+ // TODO(creis): We must pass the valid browser_context to convert hosted apps
+ // URLs. Currently, hosted apps cannot set cookies in this mode. See
+ // http://crbug.com/160576.
+ GURL site_url = SiteInstanceImpl::GetSiteForURL(NULL, url);
+
base::AutoLock lock(lock_);
SecurityStateMap::iterator state = security_state_.find(child_id);
if (state == security_state_.end()) {
@@ -929,7 +935,7 @@ bool ChildProcessSecurityPolicyImpl::CanAccessDataForOrigin(int child_id,
// workaround for https://crbug.com/600441
return true;
}
- return state->second->CanAccessDataForOrigin(gurl);
+ return state->second->CanAccessDataForOrigin(site_url);
}
bool ChildProcessSecurityPolicyImpl::HasSpecificPermissionForOrigin(
@@ -993,4 +999,32 @@ bool ChildProcessSecurityPolicyImpl::CanSendMidiSysExMessage(int child_id) {
return state->second->can_send_midi_sysex();
}
+void ChildProcessSecurityPolicyImpl::AddIsolatedOrigin(
+ const url::Origin& origin) {
+ CHECK(!origin.unique())
+ << "Cannot register a unique origin as an isolated origin.";
+ CHECK(!IsIsolatedOrigin(origin))
+ << "Duplicate isolated origin: " << origin.Serialize();
+
+ base::AutoLock lock(lock_);
+ isolated_origins_.insert(origin);
+}
+
+void ChildProcessSecurityPolicyImpl::AddIsolatedOriginsFromCommandLine(
+ const std::string& origin_list) {
+ for (const base::StringPiece& origin_piece :
+ base::SplitStringPiece(origin_list, ",", base::TRIM_WHITESPACE,
+ base::SPLIT_WANT_NONEMPTY)) {
+ url::Origin origin((GURL(origin_piece)));
+ if (!origin.unique())
+ AddIsolatedOrigin(origin);
+ }
+}
+
+bool ChildProcessSecurityPolicyImpl::IsIsolatedOrigin(
+ const url::Origin& origin) {
+ base::AutoLock lock(lock_);
+ return isolated_origins_.find(origin) != isolated_origins_.end();
+}
+
} // namespace content
« 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