Add unit test for the Settings API Bubble.
[chromium-blink-merge.git] / chrome / browser / ui / bookmarks / bookmark_prompt_controller_unittest.cc
blob23d1091b4f0d7fdc14798aa53ec5a655cf541bf4
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/bookmarks/bookmark_prompt_controller.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "base/metrics/field_trial.h"
9 #include "base/prefs/pref_service.h"
10 #include "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/browser_list.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
15 #include "chrome/test/base/browser_with_test_window_test.h"
16 #include "chrome/test/base/test_browser_window.h"
17 #include "chrome/test/base/testing_browser_process.h"
18 #include "content/public/browser/notification_service.h"
19 #include "content/public/browser/notification_types.h"
20 #include "content/public/browser/web_contents.h"
22 class BookmarkPromptControllerTest : public BrowserWithTestWindowTest {
23 public:
24 BookmarkPromptControllerTest() : field_trial_list_(NULL), page_id_(0) {
25 base::FieldTrialList::CreateFieldTrial("BookmarkPrompt", "Experiment");
28 protected:
29 int show_prompt_call_count() const {
30 return static_cast<MyTestBrowserWindow*>(browser()->window())->
31 show_prompt_call_count();
34 void Visit(const GURL& url) {
35 AddTab(browser(), url);
37 // Simulate page loaded.
38 ++page_id_;
39 content::WebContents* web_contents =
40 browser()->tab_strip_model()->GetActiveWebContents();
41 content::NotificationService::current()->Notify(
42 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
43 content::Source<content::WebContents>(web_contents),
44 content::Details<int>(&page_id_));
46 // Wait until HistoryService::QueryURL completion.
47 static_cast<TestingProfile*>(browser()->profile())->
48 BlockUntilHistoryProcessesPendingRequests();
51 private:
52 class MyTestBrowserWindow : public TestBrowserWindow {
53 public:
54 MyTestBrowserWindow() : show_prompt_call_count_(0) {}
55 int show_prompt_call_count() { return show_prompt_call_count_; }
57 private:
58 virtual bool IsActive() const OVERRIDE { return true; }
59 virtual void ShowBookmarkPrompt() OVERRIDE { ++show_prompt_call_count_; }
60 int show_prompt_call_count_;
62 DISALLOW_COPY_AND_ASSIGN(MyTestBrowserWindow);
65 virtual void SetUp() OVERRIDE {
66 TestingBrowserProcess::GetGlobal()->
67 SetBookmarkPromptController(new BookmarkPromptController);
68 BrowserWithTestWindowTest::SetUp();
69 ASSERT_TRUE(static_cast<TestingProfile*>(browser()->profile())->
70 CreateHistoryService(true, false));
71 static_cast<TestingProfile*>(browser()->profile())->
72 BlockUntilHistoryIndexIsRefreshed();
73 // Simulate browser activation.
74 BrowserList::SetLastActive(browser());
77 virtual void TearDown() OVERRIDE {
78 TestingBrowserProcess::GetGlobal()->
79 SetBookmarkPromptController(NULL);
80 static_cast<TestingProfile*>(browser()->profile())->
81 DestroyHistoryService();
82 BrowserWithTestWindowTest::TearDown();
85 virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
86 return new MyTestBrowserWindow;
89 base::FieldTrialList field_trial_list_;
90 int page_id_;
92 DISALLOW_COPY_AND_ASSIGN(BookmarkPromptControllerTest);
95 // Test for maximum prompt impression count.
96 TEST_F(BookmarkPromptControllerTest, MaxImpressionCountTest) {
97 BookmarkPromptPrefs prefs(browser()->profile()->GetPrefs());
99 // Simulate we've already display bookmark prompt many times.
100 for (int i = 0; i < BookmarkPromptController::kMaxPromptImpressionCount;
101 ++i) {
102 prefs.IncrementPromptImpressionCount();
105 // Visit the URL many times to display bookmark prompt.
106 GURL url("http://foo");
107 for (int visit_count = 1;
108 visit_count <= BookmarkPromptController::kVisitCountForSessionTrigger;
109 ++visit_count) {
110 Visit(url);
113 // Although, we don't display bookmark prompt since we've already displayed
114 // many times.
115 EXPECT_EQ(0, show_prompt_call_count());
116 EXPECT_EQ(BookmarkPromptController::kMaxPromptImpressionCount,
117 prefs.GetPromptImpressionCount());
120 // Test for session trigger and permanent trigger.
121 TEST_F(BookmarkPromptControllerTest, TriggerTest) {
122 BookmarkPromptPrefs prefs(browser()->profile()->GetPrefs());
124 GURL url("http://foo");
125 for (int visit_count = 1;
126 visit_count < BookmarkPromptController::kVisitCountForPermanentTrigger;
127 ++visit_count) {
128 Visit(url);
129 if (visit_count < BookmarkPromptController::kVisitCountForSessionTrigger) {
130 EXPECT_EQ(0, show_prompt_call_count());
131 EXPECT_EQ(0, prefs.GetPromptImpressionCount());
132 } else {
133 EXPECT_EQ(1, show_prompt_call_count());
134 EXPECT_EQ(1, prefs.GetPromptImpressionCount());
138 Visit(url);
140 EXPECT_EQ(2, show_prompt_call_count());
141 EXPECT_EQ(2, prefs.GetPromptImpressionCount());