1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/command_line.h"
#include "base/prefs/pref_service.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/first_run/goodies_displayer.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
namespace chromeos {
class GoodiesDisplayerBrowserTest : public InProcessBrowserTest {
public:
GoodiesDisplayerBrowserTest() {}
protected:
~GoodiesDisplayerBrowserTest() override {
first_run::GoodiesDisplayer::Delete();
}
// Set up windowless browser and GoodiesDisplayer. |delta_days| is +/- delta
// in days from kMaxDaysAfterOobeForGoodies; <= 0: "show", > 0: "don't show".
Browser* CreateBrowserAndDisplayer(int delta_days) {
// Create a new browser and wait for completion.
ui_test_utils::BrowserAddedObserver browser_added_observer;
Browser* browser = new Browser(Browser::CreateParams(
ProfileManager::GetActiveUserProfile(), chrome::GetActiveDesktop()));
browser_added_observer.WaitForSingleNewBrowser();
// Set up Goodies Displayer and set fake age of device.
setup_info_.days_since_oobe =
first_run::GoodiesDisplayer::kMaxDaysAfterOobeForGoodies + delta_days;
first_run::GoodiesDisplayer::InitForTesting(&setup_info_);
WaitForGoodiesSetup();
return browser;
}
// The point of all tests here is to check whether the Goodies tab has been
// correctly opened; this function does the checking. |expected_tabs| is the
// expected number of total tabs; |expected_goodies_tabs| should be 0 or 1.
void ExpectTabCounts(Browser* browser,
int expected_tabs,
int expected_goodies_tabs) {
const int tab_count = browser->tab_strip_model()->count();
int goodies_tab_count = 0;
for (int index = 0; index < tab_count; index++) {
const std::string tab_url = browser->tab_strip_model()
->GetWebContentsAt(index)->GetVisibleURL().spec();
if (tab_url == first_run::GoodiesDisplayer::kGoodiesURL)
++goodies_tab_count;
}
EXPECT_EQ(expected_tabs, tab_count);
EXPECT_EQ(expected_goodies_tabs, goodies_tab_count);
}
private:
void WaitForGoodiesSetup() {
if (setup_info_.setup_complete)
return;
// Wait for GoodiesDisplayer setup completion. The completion callback will
// shut down the message loop.
scoped_refptr<content::MessageLoopRunner> message_loop_runner =
new content::MessageLoopRunner;
setup_info_.on_setup_complete_callback = message_loop_runner->QuitClosure();
message_loop_runner->Run();
setup_info_.on_setup_complete_callback.Reset();
EXPECT_TRUE(setup_info_.setup_complete);
}
// InProcessBrowserTest overrides.
void SetUpCommandLine(base::CommandLine* command_line) override {
// Don't want a browser window until GoodiesDisplayer is observing.
command_line->AppendSwitch(switches::kNoStartupWindow);
}
first_run::GoodiesDisplayerTestInfo setup_info_;
};
// Tests that the Goodies page is not shown on older device.
IN_PROC_BROWSER_TEST_F(GoodiesDisplayerBrowserTest, OldDeviceNoDisplay) {
EXPECT_TRUE(g_browser_process->local_state()->GetBoolean(
prefs::kCanShowOobeGoodiesPage));
ASSERT_EQ(0u, chrome::GetTotalBrowserCount());
Browser* browser = CreateBrowserAndDisplayer(1); // 1 day too old.
ASSERT_EQ(1u, chrome::GetTotalBrowserCount());
AddBlankTabAndShow(browser);
ExpectTabCounts(browser, 1, 0); // Shouldn't show Goodies tab.
EXPECT_FALSE(g_browser_process->local_state()->GetBoolean(
prefs::kCanShowOobeGoodiesPage));
}
// Tests that the Goodies page is shown, only once, on non-incognito browser
// when device isn't too old.
IN_PROC_BROWSER_TEST_F(GoodiesDisplayerBrowserTest, DisplayGoodies) {
ASSERT_EQ(0u, chrome::GetTotalBrowserCount());
Browser* browser = CreateBrowserAndDisplayer(-1);
ASSERT_EQ(1u, chrome::GetTotalBrowserCount());
// Shouldn't show Goodies tab in incognito mode.
Browser* incognito_browser = new Browser(
Browser::CreateParams(browser->profile()->GetOffTheRecordProfile(),
chrome::GetActiveDesktop()));
ASSERT_EQ(2u, chrome::GetTotalBrowserCount());
AddBlankTabAndShow(incognito_browser);
ExpectTabCounts(incognito_browser, 1, 0);
CloseBrowserSynchronously(incognito_browser);
ASSERT_EQ(1u, chrome::GetTotalBrowserCount());
EXPECT_TRUE(g_browser_process->local_state()->GetBoolean(
prefs::kCanShowOobeGoodiesPage));
// First logged-in browser shows Goodies.
AddBlankTabAndShow(browser);
ExpectTabCounts(browser, 2, 1);
EXPECT_FALSE(g_browser_process->local_state()->GetBoolean(
prefs::kCanShowOobeGoodiesPage));
// Next time a browser is opened, no Goodies.
Browser* browser2 = CreateBrowser(browser->profile());
ASSERT_EQ(2u, chrome::GetTotalBrowserCount());
ExpectTabCounts(browser2, 1, 0);
}
} // namespace chromeos
|