blob: b1bae715aec628bed246e3d6fb02b5db1ac84b5b [file] [log] [blame]
// Copyright 2015 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 "components/search_engines/desktop_search_win.h"
#include <string>
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string_util.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/search_engines/prepopulated_engines.h"
#include "components/search_engines/template_url.h"
#include "components/search_engines/template_url_prepopulate_data.h"
#include "net/base/url_util.h"
namespace prefs {
const char kWindowsDesktopSearchRedirectionPref[] =
"windows_desktop_search_redirection";
} // namespace prefs
const base::Feature kWindowsDesktopSearchRedirectionFeature = {
"WindowsDesktopSearchRedirection", base::FEATURE_DISABLED_BY_DEFAULT
};
void RegisterWindowsDesktopSearchRedirectionPref(
user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterBooleanPref(prefs::kWindowsDesktopSearchRedirectionPref,
false);
}
bool ShouldRedirectWindowsDesktopSearchToDefaultSearchEngine(
PrefService* pref_service) {
DCHECK(pref_service);
return base::FeatureList::IsEnabled(
kWindowsDesktopSearchRedirectionFeature) &&
pref_service->GetBoolean(prefs::kWindowsDesktopSearchRedirectionPref);
}
bool DetectWindowsDesktopSearch(const GURL& url,
const SearchTermsData& search_terms_data,
base::string16* search_terms) {
DCHECK(search_terms);
scoped_ptr<TemplateURLData> template_url_data =
TemplateURLPrepopulateData::MakeTemplateURLDataFromPrepopulatedEngine(
TemplateURLPrepopulateData::bing);
TemplateURL template_url(*template_url_data);
if (!template_url.ExtractSearchTermsFromURL(url, search_terms_data,
search_terms))
return false;
// Query parameter that tells the source of a Bing search URL, and values
// associated with Windows desktop search.
const char kBingSourceQueryKey[] = "form";
const char kBingSourceDesktopText[] = "WNSGPH";
const char kBingSourceDesktopVoice[] = "WNSBOX";
for (net::QueryIterator it(url); !it.IsAtEnd(); it.Advance()) {
// Use a case-insensitive comparison because the key is sometimes in capital
// letters.
if (base::EqualsCaseInsensitiveASCII(it.GetKey(), kBingSourceQueryKey)) {
const std::string source = it.GetValue();
if (source == kBingSourceDesktopText || source == kBingSourceDesktopVoice)
return true;
}
}
search_terms->clear();
return false;
}