diff options
author | felt@chromium.org <felt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-09 23:32:37 +0000 |
---|---|---|
committer | felt@chromium.org <felt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-09 23:32:37 +0000 |
commit | 6d0bf1a74389f7660a93366dfb25539e71e4d5c8 (patch) | |
tree | 2f9fbb91688a07194cb0ee822e23727970a82678 /chrome/browser/ssl | |
parent | 227835b276ef54dc2e7cc748303c61a8627a8cd8 (diff) | |
download | chromium_src-6d0bf1a74389f7660a93366dfb25539e71e4d5c8.zip chromium_src-6d0bf1a74389f7660a93366dfb25539e71e4d5c8.tar.gz chromium_src-6d0bf1a74389f7660a93366dfb25539e71e4d5c8.tar.bz2 |
We want to know if users react differently to the SSL warning the first time they encounter a website with an SSL error vs on subsequent encounters with SSL warnings. We determine this by checking to see if a site is in the user's history.
BUG=255288
Review URL: https://chromiumcodereview.appspot.com/22350004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@216776 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ssl')
-rw-r--r-- | chrome/browser/ssl/ssl_blocking_page.cc | 41 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_blocking_page.h | 11 |
2 files changed, 46 insertions, 6 deletions
diff --git a/chrome/browser/ssl/ssl_blocking_page.cc b/chrome/browser/ssl/ssl_blocking_page.cc index 33ef570..1e8ab90 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; +} diff --git a/chrome/browser/ssl/ssl_blocking_page.h b/chrome/browser/ssl/ssl_blocking_page.h index af24412..d4703f4 100644 --- a/chrome/browser/ssl/ssl_blocking_page.h +++ b/chrome/browser/ssl/ssl_blocking_page.h @@ -11,6 +11,7 @@ #include "base/callback.h" #include "base/strings/string16.h" #include "base/time/time.h" +#include "chrome/browser/history/history_service.h" #include "content/public/browser/interstitial_page_delegate.h" #include "net/ssl/ssl_info.h" #include "url/gurl.h" @@ -60,6 +61,12 @@ class SSLBlockingPage : public content::InterstitialPageDelegate { void NotifyDenyCertificate(); void NotifyAllowCertificate(); + // Used to query the HistoryService to see if the URL is in history. For UMA. + void OnGotHistoryCount(HistoryService::Handle handle, + bool success, + int num_visits, + base::Time first_visit); + base::Callback<void(bool)> callback_; content::WebContents* web_contents_; @@ -74,6 +81,10 @@ class SSLBlockingPage : public content::InterstitialPageDelegate { content::InterstitialPage* interstitial_page_; // Owns us. // Is the hostname for an internal network? bool internal_; + // How many times is this same URL in history? + int num_visits_; + // Used for getting num_visits_. + CancelableRequestConsumer request_consumer_; // For the FieldTrial: this contains the name of the condition. std::string trialCondition_; |