diff options
author | beaudoin@chromium.org <beaudoin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-14 00:27:13 +0000 |
---|---|---|
committer | beaudoin@chromium.org <beaudoin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-14 00:27:13 +0000 |
commit | c74876d2cc8be84a4b4c4acdf2497d17716e1d3a (patch) | |
tree | 466052018f7a82e158f1e86317e54b378f75285e /chrome/renderer | |
parent | 94730a76ed35eeeddf23fcf4991e44b3dc0b684a (diff) | |
download | chromium_src-c74876d2cc8be84a4b4c4acdf2497d17716e1d3a.zip chromium_src-c74876d2cc8be84a4b4c4acdf2497d17716e1d3a.tar.gz chromium_src-c74876d2cc8be84a4b4c4acdf2497d17716e1d3a.tar.bz2 |
[Most Visited] Log per-provider impressions to UMA.
Ensures every thumbnail iframe logs in UMA its position in a histogram that matches the name of the suggestion provider.
BUG=None
TEST=None
Review URL: https://codereview.chromium.org/114413003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240818 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/resources/extensions/searchbox_api.js | 7 | ||||
-rw-r--r-- | chrome/renderer/searchbox/searchbox.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/searchbox/searchbox.h | 3 | ||||
-rw-r--r-- | chrome/renderer/searchbox/searchbox_extension.cc | 21 |
4 files changed, 37 insertions, 0 deletions
diff --git a/chrome/renderer/resources/extensions/searchbox_api.js b/chrome/renderer/resources/extensions/searchbox_api.js index 5b2d441..bba7b28 100644 --- a/chrome/renderer/resources/extensions/searchbox_api.js +++ b/chrome/renderer/resources/extensions/searchbox_api.js @@ -87,6 +87,7 @@ if (!chrome.embeddedSearch) { native function GetThemeBackgroundInfo(); native function IsInputInProgress(); native function LogEvent(); + native function LogImpression(); native function NavigateContentWindow(); native function UndoAllMostVisitedDeletions(); native function UndoMostVisitedDeletion(); @@ -134,6 +135,12 @@ if (!chrome.embeddedSearch) { LogEvent(histogram_name); }; + // This method is restricted to chrome-search://most-visited pages by + // checking the invoking context's origin in searchbox_extension.cc. + this.logImpression = function(position, provider) { + LogImpression(position, provider); + }; + this.navigateContentWindow = function(destination, disposition) { NavigateContentWindow(destination, disposition); }; diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc index cfd98fe..8fa87b4 100644 --- a/chrome/renderer/searchbox/searchbox.cc +++ b/chrome/renderer/searchbox/searchbox.cc @@ -162,6 +162,12 @@ void SearchBox::LogEvent(NTPLoggingEventType event) { render_view()->GetRoutingID(), render_view()->GetPageId(), event)); } +void SearchBox::LogImpression(int position, const base::string16& provider) { + render_view()->Send(new ChromeViewHostMsg_LogImpression( + render_view()->GetRoutingID(), render_view()->GetPageId(), position, + provider)); +} + void SearchBox::CheckIsUserSignedInToChromeAs(const base::string16& identity) { render_view()->Send(new ChromeViewHostMsg_ChromeIdentityCheck( render_view()->GetRoutingID(), render_view()->GetPageId(), identity)); diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h index 77a2f9a..4c6c4e5 100644 --- a/chrome/renderer/searchbox/searchbox.h +++ b/chrome/renderer/searchbox/searchbox.h @@ -31,6 +31,9 @@ class SearchBox : public content::RenderViewObserver, // Sends ChromeViewHostMsg_LogEvent to the browser. void LogEvent(NTPLoggingEventType event); + // Sends ChromeViewHostMsg_LogImpression to the browser. + void LogImpression(int position, const base::string16& provider); + // Sends ChromeViewHostMsg_ChromeIdentityCheck to the browser. void CheckIsUserSignedInToChromeAs(const base::string16& identity); diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc index 19bc48b..4aba699 100644 --- a/chrome/renderer/searchbox/searchbox_extension.cc +++ b/chrome/renderer/searchbox/searchbox_extension.cc @@ -404,6 +404,9 @@ class SearchBoxExtensionWrapper : public v8::Extension { // Logs information from the iframes/titles on the NTP. static void LogEvent(const v8::FunctionCallbackInfo<v8::Value>& args); + // Logs an impression on one of the Most Visited tile on the NTP. + static void LogImpression(const v8::FunctionCallbackInfo<v8::Value>& args); + // Navigates the window to a URL represented by either a URL string or a // restricted ID. static void NavigateContentWindow( @@ -560,6 +563,8 @@ SearchBoxExtensionWrapper::GetNativeFunctionTemplate( return v8::FunctionTemplate::New(isolate, IsKeyCaptureEnabled); if (name->Equals(v8::String::NewFromUtf8(isolate, "LogEvent"))) return v8::FunctionTemplate::New(isolate, LogEvent); + if (name->Equals(v8::String::NewFromUtf8(isolate, "LogImpression"))) + return v8::FunctionTemplate::New(isolate, LogImpression); if (name->Equals(v8::String::NewFromUtf8(isolate, "NavigateContentWindow"))) return v8::FunctionTemplate::New(isolate, NavigateContentWindow); if (name->Equals(v8::String::NewFromUtf8(isolate, "Paste"))) @@ -934,6 +939,22 @@ void SearchBoxExtensionWrapper::LogEvent( } // static +void SearchBoxExtensionWrapper::LogImpression( + const v8::FunctionCallbackInfo<v8::Value>& args) { + content::RenderView* render_view = GetRenderViewWithCheckedOrigin( + GURL(chrome::kChromeSearchMostVisitedUrl)); + if (!render_view) return; + + if (args.Length() < 2 || !args[0]->IsNumber() || args[1]->IsUndefined()) + return; + + DVLOG(1) << render_view << " LogImpression"; + + SearchBox::Get(render_view)->LogImpression(args[0]->IntegerValue(), + V8ValueToUTF16(args[1])); +} + +// static void SearchBoxExtensionWrapper::NavigateContentWindow( const v8::FunctionCallbackInfo<v8::Value>& args) { content::RenderView* render_view = GetRenderView(); |