diff options
author | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-02 15:49:30 +0000 |
---|---|---|
committer | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-02 15:49:30 +0000 |
commit | cbb8db4ae802a0ee99d44e6afe23f59020bb61da (patch) | |
tree | 47fd52e6dbb72de2c0c1082a00ee7f9cffdee742 /chrome | |
parent | c7b151340992a01f78101a7d97872178dfcad6b4 (diff) | |
download | chromium_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.mm | 13 | ||||
-rw-r--r-- | chrome/browser/cocoa/search_engine_list_model_unittest.mm | 34 |
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. |