Index: chrome/browser/google/google_search_counter.cc |
diff --git a/chrome/browser/google/google_search_counter.cc b/chrome/browser/google/google_search_counter.cc |
index 052821591c274f6f944fd1ebb2e843618bc62af4..56ec4a6c0c55eaafdd36e8e41a9e0161dcb4b23d 100644 |
--- a/chrome/browser/google/google_search_counter.cc |
+++ b/chrome/browser/google/google_search_counter.cc |
@@ -12,29 +12,6 @@ |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/notification_types.h" |
-namespace { |
- |
-// Returns true iff |entry| represents a Google search from the Omnibox. |
-// This method assumes that we have already verified that |entry|'s URL is a |
-// Google search URL. |
-bool IsOmniboxGoogleSearchNavigation(const content::NavigationEntry& entry) { |
- const content::PageTransition stripped_transition = |
- PageTransitionStripQualifier(entry.GetTransitionType()); |
- DCHECK(google_util::IsGoogleSearchUrl(entry.GetURL())); |
- return stripped_transition == content::PAGE_TRANSITION_GENERATED; |
-} |
- |
-// Returns true iff |entry| represents a Google search from the Google Search |
-// App. This method assumes that we have already verified that |entry|'s URL is |
-// a Google search URL. |
-bool IsSearchAppGoogleSearchNavigation(const content::NavigationEntry& entry) { |
- DCHECK(google_util::IsGoogleSearchUrl(entry.GetURL())); |
- return entry.GetURL().query().find("source=search_app") != |
- std::string::npos; |
-} |
- |
-} // namespace |
- |
// static |
void GoogleSearchCounter::RegisterForNotifications() { |
GoogleSearchCounter::GetInstance()->RegisterForNotificationsInternal(); |
@@ -45,6 +22,36 @@ GoogleSearchCounter* GoogleSearchCounter::GetInstance() { |
return Singleton<GoogleSearchCounter>::get(); |
} |
+GoogleSearchMetrics::AccessPoint |
+GoogleSearchCounter::GetGoogleSearchAccessPointForSearchNavEntry( |
+ const content::NavigationEntry& entry) const { |
+ DCHECK(google_util::IsGoogleSearchUrl(entry.GetURL())); |
+ |
+ // If the |entry| is FROM_ADDRESS_BAR, it comes from the omnibox; if it's |
+ // GENERATED, the user was doing a search, rather than doing a navigation to a |
+ // search URL (e.g. from hisotry, or pasted in). |
+ if (entry.GetTransitionType() == (content::PAGE_TRANSITION_GENERATED | |
+ content::PAGE_TRANSITION_FROM_ADDRESS_BAR)) { |
+ return GoogleSearchMetrics::AP_OMNIBOX; |
+ } |
+ |
+ // The string "source=search_app" in the |entry| URL represents a Google |
+ // search from the Google Search App. |
+ if (entry.GetURL().query().find("source=search_app") != std::string::npos) |
+ return GoogleSearchMetrics::AP_SEARCH_APP; |
+ |
+ // For all other cases that we have not yet implemented or care to measure, we |
+ // log a generic "catch-all" metric. |
+ return GoogleSearchMetrics::AP_OTHER; |
+} |
+ |
+bool GoogleSearchCounter::ShouldRecordCommittedDetails( |
+ const content::NotificationDetails& details) const { |
+ const content::LoadCommittedDetails* commit = |
+ content::Details<content::LoadCommittedDetails>(details).ptr(); |
+ return google_util::IsGoogleSearchUrl(commit->entry->GetURL()); |
+} |
+ |
GoogleSearchCounter::GoogleSearchCounter() |
: search_metrics_(new GoogleSearchMetrics) { |
} |
@@ -55,27 +62,15 @@ GoogleSearchCounter::~GoogleSearchCounter() { |
void GoogleSearchCounter::ProcessCommittedEntry( |
const content::NotificationSource& source, |
const content::NotificationDetails& details) { |
+ // Note that GoogleSearchMetrics logs metrics through UMA, which will only |
+ // transmit these counts to the server if the user has opted into sending |
+ // usage stats. |
const content::LoadCommittedDetails* commit = |
content::Details<content::LoadCommittedDetails>(details).ptr(); |
const content::NavigationEntry& entry = *commit->entry; |
- |
- // First see if this is a Google search URL at all. |
- if (!google_util::IsGoogleSearchUrl(entry.GetURL())) |
- return; |
- |
- // If the commit is a GENERATED commit with a Google search URL, we know it's |
- // an Omnibox search. |
- if (IsOmniboxGoogleSearchNavigation(entry)) { |
- // Note that GoogleSearchMetrics logs metrics through UMA, which will only |
- // transmit these counts to the server if the user has opted into sending |
- // usage stats. |
- search_metrics_->RecordGoogleSearch(GoogleSearchMetrics::AP_OMNIBOX); |
- } else if (IsSearchAppGoogleSearchNavigation(entry)) { |
- search_metrics_->RecordGoogleSearch(GoogleSearchMetrics::AP_SEARCH_APP); |
- } else { |
- // For all other cases that we have not yet implemented or care to measure, |
- // we log a generic "catch-all" metric. |
- search_metrics_->RecordGoogleSearch(GoogleSearchMetrics::AP_OTHER); |
+ if (ShouldRecordCommittedDetails(details)) { |
+ search_metrics_->RecordGoogleSearch( |
+ GetGoogleSearchAccessPointForSearchNavEntry(entry)); |
} |
} |