Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: chrome/browser/ui/search/instant_controller.cc

Issue 17526008: Log NTP hovers in 1993 clients (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Spacing fixes Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/search/instant_controller.h" 5 #include "chrome/browser/ui/search/instant_controller.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 25 matching lines...) Expand all
36 #include "chrome/common/content_settings_types.h" 36 #include "chrome/common/content_settings_types.h"
37 #include "chrome/common/pref_names.h" 37 #include "chrome/common/pref_names.h"
38 #include "chrome/common/url_constants.h" 38 #include "chrome/common/url_constants.h"
39 #include "components/sessions/serialized_navigation_entry.h" 39 #include "components/sessions/serialized_navigation_entry.h"
40 #include "content/public/browser/navigation_entry.h" 40 #include "content/public/browser/navigation_entry.h"
41 #include "content/public/browser/notification_service.h" 41 #include "content/public/browser/notification_service.h"
42 #include "content/public/browser/render_process_host.h" 42 #include "content/public/browser/render_process_host.h"
43 #include "content/public/browser/render_widget_host_view.h" 43 #include "content/public/browser/render_widget_host_view.h"
44 #include "content/public/browser/user_metrics.h" 44 #include "content/public/browser/user_metrics.h"
45 #include "content/public/browser/web_contents.h" 45 #include "content/public/browser/web_contents.h"
46 #include "content/public/browser/web_contents_user_data.h"
46 #include "content/public/browser/web_contents_view.h" 47 #include "content/public/browser/web_contents_view.h"
47 #include "net/base/escape.h" 48 #include "net/base/escape.h"
48 #include "net/base/network_change_notifier.h" 49 #include "net/base/network_change_notifier.h"
49 #include "third_party/icu/public/common/unicode/normalizer2.h" 50 #include "third_party/icu/public/common/unicode/normalizer2.h"
50 51
51 #if defined(TOOLKIT_VIEWS) 52 #if defined(TOOLKIT_VIEWS)
52 #include "ui/views/widget/widget.h" 53 #include "ui/views/widget/widget.h"
53 #endif 54 #endif
54 55
55 namespace { 56 namespace {
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 template <typename T> 244 template <typename T>
244 void DeletePageSoon(scoped_ptr<T> page) { 245 void DeletePageSoon(scoped_ptr<T> page) {
245 if (page->contents()) { 246 if (page->contents()) {
246 base::MessageLoop::current()->DeleteSoon( 247 base::MessageLoop::current()->DeleteSoon(
247 FROM_HERE, page->ReleaseContents().release()); 248 FROM_HERE, page->ReleaseContents().release());
248 } 249 }
249 250
250 base::MessageLoop::current()->DeleteSoon(FROM_HERE, page.release()); 251 base::MessageLoop::current()->DeleteSoon(FROM_HERE, page.release());
251 } 252 }
252 253
254 class NtpLoggingUserData
beaudoin 2013/06/22 01:14:53 Please document the class.
annark1 2013/06/25 16:01:38 Done.
255 : public content::WebContentsUserData<NtpLoggingUserData> {
256 public:
257 virtual ~NtpLoggingUserData() {}
beaudoin 2013/06/22 01:14:53 Indentation is wrong in the class: one space befor
annark1 2013/06/25 16:01:38 Done.
258
259 // Called each time the mouse hovers over an iframe or title.
260 void increment_iframe_hovers(int iframe_pos) {
261 ntp_logging_data_[iframe_pos] += 1;
beaudoin 2013/06/22 01:14:53 ++
annark1 2013/06/25 16:01:38 Done.
262 }
263
264 // Sums the values in the |ntp_logging_data_| map and logs to histogram.
beaudoin 2013/06/22 01:14:53 Clarify to indicate that you are summing over ever
annark1 2013/06/25 16:01:38 changed to just an int. On 2013/06/22 01:14:53, be
265 // Called when a tab is about to be deactivated.
266 void sum_values_and_log() {
267 int result = 0;
268 for (size_t i = 0; i < ntp_logging_data_.size(); ++i) {
269 result += ntp_logging_data_[i];
270 }
271 if (result > 0) {
272 HISTOGRAM_COUNTS_10000("NewTabPage.NumberOfMouseOvers", result);
273 ntp_logging_data_.clear();
274 }
beaudoin 2013/06/22 01:14:53 Please check with asvitkine@ that you're using thi
annark1 2013/06/25 16:01:38 Alexei suggested just using the default UMA_HISTOG
275 }
276
277 private:
278 explicit NtpLoggingUserData(content::WebContents* contents) {}
279 friend class content::WebContentsUserData<NtpLoggingUserData>;
280
281 // Map in which to log user data.
282 std::map<int, int> ntp_logging_data_;
283 };
284
253 } // namespace 285 } // namespace
254 286
287 DEFINE_WEB_CONTENTS_USER_DATA_KEY(NtpLoggingUserData);
288
255 InstantController::InstantController(BrowserInstantController* browser, 289 InstantController::InstantController(BrowserInstantController* browser,
256 bool extended_enabled) 290 bool extended_enabled)
257 : browser_(browser), 291 : browser_(browser),
258 extended_enabled_(extended_enabled), 292 extended_enabled_(extended_enabled),
259 instant_enabled_(false), 293 instant_enabled_(false),
260 use_local_page_only_(true), 294 use_local_page_only_(true),
261 preload_ntp_(true), 295 preload_ntp_(true),
262 model_(this), 296 model_(this),
263 use_tab_for_suggestions_(false), 297 use_tab_for_suggestions_(false),
264 last_omnibox_text_has_inline_autocompletion_(false), 298 last_omnibox_text_has_inline_autocompletion_(false),
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 ResetInstantTab(); 1078 ResetInstantTab();
1045 } 1079 }
1046 1080
1047 void InstantController::TabDeactivated(content::WebContents* contents) { 1081 void InstantController::TabDeactivated(content::WebContents* contents) {
1048 LOG_INSTANT_DEBUG_EVENT(this, "TabDeactivated"); 1082 LOG_INSTANT_DEBUG_EVENT(this, "TabDeactivated");
1049 if (extended_enabled() && !contents->IsBeingDestroyed()) 1083 if (extended_enabled() && !contents->IsBeingDestroyed())
1050 CommitIfPossible(INSTANT_COMMIT_FOCUS_LOST); 1084 CommitIfPossible(INSTANT_COMMIT_FOCUS_LOST);
1051 1085
1052 if (GetOverlayContents()) 1086 if (GetOverlayContents())
1053 HideOverlay(); 1087 HideOverlay();
1088
1089 NtpLoggingUserData* data =
1090 NtpLoggingUserData::FromWebContents(contents);
1091 if (data) {
1092 data->sum_values_and_log();
1093 }
beaudoin 2013/06/22 01:14:53 Nit: No {}
annark1 2013/06/25 16:01:38 Done.
1054 } 1094 }
1055 1095
1056 void InstantController::SetInstantEnabled(bool instant_enabled, 1096 void InstantController::SetInstantEnabled(bool instant_enabled,
1057 bool use_local_page_only) { 1097 bool use_local_page_only) {
1058 LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf( 1098 LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf(
1059 "SetInstantEnabled: instant_enabled=%d, use_local_page_only=%d", 1099 "SetInstantEnabled: instant_enabled=%d, use_local_page_only=%d",
1060 instant_enabled, use_local_page_only)); 1100 instant_enabled, use_local_page_only));
1061 1101
1062 // Non extended mode does not care about |use_local_page_only|. 1102 // Non extended mode does not care about |use_local_page_only|.
1063 if (instant_enabled == instant_enabled_ && 1103 if (instant_enabled == instant_enabled_ &&
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 if (!chrome::ShouldShowInstantNTP()) 1633 if (!chrome::ShouldShowInstantNTP())
1594 return; 1634 return;
1595 1635
1596 // Instant NTP is only used in extended mode so we should always have a 1636 // Instant NTP is only used in extended mode so we should always have a
1597 // non-empty URL to use. 1637 // non-empty URL to use.
1598 DCHECK(!instant_url.empty()); 1638 DCHECK(!instant_url.empty());
1599 ntp_.reset(new InstantNTP(this, instant_url)); 1639 ntp_.reset(new InstantNTP(this, instant_url));
1600 ntp_->InitContents(profile(), browser_->GetActiveWebContents(), 1640 ntp_->InitContents(profile(), browser_->GetActiveWebContents(),
1601 base::Bind(&InstantController::ReloadStaleNTP, 1641 base::Bind(&InstantController::ReloadStaleNTP,
1602 base::Unretained(this))); 1642 base::Unretained(this)));
1643
1644 if (ntp_->contents()) {
1645 NtpLoggingUserData::CreateForWebContents(ntp_->contents());
1646 }
beaudoin 2013/06/22 01:14:53 Nit: no {}
annark1 2013/06/25 16:01:38 Done.
1647
1603 LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf( 1648 LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf(
1604 "ResetNTP: instant_url='%s'", instant_url.c_str())); 1649 "ResetNTP: instant_url='%s'", instant_url.c_str()));
1605 } 1650 }
1606 1651
1607 void InstantController::ReloadStaleNTP() { 1652 void InstantController::ReloadStaleNTP() {
1608 ResetNTP(GetInstantURL()); 1653 ResetNTP(GetInstantURL());
1609 } 1654 }
1610 1655
1611 bool InstantController::ShouldSwitchToLocalNTP() const { 1656 bool InstantController::ShouldSwitchToLocalNTP() const {
1612 if (!ntp()) 1657 if (!ntp())
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1893 result->relevance = match.relevance; 1938 result->relevance = match.relevance;
1894 result->autocomplete_match_index = autocomplete_match_index; 1939 result->autocomplete_match_index = autocomplete_match_index;
1895 1940
1896 DVLOG(1) << " " << result->relevance << " " 1941 DVLOG(1) << " " << result->relevance << " "
1897 << UTF8ToUTF16(AutocompleteMatchType::ToString(result->type)) << " " 1942 << UTF8ToUTF16(AutocompleteMatchType::ToString(result->type)) << " "
1898 << result->provider << " " << result->destination_url << " '" 1943 << result->provider << " " << result->destination_url << " '"
1899 << result->description << "' '" << result->search_query << "' " 1944 << result->description << "' '" << result->search_query << "' "
1900 << result->transition << " " << result->autocomplete_match_index; 1945 << result->transition << " " << result->autocomplete_match_index;
1901 } 1946 }
1902 1947
1948 void InstantController::LogIframeHover(int pos) {
1949 if (!browser_ || !browser_->GetActiveWebContents())
1950 return;
1951
1952 NtpLoggingUserData* data =
1953 NtpLoggingUserData::FromWebContents(browser_->GetActiveWebContents());
1954 if (data) {
1955 data->increment_iframe_hovers(pos);
beaudoin 2013/06/22 01:14:53 Do you really have to keep the "pos" here? If you'
annark1 2013/06/25 16:01:38 Yes, I agree that only an int is needed to just lo
1956 }
1957 }
1958
1903 bool InstantController::IsJavascriptEnabled() const { 1959 bool InstantController::IsJavascriptEnabled() const {
1904 GURL instant_url(GetInstantURL()); 1960 GURL instant_url(GetInstantURL());
1905 GURL origin(instant_url.GetOrigin()); 1961 GURL origin(instant_url.GetOrigin());
1906 ContentSetting js_setting = profile()->GetHostContentSettingsMap()-> 1962 ContentSetting js_setting = profile()->GetHostContentSettingsMap()->
1907 GetContentSetting(origin, origin, CONTENT_SETTINGS_TYPE_JAVASCRIPT, 1963 GetContentSetting(origin, origin, CONTENT_SETTINGS_TYPE_JAVASCRIPT,
1908 NO_RESOURCE_IDENTIFIER); 1964 NO_RESOURCE_IDENTIFIER);
1909 // Javascript can be disabled either in content settings or via a WebKit 1965 // Javascript can be disabled either in content settings or via a WebKit
1910 // preference, so check both. Disabling it through the Settings page affects 1966 // preference, so check both. Disabling it through the Settings page affects
1911 // content settings. I'm not sure how to disable the WebKit preference, but 1967 // content settings. I'm not sure how to disable the WebKit preference, but
1912 // it's theoretically possible some users have it off. 1968 // it's theoretically possible some users have it off.
1913 bool js_content_enabled = 1969 bool js_content_enabled =
1914 js_setting == CONTENT_SETTING_DEFAULT || 1970 js_setting == CONTENT_SETTING_DEFAULT ||
1915 js_setting == CONTENT_SETTING_ALLOW; 1971 js_setting == CONTENT_SETTING_ALLOW;
1916 bool js_webkit_enabled = profile()->GetPrefs()->GetBoolean( 1972 bool js_webkit_enabled = profile()->GetPrefs()->GetBoolean(
1917 prefs::kWebKitJavascriptEnabled); 1973 prefs::kWebKitJavascriptEnabled);
1918 return js_content_enabled && js_webkit_enabled; 1974 return js_content_enabled && js_webkit_enabled;
1919 } 1975 }
1920 1976
1921 bool InstantController::InStartup() const { 1977 bool InstantController::InStartup() const {
1922 // TODO(shishir): This is not completely reliable. Find a better way to detect 1978 // TODO(shishir): This is not completely reliable. Find a better way to detect
1923 // startup time. 1979 // startup time.
1924 return !browser_->GetActiveWebContents(); 1980 return !browser_->GetActiveWebContents();
1925 } 1981 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698