blob: a05b98ccfaf2120e811597f44ffa04862522779c [file] [log] [blame]
// Copyright (c) 2012 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 "base/memory/scoped_ptr.h"
#include "base/metrics/histogram.h"
#include "base/metrics/sample_vector.h"
#include "base/metrics/statistics_recorder.h"
#include "base/message_loop.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/protector/base_setting_change.h"
#include "chrome/browser/protector/histograms.h"
#include "chrome/browser/protector/mock_protector_service.h"
#include "chrome/browser/protector/protector_service_factory.h"
#include "chrome/browser/search_engines/template_url.h"
#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
#include "chrome/browser/search_engines/template_url_service.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
using ::testing::Invoke;
using ::testing::NiceMock;
using ::testing::Return;
namespace protector {
namespace {
// Keyword names and URLs used for testing.
const string16 example_info = ASCIIToUTF16("Example.info");
const string16 example_info_long = ASCIIToUTF16("ExampleSearchEngine.info");
const std::string http_example_info = "http://example.info/?q={searchTerms}";
const std::string http_example_info_no_search_terms =
"http://example.net/";
const std::string example_info_domain = "example.info";
const string16 example_com = ASCIIToUTF16("Example.com");
const string16 example_com_long = ASCIIToUTF16("ExampleSearchEngine.com");
const std::string http_example_com = "http://example.com/?q={searchTerms}";
const std::string http_example_com_no_search_terms =
"http://example.com/";
const std::string example_com_domain = "example.com";
const string16 example_net = ASCIIToUTF16("Example.net");
const std::string http_example_net = "http://example.net/?q={searchTerms}";
const std::string example_domain = "example.net";
const BaseSettingChange::DisplayName kNoDisplayName(
BaseSettingChange::kDefaultNamePriority, string16());
} // namespace
class DefaultSearchProviderChangeTest : public InProcessBrowserTest {
public:
virtual void SetUpOnMainThread() OVERRIDE {
Profile* profile = browser()->profile();
mock_protector_service_ = MockProtectorService::BuildForProfile(profile);
// Ensure that TemplateURLService is loaded.
turl_service_ = TemplateURLServiceFactory::GetForProfile(profile);
ui_test_utils::WaitForTemplateURLServiceToLoad(turl_service_);
prepopulated_url_.reset(
TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
}
virtual void CleanUpOnMainThread() OVERRIDE {
EXPECT_CALL(*mock_protector_service_, Shutdown());
}
TemplateURL* MakeTemplateURL(const string16& short_name,
const string16& keyword,
const std::string& url) {
TemplateURLData data;
data.short_name = short_name;
data.SetKeyword(keyword);
data.SetURL(url);
return new TemplateURL(browser()->profile(), data);
}
TemplateURL* FindTemplateURL(const std::string& search_url) {
TemplateURLService::TemplateURLVector urls =
turl_service_->GetTemplateURLs();
for (TemplateURLService::TemplateURLVector::const_iterator
it = urls.begin(); it != urls.end(); ++it) {
if ((*it)->url() == search_url)
return *it;
}
return NULL;
}
void AddAndSetDefault(TemplateURL* turl) {
turl_service_->Add(turl);
turl_service_->SetDefaultSearchProvider(turl);
}
string16 GetBubbleMessage(const string16& short_name = string16()) {
return short_name.empty() ?
l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_MESSAGE) :
l10n_util::GetStringFUTF16(IDS_SEARCH_ENGINE_CHANGE_NO_BACKUP_MESSAGE,
short_name);
}
string16 GetChangeSearchButtonText(const string16& short_name = string16()) {
return short_name.empty() ?
l10n_util::GetStringUTF16(IDS_CHANGE_SEARCH_ENGINE_NO_NAME) :
l10n_util::GetStringFUTF16(IDS_CHANGE_SEARCH_ENGINE, short_name);
}
string16 GetKeepSearchButtonText(const string16& short_name = string16()) {
return short_name.empty() ?
l10n_util::GetStringUTF16(IDS_KEEP_SETTING) :
l10n_util::GetStringFUTF16(IDS_KEEP_SEARCH_ENGINE, short_name);
}
string16 GetOpenSettingsButtonText() {
return l10n_util::GetStringUTF16(IDS_SELECT_SEARCH_ENGINE);
}
void ExpectSettingsOpened(const std::string& subpage) {
GURL settings_url(chrome::kChromeUISettingsURL + subpage);
EXPECT_CALL(*mock_protector_service_, OpenTab(settings_url, browser()));
}
void ExpectHistogramCount(const std::string& name,
size_t bucket,
base::Histogram::Count count) {
base::Histogram* histogram = base::StatisticsRecorder::FindHistogram(name);
EXPECT_TRUE(histogram != NULL);
scoped_ptr<base::SampleVector> samples = histogram->SnapshotSamples();
EXPECT_EQ(count, samples->GetCountAtIndex(bucket))
<< "Invalid " << name << " value for bucket " << bucket;
}
protected:
MockProtectorService* mock_protector_service_;
TemplateURLService* turl_service_;
scoped_ptr<TemplateURL> prepopulated_url_;
};
// Tests below call both Apply and Discard on a single change instance.
// This is test-only and should not be happening in real code.
// |backup_url| in further test cases is owned by DefaultSearchProviderChange
// instance, while other TemplateURLs are owned by TemplateURLService.
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest, BackupValid) {
// Most common case: current default search provider exists, backup is valid,
// they are different.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"), http_example_info);
int backup_histogram_id = protector::GetSearchProviderHistogramID(backup_url);
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
int current_histogram_id =
protector::GetSearchProviderHistogramID(current_url);
Profile* profile = browser()->profile();
turl_service_->Add(new TemplateURL(profile, backup_url->data()));
AddAndSetDefault(current_url);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify that backup is active.
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderHijacked,
current_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
backup_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(), change->GetBubbleMessage());
EXPECT_EQ(GetChangeSearchButtonText(example_com),
change->GetApplyButtonText());
EXPECT_EQ(GetKeepSearchButtonText(example_info),
change->GetDiscardButtonText());
EXPECT_EQ(example_com_domain, change->GetNewSettingURL().host());
EXPECT_EQ(example_com, change->GetApplyDisplayName().second);
// Discard does nothing - backup was already active.
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
ExpectHistogramCount(kProtectorHistogramSearchProviderDiscarded,
current_histogram_id, 1);
// Verify that Apply switches back to |current_url|.
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_com),
turl_service_->GetDefaultSearchProvider());
ExpectHistogramCount(kProtectorHistogramSearchProviderApplied,
current_histogram_id, 1);
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest, BackupValidLongNames) {
// Verify that search provider names that are too long are not displayed.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"), http_example_info);
TemplateURL* backup_url_long =
MakeTemplateURL(example_info_long, ASCIIToUTF16("a"), http_example_info);
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
TemplateURL* current_url_long =
MakeTemplateURL(example_com_long, ASCIIToUTF16("b"), http_example_com);
Profile* profile = browser()->profile();
{
// Backup name too long.
turl_service_->Add(new TemplateURL(profile, backup_url_long->data()));
AddAndSetDefault(current_url);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, backup_url_long));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(), change->GetBubbleMessage());
EXPECT_EQ(GetChangeSearchButtonText(example_com),
change->GetApplyButtonText());
EXPECT_EQ(GetKeepSearchButtonText(), change->GetDiscardButtonText());
EXPECT_EQ(example_com_domain, change->GetNewSettingURL().host());
EXPECT_EQ(example_com, change->GetApplyDisplayName().second);
}
{
// Current name too long.
turl_service_->Add(new TemplateURL(profile, backup_url->data()));
AddAndSetDefault(current_url_long);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url_long, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(), change->GetBubbleMessage());
EXPECT_EQ(GetChangeSearchButtonText(), change->GetApplyButtonText());
EXPECT_EQ(GetKeepSearchButtonText(example_info),
change->GetDiscardButtonText());
EXPECT_EQ(example_com_domain, change->GetNewSettingURL().host());
EXPECT_EQ(kNoDisplayName, change->GetApplyDisplayName());
}
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest, BackupInvalid) {
// Backup is invalid, current search provider exists, fallback to the
// prepopulated default search, which exists among keywords.
int prepopulated_histogram_id =
protector::GetSearchProviderHistogramID(prepopulated_url_.get());
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
int current_histogram_id =
protector::GetSearchProviderHistogramID(current_url);
AddAndSetDefault(current_url);
// Prepopulated default search must exist.
ASSERT_TRUE(FindTemplateURL(prepopulated_url_->url()));
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, NULL));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(browser()->profile()));
// Verify that the prepopulated default search is active.
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderCorrupt,
current_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderFallback,
prepopulated_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(prepopulated_url_->short_name()),
change->GetBubbleMessage());
EXPECT_EQ(GetChangeSearchButtonText(example_com),
change->GetApplyButtonText());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetDiscardButtonText());
// Verify that search engine settings are opened by Discard.
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify that Apply switches back to |current_url|.
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_com),
turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
BackupValidCannotBeDefault) {
// Backup is a valid keyword but cannot be the default search provider (has no
// search terms), current search provider exists, fallback to the prepopulated
// default search, which exists among keywords.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"),
http_example_info_no_search_terms);
int prepopulated_histogram_id =
protector::GetSearchProviderHistogramID(prepopulated_url_.get());
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
int current_histogram_id =
protector::GetSearchProviderHistogramID(current_url);
AddAndSetDefault(current_url);
// Prepopulated default search must exist.
ASSERT_TRUE(FindTemplateURL(prepopulated_url_->url()));
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(browser()->profile()));
// Verify that the prepopulated default search is active.
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderHijacked,
current_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderFallback,
prepopulated_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(prepopulated_url_->short_name()),
change->GetBubbleMessage());
EXPECT_EQ(GetChangeSearchButtonText(example_com),
change->GetApplyButtonText());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetDiscardButtonText());
// Verify that search engine settings are opened by Discard.
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify that Apply switches back to |current_url|.
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_com),
turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
BackupInvalidFallbackRemoved) {
// Backup is invalid, current search provider exists, fallback to the
// prepopulated default search, which was removed from keywords (will be
// added).
int prepopulated_histogram_id =
protector::GetSearchProviderHistogramID(prepopulated_url_.get());
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
int current_histogram_id =
protector::GetSearchProviderHistogramID(current_url);
AddAndSetDefault(current_url);
TemplateURL* prepopulated_default = FindTemplateURL(prepopulated_url_->url());
// Prepopulated default search must exist, remove it.
ASSERT_TRUE(prepopulated_default);
turl_service_->Remove(prepopulated_default);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, NULL));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(browser()->profile()));
// Verify that the prepopulated default search is active.
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderCorrupt,
current_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderFallback,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderMissing,
prepopulated_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(prepopulated_url_->short_name()),
change->GetBubbleMessage());
EXPECT_EQ(GetChangeSearchButtonText(example_com),
change->GetApplyButtonText());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetDiscardButtonText());
EXPECT_EQ(GURL(), change->GetNewSettingURL());
EXPECT_EQ(example_com, change->GetApplyDisplayName().second);
// Verify that search engine settings are opened by Discard.
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify that Apply switches back to |current_url|.
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_com),
turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
BackupValidCurrentRemoved) {
// Backup is valid, no current search provider.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"), http_example_info);
int backup_histogram_id = protector::GetSearchProviderHistogramID(backup_url);
Profile* profile = browser()->profile();
turl_service_->Add(new TemplateURL(profile, backup_url->data()));
turl_service_->SetDefaultSearchProvider(NULL);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(NULL, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify that backup is active.
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderHijacked,
protector::GetSearchProviderHistogramID(NULL), 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
backup_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(), change->GetBubbleMessage());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetApplyButtonText());
EXPECT_EQ(GetKeepSearchButtonText(example_info),
change->GetDiscardButtonText());
EXPECT_EQ(GURL(), change->GetNewSettingURL());
EXPECT_EQ(kNoDisplayName, change->GetApplyDisplayName());
// Discard does nothing - backup was already active.
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Verify that search engine settings are opened by Apply (no other changes).
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
BackupValidCurrentCannotBeDefault) {
// Backup is valid, current search provider has no search terms.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"), http_example_info);
int backup_histogram_id = protector::GetSearchProviderHistogramID(backup_url);
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"),
http_example_com_no_search_terms);
int current_histogram_id =
protector::GetSearchProviderHistogramID(current_url);
Profile* profile = browser()->profile();
turl_service_->Add(new TemplateURL(profile, backup_url->data()));
// TODO(ivankr): this may become unsupported soon.
AddAndSetDefault(current_url);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify that backup is active.
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderHijacked,
current_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
backup_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(), change->GetBubbleMessage());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetApplyButtonText());
EXPECT_EQ(GetKeepSearchButtonText(example_info),
change->GetDiscardButtonText());
EXPECT_EQ(GURL(), change->GetNewSettingURL());
EXPECT_EQ(kNoDisplayName, change->GetApplyDisplayName());
// Discard does nothing - backup was already active.
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Verify that search engine settings are opened by Apply (no other changes).
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
BackupInvalidCurrentRemoved) {
// Backup is invalid, no current search provider, fallback to the prepopulated
// default search.
int prepopulated_histogram_id =
protector::GetSearchProviderHistogramID(prepopulated_url_.get());
turl_service_->SetDefaultSearchProvider(NULL);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(NULL, NULL));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(browser()->profile()));
// Verify that the prepopulated default search is active.
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderCorrupt,
protector::GetSearchProviderHistogramID(NULL), 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderFallback,
prepopulated_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(prepopulated_url_->short_name()),
change->GetBubbleMessage());
EXPECT_EQ(string16(), change->GetApplyButtonText());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetDiscardButtonText());
EXPECT_EQ(GURL(), change->GetNewSettingURL());
EXPECT_EQ(kNoDisplayName, change->GetApplyDisplayName());
// Verify that search engine settings are opened by Discard.
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(prepopulated_url_->url()),
turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
BackupInvalidFallbackSameAsCurrent) {
// Backup is invalid, fallback to the prepopulated default search which is
// same as the current search provider.
int prepopulated_histogram_id =
protector::GetSearchProviderHistogramID(prepopulated_url_.get());
TemplateURL* current_url = turl_service_->GetDefaultSearchProvider();
// Verify that current search provider is same as the prepopulated default.
ASSERT_TRUE(current_url);
ASSERT_EQ(current_url, FindTemplateURL(prepopulated_url_->url()));
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, NULL));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(browser()->profile()));
// Verify that the default search has not changed.
EXPECT_EQ(current_url, turl_service_->GetDefaultSearchProvider());
// Verify histograms.
ExpectHistogramCount(kProtectorHistogramSearchProviderCorrupt,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderRestored,
prepopulated_histogram_id, 1);
ExpectHistogramCount(kProtectorHistogramSearchProviderFallback,
prepopulated_histogram_id, 1);
// Verify text messages.
EXPECT_EQ(GetBubbleMessage(prepopulated_url_->short_name()),
change->GetBubbleMessage());
EXPECT_EQ(string16(), change->GetApplyButtonText());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetDiscardButtonText());
EXPECT_EQ(GURL(), change->GetNewSettingURL());
EXPECT_EQ(current_url->short_name(), change->GetApplyDisplayName().second);
// Verify that search engine settings are opened by Discard.
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Discard(browser());
EXPECT_EQ(current_url, turl_service_->GetDefaultSearchProvider());
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
DefaultSearchProviderChangedByUser) {
// Default search provider is changed by user while the error is active.
// Setup is the same as in BackupValid test case.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"), http_example_info);
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
TemplateURL* new_url =
MakeTemplateURL(example_net, ASCIIToUTF16("c"), http_example_net);
Profile* profile = browser()->profile();
turl_service_->Add(new TemplateURL(profile, backup_url->data()));
AddAndSetDefault(current_url);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify that backup is active.
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Verify that changing search provider externally dismissed the change.
EXPECT_CALL(*mock_protector_service_, DismissChange(change.get()));
AddAndSetDefault(new_url);
}
IN_PROC_BROWSER_TEST_F(DefaultSearchProviderChangeTest,
CurrentSearchProviderRemovedByUser) {
// Current search provider is removed by user while the error is active.
// Setup is the same as in BackupValid test case.
TemplateURL* backup_url =
MakeTemplateURL(example_info, ASCIIToUTF16("a"), http_example_info);
TemplateURL* current_url =
MakeTemplateURL(example_com, ASCIIToUTF16("b"), http_example_com);
Profile* profile = browser()->profile();
turl_service_->Add(new TemplateURL(profile, backup_url->data()));
AddAndSetDefault(current_url);
scoped_ptr<BaseSettingChange> change(
CreateDefaultSearchProviderChange(current_url, backup_url));
ASSERT_TRUE(change.get());
ASSERT_TRUE(change->Init(profile));
// Verify that backup is active.
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
turl_service_->Remove(current_url);
// Verify that text messages altered after removing |current_url|.
EXPECT_EQ(GetBubbleMessage(), change->GetBubbleMessage());
EXPECT_EQ(GetOpenSettingsButtonText(), change->GetApplyButtonText());
EXPECT_EQ(GetKeepSearchButtonText(example_info),
change->GetDiscardButtonText());
EXPECT_EQ(GURL(), change->GetNewSettingURL());
EXPECT_EQ(kNoDisplayName, change->GetApplyDisplayName());
// Verify that search engine settings are opened by Apply.
ExpectSettingsOpened(chrome::kSearchEnginesSubPage);
change->Apply(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
// Discard does nothing - backup was already active.
change->Discard(browser());
EXPECT_EQ(FindTemplateURL(http_example_info),
turl_service_->GetDefaultSearchProvider());
}
} // namespace protector