Index: chrome/browser/site_details.cc |
diff --git a/chrome/browser/site_details.cc b/chrome/browser/site_details.cc |
index 6f2293edb6358ddaeb90ce504df4f4ff2f4c03ba..4624ef5cefddeb430c439ecef00c2faf7306ae59 100644 |
--- a/chrome/browser/site_details.cc |
+++ b/chrome/browser/site_details.cc |
@@ -90,11 +90,11 @@ BrowsingInstanceInfo::BrowsingInstanceInfo() {} |
BrowsingInstanceInfo::~BrowsingInstanceInfo() {} |
-IsolationScenario::IsolationScenario() : policy(ISOLATE_ALL_SITES) {} |
+IsolationScenario::IsolationScenario() {} |
IsolationScenario::~IsolationScenario() {} |
-SiteData::SiteData() : out_of_process_frames(0) { |
+SiteData::SiteData() { |
for (int i = 0; i <= ISOLATION_SCENARIO_LAST; i++) |
scenarios[i].policy = static_cast<IsolationScenarioType>(i); |
} |
@@ -108,9 +108,25 @@ SiteDetails::~SiteDetails() {} |
void SiteDetails::CollectSiteInfo(WebContents* contents, |
SiteData* site_data) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ BrowserContext* context = contents->GetBrowserContext(); |
+ |
+ // The primary should be the same for the whole tab. |
SiteInstance* primary = |
DeterminePrimarySiteInstance(contents->GetSiteInstance(), site_data); |
- BrowserContext* context = primary->GetBrowserContext(); |
+ BrowsingInstanceInfo* browsing_instance = |
+ &site_data->browsing_instances[primary]; |
+ |
+ for (RenderFrameHost* frame : contents->GetAllFrames()) { |
+ // Ensure that we add the frame's SiteInstance to |site_instances|. |
+ DCHECK(frame->GetSiteInstance()->IsRelatedSiteInstance(primary)); |
+ browsing_instance->site_instances.insert(frame->GetSiteInstance()); |
+ browsing_instance->proxy_count += frame->GetProxyCount(); |
+ |
+ if (frame->GetParent()) { |
+ if (frame->GetSiteInstance() != frame->GetParent()->GetSiteInstance()) |
+ site_data->out_of_process_frames++; |
+ } |
+ } |
// Now keep track of how many sites we have in this BrowsingInstance (and |
// overall), including sites in iframes. |
@@ -155,13 +171,6 @@ void SiteDetails::CollectSiteInfo(WebContents* contents, |
} |
} |
- for (RenderFrameHost* frame : contents->GetAllFrames()) { |
- if (frame->GetParent()) { |
- if (frame->GetSiteInstance() != frame->GetParent()->GetSiteInstance()) |
- site_data->out_of_process_frames++; |
- } |
- DeterminePrimarySiteInstance(frame->GetSiteInstance(), site_data); |
- } |
} |
void SiteDetails::UpdateHistograms( |
@@ -177,6 +186,7 @@ void SiteDetails::UpdateHistograms( |
int num_isolated_site_instances[ISOLATION_SCENARIO_LAST + 1] = {}; |
int num_browsing_instances = 0; |
int num_oopifs = 0; |
+ int num_proxies = 0; |
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) { |
@@ -192,6 +202,9 @@ void SiteDetails::UpdateHistograms( |
const BrowsingInstanceInfo& browsing_instance_info = entry.second; |
UMA_HISTOGRAM_COUNTS_100("SiteIsolation.SiteInstancesPerBrowsingInstance", |
browsing_instance_info.site_instances.size()); |
+ UMA_HISTOGRAM_COUNTS_10000("SiteIsolation.ProxyCountPerBrowsingInstance", |
+ browsing_instance_info.proxy_count); |
+ num_proxies += browsing_instance_info.proxy_count; |
} |
num_browsing_instances += site_data.browsing_instances.size(); |
num_oopifs += site_data.out_of_process_frames; |
@@ -215,6 +228,7 @@ void SiteDetails::UpdateHistograms( |
UMA_HISTOGRAM_COUNTS_100( |
"SiteIsolation.BrowsingInstanceCount", |
num_browsing_instances); |
+ UMA_HISTOGRAM_COUNTS_10000("SiteIsolation.ProxyCount", num_proxies); |
UMA_HISTOGRAM_COUNTS_100("SiteIsolation.OutOfProcessIframes", num_oopifs); |
// ISOLATE_NOTHING metrics. |