12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/url_constants.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/search_terms_data.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service_client.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_entry.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BookmarkTest;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that the detached bookmark bar is visible on the new tab page.
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BookmarkTest, DetachedBookmarkBarOnNTP) {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AddTab(browser(), GURL(chrome::kChromeUINewTabURL));
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BookmarkBar::DETACHED, browser()->bookmark_bar_state());
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that the detached bookmark bar is hidden on custom NTP pages.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BookmarkTest, DetachedBookmarkBarOnCustomNTP) {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a empty commited web contents.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* web_contents = content::WebContents::Create(
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::WebContents::CreateParams(browser()->profile()));
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  web_contents->GetController().LoadURL(GURL(url::kAboutBlankURL),
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                        content::Referrer(),
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                        ui::PAGE_TRANSITION_LINK,
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                        std::string());
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Give it a NTP virtual URL.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::NavigationController* controller = &web_contents->GetController();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::NavigationEntry* entry = controller->GetVisibleEntry();
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  entry->SetVirtualURL(GURL(chrome::kChromeUINewTabURL));
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that the detached bookmark bar is hidden.
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->AppendWebContents(web_contents, true);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkInstantExtendedTest : public BrowserWithTestWindowTest {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BookmarkInstantExtendedTest() {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual TestingProfile* CreateProfile() OVERRIDE {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TestingProfile* profile = BrowserWithTestWindowTest::CreateProfile();
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TemplateURLService is normally NULL during testing. Instant extended
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // needs this service so set a custom factory function.
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TemplateURLServiceFactory::GetInstance()->SetTestingFactory(
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        profile, &BookmarkInstantExtendedTest::CreateTemplateURLService);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return profile;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static KeyedService* CreateTemplateURLService(
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::BrowserContext* profile) {
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return new TemplateURLService(
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        static_cast<Profile*>(profile)->GetPrefs(),
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        make_scoped_ptr(new SearchTermsData), NULL,
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        scoped_ptr<TemplateURLServiceClient>(), NULL, NULL, base::Closure());
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BookmarkInstantExtendedTest);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that in instant extended mode the detached bookmark bar is visible on
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the new tab page.
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BookmarkInstantExtendedTest, DetachedBookmarkBarOnNTP) {
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AddTab(browser(), GURL(chrome::kChromeUINewTabURL));
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BookmarkBar::DETACHED, browser()->bookmark_bar_state());
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
77