| Index: chrome/browser/site_details.cc
|
| diff --git a/chrome/browser/site_details.cc b/chrome/browser/site_details.cc
|
| index 157a6460aaf0e7bb097e65a1dab1b1e0a13788ed..6f2293edb6358ddaeb90ce504df4f4ff2f4c03ba 100644
|
| --- a/chrome/browser/site_details.cc
|
| +++ b/chrome/browser/site_details.cc
|
| @@ -58,26 +58,38 @@ bool ShouldIsolate(BrowserContext* browser_context,
|
| }
|
|
|
| content::SiteInstance* DeterminePrimarySiteInstance(
|
| - content::SiteInstance* instance,
|
| + content::SiteInstance* site_instance,
|
| SiteData* site_data) {
|
| // Find the BrowsingInstance this WebContents belongs to by iterating over
|
| // the "primary" SiteInstances of each BrowsingInstance we've seen so far.
|
| - for (auto& existing_site_instance : site_data->instances) {
|
| - if (instance->IsRelatedSiteInstance(existing_site_instance.first)) {
|
| - existing_site_instance.second.insert(instance);
|
| - return existing_site_instance.first;
|
| + for (auto& entry : site_data->browsing_instances) {
|
| + BrowsingInstanceInfo* browsing_instance = &entry.second;
|
| + content::SiteInstance* primary_for_browsing_instance = entry.first;
|
| +
|
| + if (site_instance->IsRelatedSiteInstance(primary_for_browsing_instance)) {
|
| + browsing_instance->site_instances.insert(site_instance);
|
| + return primary_for_browsing_instance;
|
| }
|
| }
|
|
|
| // Add |instance| as the "primary" SiteInstance of a new BrowsingInstance.
|
| - site_data->instances[instance].clear();
|
| - site_data->instances[instance].insert(instance);
|
| + BrowsingInstanceInfo* browsing_instance =
|
| + &site_data->browsing_instances[site_instance];
|
| + browsing_instance->site_instances.insert(site_instance);
|
|
|
| - return instance;
|
| + return site_instance;
|
| }
|
|
|
| } // namespace
|
|
|
| +ScenarioBrowsingInstanceInfo::ScenarioBrowsingInstanceInfo() {}
|
| +
|
| +ScenarioBrowsingInstanceInfo::~ScenarioBrowsingInstanceInfo() {}
|
| +
|
| +BrowsingInstanceInfo::BrowsingInstanceInfo() {}
|
| +
|
| +BrowsingInstanceInfo::~BrowsingInstanceInfo() {}
|
| +
|
| IsolationScenario::IsolationScenario() : policy(ISOLATE_ALL_SITES) {}
|
|
|
| IsolationScenario::~IsolationScenario() {}
|
| @@ -135,8 +147,8 @@ void SiteDetails::CollectSiteInfo(WebContents* contents,
|
|
|
| // We model process-per-site by only inserting those sites into the first
|
| // browsing instance in which they appear.
|
| - if (scenario.sites.insert(site).second || !process_per_site)
|
| - scenario.browsing_instance_site_map[primary->GetId()].insert(site);
|
| + if (scenario.all_sites.insert(site).second || !process_per_site)
|
| + scenario.browsing_instances[primary->GetId()].sites.insert(site);
|
|
|
| // Record our result in |frame_urls| for use by children.
|
| frame_urls[frame] = site;
|
| @@ -165,22 +177,24 @@ void SiteDetails::UpdateHistograms(
|
| int num_isolated_site_instances[ISOLATION_SCENARIO_LAST + 1] = {};
|
| int num_browsing_instances = 0;
|
| int num_oopifs = 0;
|
| - for (BrowserContextSiteDataMap::const_iterator i = site_data_map.begin();
|
| - i != site_data_map.end(); ++i) {
|
| - for (const IsolationScenario& scenario : i->second.scenarios) {
|
| - num_sites[scenario.policy] += scenario.sites.size();
|
| - for (auto& browsing_instance : scenario.browsing_instance_site_map) {
|
| + for (auto& site_data_map_entry : site_data_map) {
|
| + const SiteData& site_data = site_data_map_entry.second;
|
| + for (const IsolationScenario& scenario : site_data.scenarios) {
|
| + num_sites[scenario.policy] += scenario.all_sites.size();
|
| + for (auto& entry : scenario.browsing_instances) {
|
| + const ScenarioBrowsingInstanceInfo& scenario_browsing_instance_info =
|
| + entry.second;
|
| num_isolated_site_instances[scenario.policy] +=
|
| - browsing_instance.second.size();
|
| + scenario_browsing_instance_info.sites.size();
|
| }
|
| }
|
| - num_browsing_instances += i->second.scenarios[ISOLATE_ALL_SITES]
|
| - .browsing_instance_site_map.size();
|
| - for (const auto& site_instance : i->second.instances) {
|
| + for (const auto& entry : site_data.browsing_instances) {
|
| + const BrowsingInstanceInfo& browsing_instance_info = entry.second;
|
| UMA_HISTOGRAM_COUNTS_100("SiteIsolation.SiteInstancesPerBrowsingInstance",
|
| - site_instance.second.size());
|
| + browsing_instance_info.site_instances.size());
|
| }
|
| - num_oopifs += i->second.out_of_process_frames;
|
| + num_browsing_instances += site_data.browsing_instances.size();
|
| + num_oopifs += site_data.out_of_process_frames;
|
| }
|
|
|
| // Predict the number of processes needed when isolating all sites, when
|
|
|