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

Unified Diff: content/browser/browsing_instance.cc

Issue 2803673006: PlzNavigate: ensure we don't create extra-processes for ServiceWorkers (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « content/browser/browsing_instance.h ('k') | content/browser/frame_host/navigation_request.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/browsing_instance.cc
diff --git a/content/browser/browsing_instance.cc b/content/browser/browsing_instance.cc
index 5dd0ca4191fe832c5d4eea078c9cab946a8d397b..5705dcecd806b3d731c03bfccc38ee4fb37fa96b 100644
--- a/content/browser/browsing_instance.cc
+++ b/content/browser/browsing_instance.cc
@@ -15,16 +15,49 @@
namespace content {
+namespace {
+
+using BrowsingInstanceList = std::set<BrowsingInstance*>;
+base::LazyInstance<BrowsingInstanceList>::DestructorAtExit
+ g_browsing_instance_list = LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
+
+// static
+scoped_refptr<SiteInstanceImpl> BrowsingInstance::FindSiteInstance(
+ BrowserContext* browser_context,
+ const GURL& url) {
+ for (BrowsingInstance* browsing_instance : g_browsing_instance_list.Get()) {
+ if (browsing_instance->browser_context() == browser_context &&
+ browsing_instance->HasSiteInstance(url)) {
+ return browsing_instance->GetSiteInstanceForURL(url);
+ }
+ }
+ std::string site = SiteInstanceImpl::GetSiteForURL(browser_context, url)
+ .possibly_invalid_spec();
+ for (BrowsingInstance* browsing_instance : g_browsing_instance_list.Get()) {
+ if (browsing_instance->browser_context() != browser_context)
+ continue;
+ if (browsing_instance->site_to_site_instance_map_.find(site) !=
+ browsing_instance->site_to_site_instance_map_.end()) {
+ for (SiteInstanceImpl* instance :
+ browsing_instance->site_to_site_instance_map_[site]) {
+ return instance;
+ }
+ }
+ }
+ return nullptr;
+}
+
BrowsingInstance::BrowsingInstance(BrowserContext* browser_context)
- : browser_context_(browser_context),
- active_contents_count_(0u) {
+ : browser_context_(browser_context), active_contents_count_(0u) {
+ g_browsing_instance_list.Get().insert(this);
}
bool BrowsingInstance::HasSiteInstance(const GURL& url) {
std::string site =
SiteInstanceImpl::GetSiteForURL(browser_context_, url)
.possibly_invalid_spec();
-
return site_instance_map_.find(site) != site_instance_map_.end();
}
@@ -102,7 +135,28 @@ void BrowsingInstance::UnregisterSiteInstance(SiteInstanceImpl* site_instance) {
default_subframe_site_instance_ = nullptr;
}
+void BrowsingInstance::RegisterUsedFor(SiteInstanceImpl* site_instance,
+ std::string site) {
+ auto instances = site_to_site_instance_map_.find(site);
+ if (instances == site_to_site_instance_map_.end())
+ site_to_site_instance_map_[site] = std::set<SiteInstanceImpl*>();
+ site_to_site_instance_map_[site].insert(site_instance);
+}
+
+void BrowsingInstance::UnregisterUsedFor(SiteInstanceImpl* site_instance,
+ const std::set<std::string>& sites) {
+ for (const auto& site : sites) {
+ if (site_to_site_instance_map_.find(site) !=
+ site_to_site_instance_map_.end()) {
+ site_to_site_instance_map_[site].erase(site_instance);
+ if (site_to_site_instance_map_[site].empty())
+ site_to_site_instance_map_.erase(site);
+ }
+ }
+}
+
BrowsingInstance::~BrowsingInstance() {
+ g_browsing_instance_list.Get().erase(this);
// We should only be deleted when all of the SiteInstances that refer to
// us are gone.
DCHECK(site_instance_map_.empty());
« no previous file with comments | « content/browser/browsing_instance.h ('k') | content/browser/frame_host/navigation_request.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698