| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/search_engines/ui_thread_search_terms_data.h" |
| |
| #include "base/check.h" |
| #include "base/metrics/field_trial.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/google/google_brand.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/channel_info.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "components/google/core/common/google_util.h" |
| #include "components/version_info/version_info.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "rlz/buildflags/buildflags.h" |
| #include "ui/base/device_form_factor.h" |
| #include "url/gurl.h" |
| |
| #if BUILDFLAG(ENABLE_RLZ) |
| #include "components/rlz/rlz_tracker.h" // nogncheck crbug.com/1125897 |
| #endif |
| |
| using content::BrowserThread; |
| |
| UIThreadSearchTermsData::UIThreadSearchTermsData() { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| } |
| |
| std::string UIThreadSearchTermsData::GoogleBaseURLValue() const { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| GURL base_url(google_util::CommandLineGoogleBaseURL()); |
| if (base_url.is_valid()) |
| return base_url.spec(); |
| |
| return SearchTermsData::GoogleBaseURLValue(); |
| } |
| |
| std::string UIThreadSearchTermsData::GetApplicationLocale() const { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| return g_browser_process->GetApplicationLocale(); |
| } |
| |
| // Android implementations are in ui_thread_search_terms_data_android.cc. |
| #if !defined(OS_ANDROID) |
| base::string16 UIThreadSearchTermsData::GetRlzParameterValue( |
| bool from_app_list) const { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| base::string16 rlz_string; |
| #if BUILDFLAG(ENABLE_RLZ) |
| // For organic brandcodes do not use rlz at all. Empty brandcode usually |
| // means a chromium install. This is ok. |
| std::string brand; |
| if (google_brand::GetBrand(&brand) && !google_brand::IsOrganic(brand)) { |
| // This call will return false the first time(s) it is called until the |
| // value has been cached. This normally would mean that at most one omnibox |
| // search might not send the RLZ data but this is not really a problem. |
| rlz_lib::AccessPoint access_point = rlz::RLZTracker::ChromeOmnibox(); |
| if (from_app_list) |
| access_point = rlz::RLZTracker::ChromeAppList(); |
| rlz::RLZTracker::GetAccessPointRlz(access_point, &rlz_string); |
| } |
| #endif |
| return rlz_string; |
| } |
| |
| // We can enable this on non-Android if other platforms ever want a non-empty |
| // search client string. There is already a unit test in place for Android |
| // called TemplateURLTest::SearchClient. |
| std::string UIThreadSearchTermsData::GetSearchClient() const { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| return std::string(); |
| } |
| #endif |
| |
| std::string UIThreadSearchTermsData::GetSuggestClient() const { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| #if defined(OS_ANDROID) |
| return ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_PHONE ? |
| "chrome" : "chrome-omni"; |
| #else |
| return "chrome-omni"; |
| #endif |
| } |
| |
| std::string UIThreadSearchTermsData::GetSuggestRequestIdentifier() const { |
| DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| #if defined(OS_ANDROID) |
| if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_PHONE) |
| return "chrome-mobile-ext-ansg"; |
| #endif |
| return "chrome-ext-ansg"; |
| } |
| |
| // It's acutally OK to call this method on any thread, but it's currently placed |
| // in UIThreadSearchTermsData since SearchTermsData cannot depend on src/chrome |
| // as it is shared with iOS. |
| std::string UIThreadSearchTermsData::GoogleImageSearchSource() const { |
| std::string version(version_info::GetProductName() + " " + |
| version_info::GetVersionNumber()); |
| if (version_info::IsOfficialBuild()) |
| version += " (Official)"; |
| version += " " + version_info::GetOSType(); |
| std::string modifier(chrome::GetChannelName()); |
| if (!modifier.empty()) |
| version += " " + modifier; |
| return version; |
| } |
| |
| size_t UIThreadSearchTermsData::EstimateMemoryUsage() const { |
| return 0; |
| } |