bookmark_browsertest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org// Use of this source code is governed by a BSD-style license that can be 3f6d65a99233197a7b2e194d19be63ec85ff635d2mark@chromium.org// found in the LICENSE file. 4f6d65a99233197a7b2e194d19be63ec85ff635d2mark@chromium.org 5a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org#include "base/bind.h" 6a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org#include "base/timer.h" 7a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org#include "base/utf_string_conversions.h" 8a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org#include "chrome/app/chrome_command_ids.h" 91d4bf03af656e8f45c6ff3edd85af569acf710aamark@chromium.org#include "chrome/browser/bookmarks/bookmark_model.h" 105ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/bookmarks/bookmark_model_factory.h" 115ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/bookmarks/bookmark_utils.h" 125ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/browser_process.h" 135ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/profiles/profile.h" 145ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/profiles/profile_manager.h" 155ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/ui/browser.h" 165ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/ui/browser_commands.h" 175ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/ui/browser_window.h" 185ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/browser/ui/host_desktop.h" 195ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/common/chrome_notification_types.h" 205ca0052c48077a11341c00a09bf37a0276416af9mark@chromium.org#include "chrome/test/base/in_process_browser_test.h" 211d4bf03af656e8f45c6ff3edd85af569acf710aamark@chromium.org#include "chrome/test/base/ui_test_utils.h" 221d4bf03af656e8f45c6ff3edd85af569acf710aamark@chromium.org#include "content/public/browser/notification_service.h" 2381f836d22e87477721a659f6edb72ff6113594c9mark@chromium.org#include "content/public/test/browser_test_utils.h" 2481f836d22e87477721a659f6edb72ff6113594c9mark@chromium.org 25a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.orgnamespace { 26475089d4d1a7ea54e6f25312d665da1e982d96d0mark@chromium.orgconst char kPersistBookmarkURL[] = "http://www.cnn.com/"; 27475089d4d1a7ea54e6f25312d665da1e982d96d0mark@chromium.orgconst char kPersistBookmarkTitle[] = "CNN"; 28f6d65a99233197a7b2e194d19be63ec85ff635d2mark@chromium.org} 29f6d65a99233197a7b2e194d19be63ec85ff635d2mark@chromium.org 30f6d65a99233197a7b2e194d19be63ec85ff635d2mark@chromium.orgclass BookmarkBrowsertest : public InProcessBrowserTest { 31a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org public: 3235d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org BookmarkBrowsertest() {} 33d94ee482c8742cc70d1506cd57abadbf25509ebbmark@chromium.org 34d94ee482c8742cc70d1506cd57abadbf25509ebbmark@chromium.org bool IsVisible() { 35d94ee482c8742cc70d1506cd57abadbf25509ebbmark@chromium.org return browser()->bookmark_bar_state() == BookmarkBar::SHOW; 36d94ee482c8742cc70d1506cd57abadbf25509ebbmark@chromium.org } 37d94ee482c8742cc70d1506cd57abadbf25509ebbmark@chromium.org 3835d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org static void CheckAnimation(Browser* browser, const base::Closure& quit_task) { 3935d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org if (!browser->window()->IsBookmarkBarAnimating()) 4035d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org quit_task.Run(); 4135d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org } 4235d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org 4335d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org base::TimeDelta WaitForBookmarkBarAnimationToFinish() { 4435d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org base::Time start(base::Time::Now()); 4535d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org scoped_refptr<content::MessageLoopRunner> runner = 4635d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org new content::MessageLoopRunner; 4737964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 4837964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org base::Timer timer(false, true); 4937964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org timer.Start( 5037964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org FROM_HERE, 5137964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org base::TimeDelta::FromMilliseconds(15), 5237964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org base::Bind(&CheckAnimation, browser(), runner->QuitClosure())); 5337964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org runner->Run(); 5437964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org return base::Time::Now() - start; 5537964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org } 5637964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 5737964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org BookmarkModel* WaitForBookmarkModel(Profile* profile) { 5837964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org BookmarkModel* bookmark_model = 5937964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org BookmarkModelFactory::GetForProfile(profile); 6037964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org if (!bookmark_model->IsLoaded()) { 6137964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org content::WindowedNotificationObserver observer( 6222bf54785eb1fec2a100fb79177ed34497e74292mark@chromium.org chrome::NOTIFICATION_BOOKMARK_MODEL_LOADED, 63a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org content::NotificationService::AllSources()); 64a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org observer.Wait(); 65475089d4d1a7ea54e6f25312d665da1e982d96d0mark@chromium.org } 6635d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org return bookmark_model; 6735d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org } 6835d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org}; 6935d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org 7035d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org// Test of bookmark bar toggling, visibility, and animation. 7135d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.orgIN_PROC_BROWSER_TEST_F(BookmarkBrowsertest, BookmarkBarVisibleWait) { 7235d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org ASSERT_FALSE(IsVisible()); 7335d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org chrome::ExecuteCommand(browser(), IDC_SHOW_BOOKMARK_BAR); 7435d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org base::TimeDelta delay = WaitForBookmarkBarAnimationToFinish(); 7535d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org LOG(INFO) << "Took " << delay.InMilliseconds() << " ms to show bookmark bar"; 7635d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org ASSERT_TRUE(IsVisible()); 7735d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org chrome::ExecuteCommand(browser(), IDC_SHOW_BOOKMARK_BAR); 7835d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org delay = WaitForBookmarkBarAnimationToFinish(); 7935d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org LOG(INFO) << "Took " << delay.InMilliseconds() << " ms to hide bookmark bar"; 8035d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org ASSERT_FALSE(IsVisible()); 8135d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org} 8235d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org 8335d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org// Verify that bookmarks persist browser restart. 8435d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.orgIN_PROC_BROWSER_TEST_F(BookmarkBrowsertest, PRE_Persist) { 8535d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org BookmarkModel* bookmark_model = WaitForBookmarkModel(browser()->profile()); 8635d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org 8735d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org bookmark_utils::AddIfNotBookmarked( 8835d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org bookmark_model, GURL(kPersistBookmarkURL), 89dbd5170901cfeb753bd7cee93b5b7c40dcc76337mark@chromium.org ASCIIToUTF16(kPersistBookmarkTitle)); 90dbd5170901cfeb753bd7cee93b5b7c40dcc76337mark@chromium.org} 91dbd5170901cfeb753bd7cee93b5b7c40dcc76337mark@chromium.org 92dbd5170901cfeb753bd7cee93b5b7c40dcc76337mark@chromium.orgIN_PROC_BROWSER_TEST_F(BookmarkBrowsertest, Persist) { 93dbd5170901cfeb753bd7cee93b5b7c40dcc76337mark@chromium.org BookmarkModel* bookmark_model = WaitForBookmarkModel(browser()->profile()); 9437964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 9537964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org std::vector<BookmarkService::URLAndTitle> urls; 9637964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org bookmark_model->GetBookmarks(&urls); 9737964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 9837964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ASSERT_EQ(1u, urls.size()); 9937964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ASSERT_EQ(GURL(kPersistBookmarkURL), urls[0].url); 10037964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ASSERT_EQ(ASCIIToUTF16(kPersistBookmarkTitle), urls[0].title); 10137964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org} 10237964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 10337964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org#if !defined(OS_CHROMEOS) // No multi-profile on ChromeOS. 10437964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 10537964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org// Sanity check that bookmarks from different profiles are separate. 10637964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org// DISABLED_ because it regularly times out: http://crbug.com/159002. 10737964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.orgIN_PROC_BROWSER_TEST_F(BookmarkBrowsertest, DISABLED_MultiProfile) { 10837964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ScopedTempDir temp_dir; 10937964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 11037964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 11137964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org BookmarkModel* bookmark_model1 = WaitForBookmarkModel(browser()->profile()); 11237964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 11337964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ui_test_utils::BrowserAddedObserver observer; 11437964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org g_browser_process->profile_manager()->CreateMultiProfileAsync( 11537964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org string16(), string16(), ProfileManager::CreateCallback(), 11637964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org chrome::HOST_DESKTOP_TYPE_NATIVE); 11737964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org Browser* browser2 = observer.WaitForSingleNewBrowser(); 11837964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org BookmarkModel* bookmark_model2 = WaitForBookmarkModel(browser2->profile()); 11937964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org 12037964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org bookmark_utils::AddIfNotBookmarked( 12137964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org bookmark_model1, GURL(kPersistBookmarkURL), 12237964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org ASCIIToUTF16(kPersistBookmarkTitle)); 12337964e1e03b108dd29cba4d9b87e05684b8bc504mark@chromium.org std::vector<BookmarkService::URLAndTitle> urls1, urls2; 12435d23def8cd397d452a491a0ac7aa8bc1720c7d9mark@chromium.org bookmark_model1->GetBookmarks(&urls1); 125a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org bookmark_model2->GetBookmarks(&urls2); 126475089d4d1a7ea54e6f25312d665da1e982d96d0mark@chromium.org ASSERT_EQ(1u, urls1.size()); 127475089d4d1a7ea54e6f25312d665da1e982d96d0mark@chromium.org ASSERT_TRUE(urls2.empty()); 12822bf54785eb1fec2a100fb79177ed34497e74292mark@chromium.org} 129a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org 130a85d7de5129e37e558dc6e9c70ded4d300a71c5emark@chromium.org#endif 131475089d4d1a7ea54e6f25312d665da1e982d96d0mark@chromium.org