Chromium Code Reviews| 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(); |