summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authornoelutz@google.com <noelutz@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-03 21:47:06 +0000
committernoelutz@google.com <noelutz@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-03 21:47:06 +0000
commit8e1c5a3616e15f83e05766cb94093e8e9710f661 (patch)
tree3e8b7c2538975447e6355eb2c7e3d937e698f471 /chrome
parent7f15369ce670b984dcede7498de03793d6fa00fe (diff)
downloadchromium_src-8e1c5a3616e15f83e05766cb94093e8e9710f661.zip
chromium_src-8e1c5a3616e15f83e05766cb94093e8e9710f661.tar.gz
chromium_src-8e1c5a3616e15f83e05766cb94093e8e9710f661.tar.bz2
Add tracking for scorer creation failures.
BUG=None TEST=None Review URL: http://codereview.chromium.org/6910008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83969 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/renderer/safe_browsing/scorer.cc34
1 files changed, 32 insertions, 2 deletions
diff --git a/chrome/renderer/safe_browsing/scorer.cc b/chrome/renderer/safe_browsing/scorer.cc
index 677e244..636d1b4 100644
--- a/chrome/renderer/safe_browsing/scorer.cc
+++ b/chrome/renderer/safe_browsing/scorer.cc
@@ -9,10 +9,30 @@
#include "base/file_util_proxy.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
+#include "base/metrics/histogram.h"
#include "base/string_piece.h"
#include "chrome/renderer/safe_browsing/client_model.pb.h"
#include "chrome/renderer/safe_browsing/features.h"
+namespace {
+// Enum used to keep stats about the status of the Scorer creation.
+enum ScorerCreationStatus {
+ SCORER_SUCCESS,
+ SCORER_FAIL_MODEL_OPEN_FAIL,
+ SCORER_FAIL_MODEL_FILE_EMPTY,
+ SCORER_FAIL_MODEL_FILE_TOO_LARGE,
+ SCORER_FAIL_MODEL_PARSE_ERROR,
+ SCORER_FAIL_MODEL_MISSING_FIELDS,
+ SCORER_STATUS_MAX // Always add new values before this one.
+};
+
+void RecordScorerCreationStatus(ScorerCreationStatus status) {
+ UMA_HISTOGRAM_ENUMERATION("SBClientPhishing.ScorerCreationStatus",
+ status,
+ SCORER_STATUS_MAX);
+}
+} // namespace
+
namespace safe_browsing {
const int Scorer::kMaxPhishingModelSizeBytes = 70 * 1024;
@@ -67,10 +87,13 @@ class ScorerLoader {
Scorer* scorer = NULL;
if (error_code != base::PLATFORM_FILE_OK) {
DLOG(ERROR) << "Error reading phishing model file: " << error_code;
+ RecordScorerCreationStatus(SCORER_FAIL_MODEL_OPEN_FAIL);
} else if (bytes_read <= 0) {
DLOG(ERROR) << "Empty phishing model file";
+ RecordScorerCreationStatus(SCORER_FAIL_MODEL_FILE_EMPTY);
} else if (bytes_read == Scorer::kMaxPhishingModelSizeBytes) {
DLOG(ERROR) << "Phishing model is too large, ignoring";
+ RecordScorerCreationStatus(SCORER_FAIL_MODEL_FILE_TOO_LARGE);
} else {
memcpy(buffer_, data, bytes_read);
scorer = Scorer::Create(base::StringPiece(buffer_, bytes_read));
@@ -101,12 +124,19 @@ Scorer::~Scorer() {}
Scorer* Scorer::Create(const base::StringPiece& model_str) {
scoped_ptr<Scorer> scorer(new Scorer());
ClientSideModel& model = scorer->model_;
- if (!model.ParseFromArray(model_str.data(), model_str.size()) ||
- !model.IsInitialized()) {
+ if (!model.ParseFromArray(model_str.data(), model_str.size())) {
DLOG(ERROR) << "Unable to parse phishing model. This Scorer object is "
<< "invalid.";
+ RecordScorerCreationStatus(SCORER_FAIL_MODEL_PARSE_ERROR);
+ return NULL;
+ }
+ if (!model.IsInitialized()) {
+ DLOG(ERROR) << "Unable to parse phishing model. The model is missing "
+ << "some required fields. Maybe the .proto file changed?";
+ RecordScorerCreationStatus(SCORER_FAIL_MODEL_MISSING_FIELDS);
return NULL;
}
+ RecordScorerCreationStatus(SCORER_SUCCESS);
for (int i = 0; i < model.page_term_size(); ++i) {
scorer->page_terms_.insert(model.hashes(model.page_term(i)));
}