summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ssl
diff options
context:
space:
mode:
authorfelt@chromium.org <felt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-09 23:32:37 +0000
committerfelt@chromium.org <felt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-09 23:32:37 +0000
commit6d0bf1a74389f7660a93366dfb25539e71e4d5c8 (patch)
tree2f9fbb91688a07194cb0ee822e23727970a82678 /chrome/browser/ssl
parent227835b276ef54dc2e7cc748303c61a8627a8cd8 (diff)
downloadchromium_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.cc41
-rw-r--r--chrome/browser/ssl/ssl_blocking_page.h11
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_;