Index: chrome/renderer/searchbox/searchbox_extension.cc |
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc |
index 4b3043a185357058b25049ec770f7fffc355339d..87b280590b30c6b6aafa94c05db4cdeb89e5a402 100644 |
--- a/chrome/renderer/searchbox/searchbox_extension.cc |
+++ b/chrome/renderer/searchbox/searchbox_extension.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/renderer/searchbox/searchbox_extension.h" |
#include "base/i18n/rtl.h" |
+#include "base/metrics/histogram.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
@@ -51,6 +52,10 @@ const char kThemeAttributionFormat[] = |
const char kLTRHtmlTextDirection[] = "ltr"; |
const char kRTLHtmlTextDirection[] = "rtl"; |
+const int kDefaultUmaMin = 1; |
+const int kDefaultUmaMax = 1000000; |
+const int kDefaultUmaBucketCount = 50; |
+ |
// Converts a V8 value to a string16. |
string16 V8ValueToUTF16(v8::Handle<v8::Value> v) { |
v8::String::Value s(v); |
@@ -647,6 +652,9 @@ class SearchBoxExtensionWrapper : public v8::Extension { |
static void GetMostVisitedItemData( |
const v8::FunctionCallbackInfo<v8::Value>& args); |
+ // Logs information from the iframes on the NTP. |
+ static void LogEvent(const v8::FunctionCallbackInfo<v8::Value>& args); |
+ |
// Gets whether the omnibox has focus or not. |
static void IsFocused(const v8::FunctionCallbackInfo<v8::Value>& args); |
@@ -739,6 +747,8 @@ v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction( |
return v8::FunctionTemplate::New(GetSuggestionData); |
if (name->Equals(v8::String::New("GetMostVisitedItemData"))) |
return v8::FunctionTemplate::New(GetMostVisitedItemData); |
+ if (name->Equals(v8::String::New("LogEvent"))) |
+ return v8::FunctionTemplate::New(LogEvent); |
if (name->Equals(v8::String::New("IsFocused"))) |
return v8::FunctionTemplate::New(IsFocused); |
if (name->Equals(v8::String::New("IsInputInProgress"))) |
@@ -1458,6 +1468,52 @@ void SearchBoxExtensionWrapper::GetMostVisitedItemData( |
} |
// static |
+void SearchBoxExtensionWrapper::LogEvent( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ content::RenderView* render_view = GetRenderViewWithCheckedOrigin( |
+ GURL(chrome::kChromeSearchMostVisitedUrl)); |
+ if (!render_view) return; |
+ |
+ if (args.Length() < 2 || !args[0]->IsString() || !args[1]->IsNumber()) |
+ return; |
+ |
+ DVLOG(1) << render_view << " LogEvent"; |
+ |
+ std::string histogram_name = *v8::String::Utf8Value(args[0]->ToString()); |
+ int value = args[1]->IntegerValue(); |
+ |
+ if (histogram_name == "NewTabPage.NumberOfMouseOvers") { |
+ SearchBox::Get(render_view)->LogIframeHover(); |
+ return; |
+ } |
+ |
+ if (!args[2]->IsNull() && args[2]->IsNumber()) { |
Jered
2013/06/26 16:37:57
What is up with this code? I don't see where it's
annark1
2013/06/28 15:30:49
This was intended to make the LogEvent function mo
|
+ int boundary = args[2]->IntegerValue(); |
+ int bucket_count = boundary; |
+ while (bucket_count >= 100) { |
+ bucket_count /= 10; |
+ } |
+ // As |histogram_name| may change between calls, the |
+ // UMA_HISTOGRAM_ENUMERATION macro cannot be used here. |
+ base::HistogramBase* counter = |
+ base::LinearHistogram::FactoryGet( |
+ histogram_name, 1, boundary, bucket_count + 1, |
+ base::HistogramBase::kUmaTargetedHistogramFlag); |
+ counter->Add(value); |
+ } else { |
+ // See above comment regarding UMA macros. |
+ base::HistogramBase* counter = |
+ base::Histogram::FactoryGet( |
+ histogram_name, |
+ kDefaultUmaMin, |
+ kDefaultUmaMax, |
+ kDefaultUmaBucketCount, |
+ base::HistogramBase::kUmaTargetedHistogramFlag); |
+ counter->Add(value); |
+ } |
+} |
+ |
+// static |
void SearchBoxExtensionWrapper::IsFocused( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
content::RenderView* render_view = GetRenderView(); |