16d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved. 26d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// found in the LICENSE file. 46d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 56d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/google/google_search_counter_android.h" 66d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 76d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/logging.h" 86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/google/google_search_counter.h" 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_search_metrics.h" 126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "content/public/browser/navigation_details.h" 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "content/public/browser/notification_service.h" 156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "content/public/browser/notification_types.h" 166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)GoogleSearchCounterAndroid::GoogleSearchCounterAndroid(Profile* profile) 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) : profile_(profile) { 196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // We always listen for all COMMITTED navigations from all sources, as any 206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // one of them could be a navigation of interest. 216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, 226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::NotificationService::AllSources()); 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)GoogleSearchCounterAndroid::~GoogleSearchCounterAndroid() { 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void GoogleSearchCounterAndroid::ProcessCommittedEntry( 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const content::NotificationSource& source, 306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const content::NotificationDetails& details) { 316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) GoogleSearchCounter* counter = GoogleSearchCounter::GetInstance(); 326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DCHECK(counter); 336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (!counter->ShouldRecordCommittedDetails(details)) 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return; 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const content::NavigationEntry& entry = 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *content::Details<content::LoadCommittedDetails>(details)->entry; 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prerender::PrerenderManager* prerender_manager = 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prerender::PrerenderManagerFactory::GetForProfile(profile_); 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |prerender_manager| is NULL when prerendering is disabled. 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool prerender_enabled = 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prerender_manager ? prerender_manager->IsEnabled() : false; 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) counter->search_metrics()->RecordAndroidGoogleSearch( 446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) counter->GetGoogleSearchAccessPointForSearchNavEntry(entry), 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prerender_enabled); 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void GoogleSearchCounterAndroid::Observe( 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int type, 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const content::NotificationSource& source, 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const content::NotificationDetails& details) { 526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_COMMITTED, type); 536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ProcessCommittedEntry(source, details); 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 55