summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-02 15:49:30 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-02 15:49:30 +0000
commitcbb8db4ae802a0ee99d44e6afe23f59020bb61da (patch)
tree47fd52e6dbb72de2c0c1082a00ee7f9cffdee742 /chrome
parentc7b151340992a01f78101a7d97872178dfcad6b4 (diff)
downloadchromium_src-cbb8db4ae802a0ee99d44e6afe23f59020bb61da.zip
chromium_src-cbb8db4ae802a0ee99d44e6afe23f59020bb61da.tar.gz
chromium_src-cbb8db4ae802a0ee99d44e6afe23f59020bb61da.tar.bz2
[Mac] Prevent search engines from disappearing in the preferences list
* Fix the logic in -[SearchEngineListModel defaultIndex]. * Make the test data URLs in SearchEngineListModelTest replaceable, enabling more tests. * Add a test for this bug 21898. TEST=Preferences-->Manage. Add two new search engines. Make the second one default. The list in main Preferences should not have a blank entry. BUG=21898 Review URL: http://codereview.chromium.org/341060 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30700 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/cocoa/search_engine_list_model.mm13
-rw-r--r--chrome/browser/cocoa/search_engine_list_model_unittest.mm34
2 files changed, 38 insertions, 9 deletions
diff --git a/chrome/browser/cocoa/search_engine_list_model.mm b/chrome/browser/cocoa/search_engine_list_model.mm
index 1900231..50eac21 100644
--- a/chrome/browser/cocoa/search_engine_list_model.mm
+++ b/chrome/browser/cocoa/search_engine_list_model.mm
@@ -88,14 +88,19 @@ class SearchEngineObserver : public TemplateURLModelObserver {
- (NSUInteger)defaultIndex {
if (!model_) return 0;
+ NSUInteger index = 0;
const TemplateURL* defaultSearchProvider = model_->GetDefaultSearchProvider();
if (defaultSearchProvider) {
typedef std::vector<const TemplateURL*> TemplateURLs;
TemplateURLs urls = model_->GetTemplateURLs();
- TemplateURLs::iterator i =
- find(urls.begin(), urls.end(), defaultSearchProvider);
- if (i != urls.end())
- return static_cast<int>(i - urls.begin());
+ for (std::vector<const TemplateURL*>::iterator it = urls.begin();
+ it != urls.end(); ++it) {
+ const TemplateURL* url = *it;
+ if (url->id() == defaultSearchProvider->id())
+ return index;
+ if (url->ShowInDefaultList())
+ ++index;
+ }
}
return 0;
}
diff --git a/chrome/browser/cocoa/search_engine_list_model_unittest.mm b/chrome/browser/cocoa/search_engine_list_model_unittest.mm
index 600d9bb..60ed101 100644
--- a/chrome/browser/cocoa/search_engine_list_model_unittest.mm
+++ b/chrome/browser/cocoa/search_engine_list_model_unittest.mm
@@ -30,13 +30,13 @@ class SearchEngineListModelTest : public PlatformTest {
// Build a fake set of template urls.
template_model_.reset(new TemplateURLModel(helper_.profile()));
TemplateURL* t_url = new TemplateURL();
- t_url->SetURL(L"http://www.google.com/foo/bar", 0, 0);
+ t_url->SetURL(L"http://www.google.com/?q={searchTerms}", 0, 0);
t_url->set_keyword(L"keyword");
t_url->set_short_name(L"google");
t_url->set_show_in_default_list(true);
template_model_->Add(t_url);
t_url = new TemplateURL();
- t_url->SetURL(L"http://www.google2.com/foo/bar", 0, 0);
+ t_url->SetURL(L"http://www.google2.com/?q={searchTerms}", 0, 0);
t_url->set_keyword(L"keyword2");
t_url->set_short_name(L"google2");
t_url->set_show_in_default_list(true);
@@ -70,9 +70,7 @@ TEST_F(SearchEngineListModelTest, Init) {
TEST_F(SearchEngineListModelTest, Engines) {
NSArray* engines = [model_ searchEngines];
- // TODO(pinkerton): because the templates we create aren't truly parsable,
- // they won't pass the "displayable" test and thus we don't get any results.
- EXPECT_EQ([engines count], /* 2U */ 0U);
+ EXPECT_EQ([engines count], 2U);
}
TEST_F(SearchEngineListModelTest, Default) {
@@ -80,6 +78,32 @@ TEST_F(SearchEngineListModelTest, Default) {
[model_ setDefaultIndex:1];
EXPECT_EQ([model_ defaultIndex], 1U);
+
+ // Add two more URLs, neither of which are shown in the default list.
+ TemplateURL* t_url = new TemplateURL();
+ t_url->SetURL(L"http://www.google3.com/?q={searchTerms}", 0, 0);
+ t_url->set_keyword(L"keyword3");
+ t_url->set_short_name(L"google3 not eligible");
+ t_url->set_show_in_default_list(false);
+ template_model_->Add(t_url);
+ t_url = new TemplateURL();
+ t_url->SetURL(L"http://www.google4.com/?q={searchTerms}", 0, 0);
+ t_url->set_keyword(L"keyword4");
+ t_url->set_short_name(L"google4");
+ t_url->set_show_in_default_list(false);
+ template_model_->Add(t_url);
+
+ // Still should only have 2 engines and not these newly added ones.
+ EXPECT_EQ([[model_ searchEngines] count], 2U);
+
+ // Since keyword3 is not in the default list, the 2nd index in the default
+ // keyword list should be keyword4. Test for http://crbug.com/21898.
+ template_model_->SetDefaultSearchProvider(t_url);
+ EXPECT_EQ([[model_ searchEngines] count], 3U);
+ EXPECT_EQ([model_ defaultIndex], 2U);
+
+ NSString* defaultString = [[model_ searchEngines] objectAtIndex:2];
+ EXPECT_TRUE([@"google4" isEqualToString:defaultString]);
}
// Make sure that when the back-end model changes that we get a notification.