Index: chrome/browser/ssl/ssl_blocking_page.cc |
diff --git a/chrome/browser/ssl/ssl_blocking_page.cc b/chrome/browser/ssl/ssl_blocking_page.cc |
index 33ef57052ff1276b6188ba178617afc077a0de7c..1e8ab90dca742e9572e97d271849225567bf2a31 100644 |
--- a/chrome/browser/ssl/ssl_blocking_page.cc |
+++ b/chrome/browser/ssl/ssl_blocking_page.cc |
@@ -10,6 +10,7 @@ |
#include "base/strings/string_piece.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/values.h" |
+#include "chrome/browser/history/history_service_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/renderer_preferences_util.h" |
#include "chrome/browser/ssl/ssl_error_info.h" |
@@ -70,6 +71,8 @@ enum SSLBlockingPageEvent { |
SHOW_UNDERSTAND, |
SHOW_INTERNAL_HOSTNAME, |
PROCEED_INTERNAL_HOSTNAME, |
+ SHOW_NEW_SITE, |
+ PROCEED_NEW_SITE, |
UNUSED_BLOCKING_PAGE_EVENT, |
}; |
@@ -84,7 +87,8 @@ void RecordSSLBlockingPageDetailedStats( |
int cert_error, |
bool overridable, |
bool internal, |
- const base::TimeTicks& start_time) { |
+ const base::TimeTicks& start_time, |
+ int num_visits) { |
UMA_HISTOGRAM_ENUMERATION("interstitial.ssl_error_type", |
SSLErrorInfo::NetErrorToErrorType(cert_error), SSLErrorInfo::END_OF_ENUM); |
if (start_time.is_null() || !overridable) { |
@@ -93,10 +97,14 @@ void RecordSSLBlockingPageDetailedStats( |
// back. In either case, we don't want to record some of our metrics. |
return; |
} |
+ if (num_visits == 0) |
+ RecordSSLBlockingPageEventStats(SHOW_NEW_SITE); |
if (proceed) { |
RecordSSLBlockingPageEventStats(PROCEED_OVERRIDABLE); |
if (internal) |
RecordSSLBlockingPageEventStats(PROCEED_INTERNAL_HOSTNAME); |
+ if (num_visits == 0) |
+ RecordSSLBlockingPageEventStats(PROCEED_NEW_SITE); |
} else if (!proceed) { |
RecordSSLBlockingPageEventStats(DONT_PROCEED_OVERRIDABLE); |
} |
@@ -158,17 +166,28 @@ SSLBlockingPage::SSLBlockingPage( |
request_url_(request_url), |
overridable_(overridable), |
strict_enforcement_(strict_enforcement), |
- internal_(false) { |
+ internal_(false), |
+ num_visits_(-1) { |
trialCondition_ = base::FieldTrialList::FindFullName(kStudyName); |
+ // For UMA stats. |
if (net::IsHostnameNonUnique(request_url_.HostNoBrackets())) |
internal_ = true; |
- |
RecordSSLBlockingPageEventStats(SHOW_ALL); |
if (overridable_ && !strict_enforcement_) { |
RecordSSLBlockingPageEventStats(SHOW_OVERRIDABLE); |
if (internal_) |
RecordSSLBlockingPageEventStats(SHOW_INTERNAL_HOSTNAME); |
+ HistoryService* history_service = HistoryServiceFactory::GetForProfile( |
+ Profile::FromBrowserContext(web_contents->GetBrowserContext()), |
+ Profile::EXPLICIT_ACCESS); |
+ if (history_service) { |
+ history_service->GetVisibleVisitCountToHost( |
+ request_url_, |
+ &request_consumer_, |
+ base::Bind(&SSLBlockingPage::OnGotHistoryCount, |
+ base::Unretained(this))); |
+ } |
} |
interstitial_page_ = InterstitialPage::Create( |
@@ -183,7 +202,8 @@ SSLBlockingPage::~SSLBlockingPage() { |
cert_error_, |
overridable_ && !strict_enforcement_, |
internal_, |
- display_start_time_); |
+ display_start_time_, |
+ num_visits_); |
// The page is closed without the user having chosen what to do, default to |
// deny. |
NotifyDenyCertificate(); |
@@ -310,7 +330,8 @@ void SSLBlockingPage::OnProceed() { |
cert_error_, |
overridable_ && !strict_enforcement_, |
internal_, |
- display_start_time_); |
+ display_start_time_, |
+ num_visits_); |
// Accepting the certificate resumes the loading of the page. |
NotifyAllowCertificate(); |
} |
@@ -320,7 +341,8 @@ void SSLBlockingPage::OnDontProceed() { |
cert_error_, |
overridable_ && !strict_enforcement_, |
internal_, |
- display_start_time_); |
+ display_start_time_, |
+ num_visits_); |
NotifyDenyCertificate(); |
} |
@@ -358,3 +380,10 @@ void SSLBlockingPage::SetExtraInfo( |
strings->SetString(keys[i], std::string()); |
} |
} |
+ |
+void SSLBlockingPage::OnGotHistoryCount(HistoryService::Handle handle, |
+ bool success, |
+ int num_visits, |
+ base::Time first_visit) { |
+ num_visits_ = num_visits; |
+} |