bookmark_bar_view_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 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/ui/views/bookmarks/bookmark_bar_view.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "apps/app_launcher.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/url_constants.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h"
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/text_button.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BookmarkBarViewTest;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that the apps shortcut is never visible without instant extended.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BookmarkBarViewTest, NoAppsShortcutWithoutInstantExtended) {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ScopedTestingLocalState local_state(TestingBrowserProcess::GetGlobal());
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile()->CreateBookmarkModel(true);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::WaitForBookmarkModelToLoad(profile());
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BookmarkBarView bookmark_bar_view(browser(), NULL);
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bookmark_bar_view.set_owned_by_client();
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(bookmark_bar_view.apps_page_shortcut_->visible());
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kShowAppsShortcutInBookmarkBar, true);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(bookmark_bar_view.apps_page_shortcut_->visible());
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkBarViewInstantExtendedTest : public BrowserWithTestWindowTest {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BookmarkBarViewInstantExtendedTest() {
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    chrome::EnableInstantExtendedAPIForTesting();
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual TestingProfile* CreateProfile() OVERRIDE {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TestingProfile* profile = BrowserWithTestWindowTest::CreateProfile();
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TemplateURLService is normally NULL during testing. Instant extended
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // needs this service so set a custom factory function.
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TemplateURLServiceFactory::GetInstance()->SetTestingFactory(
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        profile, &BookmarkBarViewInstantExtendedTest::CreateTemplateURLService);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return profile;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static ProfileKeyedService* CreateTemplateURLService(
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::BrowserContext* profile) {
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return new TemplateURLService(static_cast<Profile*>(profile));
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BookmarkBarViewInstantExtendedTest);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that in instant extended mode the visibility of the apps shortcut
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// button properly follows the pref value.
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BookmarkBarViewInstantExtendedTest, AppsShortcutVisibility) {
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ScopedTestingLocalState local_state(TestingBrowserProcess::GetGlobal());
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile()->CreateBookmarkModel(true);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::WaitForBookmarkModelToLoad(profile());
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BookmarkBarView bookmark_bar_view(browser(), NULL);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bookmark_bar_view.set_owned_by_client();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kShowAppsShortcutInBookmarkBar, false);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(bookmark_bar_view.apps_page_shortcut_->visible());
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Try to make the Apps shortcut visible. Its visibility depends on whether
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // the app launcher is enabled.
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kShowAppsShortcutInBookmarkBar, true);
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (apps::WasAppLauncherEnabled()) {
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_FALSE(bookmark_bar_view.apps_page_shortcut_->visible());
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else {
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_TRUE(bookmark_bar_view.apps_page_shortcut_->visible());
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Make sure we can also properly transition from true to false.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kShowAppsShortcutInBookmarkBar, false);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(bookmark_bar_view.apps_page_shortcut_->visible());
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
88