| OLD | NEW |
| 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/site_instance_impl.h" | 5 #include "content/browser/site_instance_impl.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "content/browser/browsing_instance.h" | 8 #include "content/browser/browsing_instance.h" |
| 9 #include "content/browser/child_process_security_policy_impl.h" | 9 #include "content/browser/child_process_security_policy_impl.h" |
| 10 #include "content/browser/frame_host/debug_urls.h" | 10 #include "content/browser/frame_host/debug_urls.h" |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 const GURL& url) { | 234 const GURL& url) { |
| 235 // This BrowsingInstance may be deleted if it returns an existing | 235 // This BrowsingInstance may be deleted if it returns an existing |
| 236 // SiteInstance. | 236 // SiteInstance. |
| 237 scoped_refptr<BrowsingInstance> instance( | 237 scoped_refptr<BrowsingInstance> instance( |
| 238 new BrowsingInstance(browser_context)); | 238 new BrowsingInstance(browser_context)); |
| 239 return instance->GetSiteInstanceForURL(url); | 239 return instance->GetSiteInstanceForURL(url); |
| 240 } | 240 } |
| 241 | 241 |
| 242 /*static*/ | 242 /*static*/ |
| 243 bool SiteInstance::IsSameWebSite(BrowserContext* browser_context, | 243 bool SiteInstance::IsSameWebSite(BrowserContext* browser_context, |
| 244 const GURL& real_url1, | 244 const GURL& real_src_url, |
| 245 const GURL& real_url2) { | 245 const GURL& real_dest_url) { |
| 246 GURL url1 = SiteInstanceImpl::GetEffectiveURL(browser_context, real_url1); | 246 GURL src_url = SiteInstanceImpl::GetEffectiveURL(browser_context, |
| 247 GURL url2 = SiteInstanceImpl::GetEffectiveURL(browser_context, real_url2); | 247 real_src_url); |
| 248 GURL dest_url = SiteInstanceImpl::GetEffectiveURL(browser_context, |
| 249 real_dest_url); |
| 248 | 250 |
| 249 // We infer web site boundaries based on the registered domain name of the | 251 // We infer web site boundaries based on the registered domain name of the |
| 250 // top-level page and the scheme. We do not pay attention to the port if | 252 // top-level page and the scheme. We do not pay attention to the port if |
| 251 // one is present, because pages served from different ports can still | 253 // one is present, because pages served from different ports can still |
| 252 // access each other if they change their document.domain variable. | 254 // access each other if they change their document.domain variable. |
| 253 | 255 |
| 254 // Some special URLs will match the site instance of any other URL. This is | 256 // Some special URLs will match the site instance of any other URL. This is |
| 255 // done before checking both of them for validity, since we want these URLs | 257 // done before checking both of them for validity, since we want these URLs |
| 256 // to have the same site instance as even an invalid one. | 258 // to have the same site instance as even an invalid one. |
| 257 if (IsRendererDebugURL(url1) || IsRendererDebugURL(url2)) | 259 if (IsRendererDebugURL(src_url) || IsRendererDebugURL(dest_url)) |
| 258 return true; | 260 return true; |
| 259 | 261 |
| 260 // If either URL is invalid, they aren't part of the same site. | 262 // If either URL is invalid, they aren't part of the same site. |
| 261 if (!url1.is_valid() || !url2.is_valid()) | 263 if (!src_url.is_valid() || !dest_url.is_valid()) |
| 262 return false; | 264 return false; |
| 263 | 265 |
| 266 // If the destination url is just a blank page, we treat them as part of the |
| 267 // same site. |
| 268 GURL blank_page(url::kAboutBlankURL); |
| 269 if (dest_url == blank_page) |
| 270 return true; |
| 271 |
| 264 // If the schemes differ, they aren't part of the same site. | 272 // If the schemes differ, they aren't part of the same site. |
| 265 if (url1.scheme() != url2.scheme()) | 273 if (src_url.scheme() != dest_url.scheme()) |
| 266 return false; | 274 return false; |
| 267 | 275 |
| 268 return net::registry_controlled_domains::SameDomainOrHost( | 276 return net::registry_controlled_domains::SameDomainOrHost( |
| 269 url1, | 277 src_url, |
| 270 url2, | 278 dest_url, |
| 271 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); | 279 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); |
| 272 } | 280 } |
| 273 | 281 |
| 274 /*static*/ | 282 /*static*/ |
| 275 GURL SiteInstance::GetSiteForURL(BrowserContext* browser_context, | 283 GURL SiteInstance::GetSiteForURL(BrowserContext* browser_context, |
| 276 const GURL& real_url) { | 284 const GURL& real_url) { |
| 277 // TODO(fsamuel, creis): For some reason appID is not recognized as a host. | 285 // TODO(fsamuel, creis): For some reason appID is not recognized as a host. |
| 278 if (real_url.SchemeIs(kGuestScheme)) | 286 if (real_url.SchemeIs(kGuestScheme)) |
| 279 return real_url; | 287 return real_url; |
| 280 | 288 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 340 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 333 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) || | 341 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) || |
| 334 command_line.HasSwitch(switches::kSitePerProcess)) { | 342 command_line.HasSwitch(switches::kSitePerProcess)) { |
| 335 ChildProcessSecurityPolicyImpl* policy = | 343 ChildProcessSecurityPolicyImpl* policy = |
| 336 ChildProcessSecurityPolicyImpl::GetInstance(); | 344 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 337 policy->LockToOrigin(process_->GetID(), site_); | 345 policy->LockToOrigin(process_->GetID(), site_); |
| 338 } | 346 } |
| 339 } | 347 } |
| 340 | 348 |
| 341 } // namespace content | 349 } // namespace content |
| OLD | NEW |