172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/search_terms_data.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/browser_process.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/google/google_url_tracker.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "googleurl/src/gurl.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/rlz/rlz.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/installer/util/google_update_settings.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenSearchTermsData::SearchTermsData() { 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenSearchTermsData::~SearchTermsData() { 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstd::string SearchTermsData::GoogleBaseSuggestURLValue() const { 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The suggest base URL we want at the end is something like 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // "http://clients1.google.TLD/complete/". The key bit we want from the 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // original Google base URL is the TLD. 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Start with the Google base URL. 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL base_url(GoogleBaseURLValue()); 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(base_url.is_valid()); 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Change "www." to "clients1." in the hostname. If no "www." was found, just 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // prepend "clients1.". 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string base_host(base_url.host()); 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL::Replacements repl; 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string suggest_host("clients1." + 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen (base_host.compare(0, 4, "www.") ? base_host : base_host.substr(4))); 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen repl.SetHostStr(suggest_host); 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Replace any existing path with "/complete/". 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const std::string suggest_path("/complete/"); 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen repl.SetPathStr(suggest_path); 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Clear the query and ref. 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen repl.ClearQuery(); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen repl.ClearRef(); 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return base_url.ReplaceComponents(repl).spec(); 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// static 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstd::string* UIThreadSearchTermsData::google_base_url_ = NULL; 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenUIThreadSearchTermsData::UIThreadSearchTermsData() { 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // GoogleURLTracker::GoogleURL() DCHECKs this also, but adding it here helps 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // us catch bad behavior at a more common place in this code. 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(!BrowserThread::IsWellKnownThread(BrowserThread::UI) || 58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::CurrentlyOn(BrowserThread::UI)); 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstd::string UIThreadSearchTermsData::GoogleBaseURLValue() const { 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(!BrowserThread::IsWellKnownThread(BrowserThread::UI) || 63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::CurrentlyOn(BrowserThread::UI)); 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return google_base_url_ ? 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen (*google_base_url_) : GoogleURLTracker::GoogleURL().spec(); 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstd::string UIThreadSearchTermsData::GetApplicationLocale() const { 69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(!BrowserThread::IsWellKnownThread(BrowserThread::UI) || 70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::CurrentlyOn(BrowserThread::UI)); 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return g_browser_process->GetApplicationLocale(); 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstring16 UIThreadSearchTermsData::GetRlzParameterValue() const { 76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(!BrowserThread::IsWellKnownThread(BrowserThread::UI) || 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::CurrentlyOn(BrowserThread::UI)); 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 rlz_string; 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // For organic brandcodes do not use rlz at all. Empty brandcode usually 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // means a chromium install. This is ok. 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 brand; 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (GoogleUpdateSettings::GetBrand(&brand) && !brand.empty() && 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen !GoogleUpdateSettings::IsOrganic(brand)) { 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // This call will return false the first time(s) it is called until the 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // value has been cached. This normally would mean that at most one omnibox 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // search might not send the RLZ data but this is not really a problem. 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz_string); 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return rlz_string; 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// static 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid UIThreadSearchTermsData::SetGoogleBaseURL(std::string* google_base_url) { 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delete google_base_url_; 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen google_base_url_ = google_base_url; 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 98