11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/pref_service.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/autocomplete/autocomplete_classifier.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service_factory.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/history/history_service.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/history/history_service_factory.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/profiles/profile.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/profile_sync_service.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/profile_sync_service_factory.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/pref_names.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciChromeAutocompleteProviderClient::ChromeAutocompleteProviderClient(
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    Profile* profile)
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : profile_(profile),
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scheme_classifier_(profile) {
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciChromeAutocompleteProviderClient::~ChromeAutocompleteProviderClient() {
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinet::URLRequestContextGetter*
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciChromeAutocompleteProviderClient::RequestContext() {
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return profile_->GetRequestContext();
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromeAutocompleteProviderClient::IsOffTheRecord() {
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return profile_->IsOffTheRecord();
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string ChromeAutocompleteProviderClient::AcceptLanguages() {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return profile_->GetPrefs()->GetString(prefs::kAcceptLanguages);
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromeAutocompleteProviderClient::SearchSuggestEnabled() {
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return profile_->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled);
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromeAutocompleteProviderClient::ShowBookmarkBar() {
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return profile_->GetPrefs()->GetBoolean(bookmarks::prefs::kShowBookmarkBar);
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst AutocompleteSchemeClassifier&
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciChromeAutocompleteProviderClient::SchemeClassifier() {
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return scheme_classifier_;
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeAutocompleteProviderClient::Classify(
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::string16& text,
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool prefer_keyword,
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool allow_exact_keyword_match,
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    metrics::OmniboxEventProto::PageClassification page_classification,
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    AutocompleteMatch* match,
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GURL* alternate_nav_url) {
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AutocompleteClassifier* classifier =
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      AutocompleteClassifierFactory::GetForProfile(profile_);
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(classifier);
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  classifier->Classify(text, prefer_keyword, allow_exact_keyword_match,
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       page_classification, match, alternate_nav_url);
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccihistory::URLDatabase* ChromeAutocompleteProviderClient::InMemoryDatabase() {
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  HistoryService* history_service =
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return history_service ? history_service->InMemoryDatabase() : NULL;
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeAutocompleteProviderClient::DeleteMatchingURLsForKeywordFromHistory(
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    history::KeywordID keyword_id,
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::string16& term) {
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS)
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ->DeleteMatchingURLsForKeyword(keyword_id, term);
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromeAutocompleteProviderClient::TabSyncEnabledAndUnencrypted() {
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Check field trials and settings allow sending the URL on suggest requests.
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ProfileSyncService* service =
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  sync_driver::SyncPrefs sync_prefs(profile_->GetPrefs());
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return service &&
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      service->IsSyncEnabledAndLoggedIn() &&
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      sync_prefs.GetPreferredDataTypes(syncer::UserTypes()).Has(
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          syncer::PROXY_TABS) &&
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      !service->GetEncryptedDataTypes().Has(syncer::SESSIONS);
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeAutocompleteProviderClient::PrefetchImage(const GURL& url) {
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  BitmapFetcherService* image_service =
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      BitmapFetcherServiceFactory::GetForBrowserContext(profile_);
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(image_service);
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  image_service->Prefetch(url);
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
99