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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
// Copyright (c) 2012 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/files/file_path.h"
#include "base/memory/ref_counted.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/importer/importer_list.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/test_launcher.h"
#include "testing/gtest/include/gtest/gtest.h"
typedef InProcessBrowserTest FirstRunBrowserTest;
IN_PROC_BROWSER_TEST_F(FirstRunBrowserTest, SetShowFirstRunBubblePref) {
EXPECT_TRUE(g_browser_process->local_state()->FindPreference(
prefs::kShowFirstRunBubbleOption));
EXPECT_EQ(first_run::FIRST_RUN_BUBBLE_DONT_SHOW,
g_browser_process->local_state()->GetInteger(
prefs::kShowFirstRunBubbleOption));
EXPECT_TRUE(first_run::SetShowFirstRunBubblePref(
first_run::FIRST_RUN_BUBBLE_SHOW));
ASSERT_TRUE(g_browser_process->local_state()->FindPreference(
prefs::kShowFirstRunBubbleOption));
EXPECT_EQ(first_run::FIRST_RUN_BUBBLE_SHOW,
g_browser_process->local_state()->GetInteger(
prefs::kShowFirstRunBubbleOption));
// Test that toggling the value works in either direction after it's been set.
EXPECT_TRUE(first_run::SetShowFirstRunBubblePref(
first_run::FIRST_RUN_BUBBLE_DONT_SHOW));
EXPECT_EQ(first_run::FIRST_RUN_BUBBLE_DONT_SHOW,
g_browser_process->local_state()->GetInteger(
prefs::kShowFirstRunBubbleOption));
// Test that the value can't be set to FIRST_RUN_BUBBLE_SHOW after it has been
// set to FIRST_RUN_BUBBLE_SUPPRESS.
EXPECT_TRUE(first_run::SetShowFirstRunBubblePref(
first_run::FIRST_RUN_BUBBLE_SUPPRESS));
EXPECT_EQ(first_run::FIRST_RUN_BUBBLE_SUPPRESS,
g_browser_process->local_state()->GetInteger(
prefs::kShowFirstRunBubbleOption));
EXPECT_TRUE(first_run::SetShowFirstRunBubblePref(
first_run::FIRST_RUN_BUBBLE_SHOW));
EXPECT_EQ(first_run::FIRST_RUN_BUBBLE_SUPPRESS,
g_browser_process->local_state()->GetInteger(
prefs::kShowFirstRunBubbleOption));
}
IN_PROC_BROWSER_TEST_F(FirstRunBrowserTest, SetShouldShowWelcomePage) {
EXPECT_FALSE(first_run::ShouldShowWelcomePage());
first_run::SetShouldShowWelcomePage();
EXPECT_TRUE(first_run::ShouldShowWelcomePage());
EXPECT_FALSE(first_run::ShouldShowWelcomePage());
}
#if !defined(OS_CHROMEOS)
namespace {
// A generic test class to be subclassed by test classes testing specific
// master_preferences. All subclasses must call SetMasterPreferencesForTest()
// from their SetUp() method before deferring the remainder of Setup() to this
// class.
class FirstRunMasterPrefsBrowserTestBase : public InProcessBrowserTest {
public:
FirstRunMasterPrefsBrowserTestBase() {}
protected:
virtual void SetUp() OVERRIDE {
// All users of this test class need to call SetMasterPreferencesForTest()
// before this class' SetUp() is invoked.
ASSERT_TRUE(text_.get());
ASSERT_TRUE(file_util::CreateTemporaryFile(&prefs_file_));
EXPECT_TRUE(file_util::WriteFile(prefs_file_, text_->c_str(),
text_->size()));
first_run::SetMasterPrefsPathForTesting(prefs_file_);
// This invokes BrowserMain, and does the import, so must be done last.
InProcessBrowserTest::SetUp();
}
virtual void TearDown() OVERRIDE {
EXPECT_TRUE(base::Delete(prefs_file_, false));
InProcessBrowserTest::TearDown();
}
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
InProcessBrowserTest::SetUpCommandLine(command_line);
command_line->AppendSwitch(switches::kForceFirstRun);
EXPECT_EQ(first_run::AUTO_IMPORT_NONE, first_run::auto_import_state());
extensions::ComponentLoader::EnableBackgroundExtensionsForTesting();
}
void SetMasterPreferencesForTest(const char text[]) {
text_.reset(new std::string(text));
}
private:
base::FilePath prefs_file_;
scoped_ptr<std::string> text_;
DISALLOW_COPY_AND_ASSIGN(FirstRunMasterPrefsBrowserTestBase);
};
template<const char Text[]>
class FirstRunMasterPrefsBrowserTestT
: public FirstRunMasterPrefsBrowserTestBase {
public:
FirstRunMasterPrefsBrowserTestT() {}
protected:
virtual void SetUp() OVERRIDE {
SetMasterPreferencesForTest(Text);
FirstRunMasterPrefsBrowserTestBase::SetUp();
}
private:
DISALLOW_COPY_AND_ASSIGN(FirstRunMasterPrefsBrowserTestT);
};
// Returns the true expected import state, derived from the original
// |expected_import_state|, for the current test machine's configuration. Some
// bot configurations do not have another profile (browser) to import from and
// thus the import must not be expected to have occurred.
int MaskExpectedImportState(int expected_import_state) {
scoped_refptr<ImporterList> importer_list(new ImporterList(NULL));
importer_list->DetectSourceProfilesHack(
g_browser_process->GetApplicationLocale());
int source_profile_count = importer_list->count();
#if defined(OS_WIN)
// On Windows, the importer's DetectIEProfiles() will always add to the count.
// Internet Explorer always exists and always has something to import.
EXPECT_GT(source_profile_count, 0);
#endif
if (source_profile_count == 0)
return expected_import_state & ~first_run::AUTO_IMPORT_PROFILE_IMPORTED;
return expected_import_state;
}
} // namespace
extern const char kImportDefault[] =
"{\n"
"}\n";
typedef FirstRunMasterPrefsBrowserTestT<kImportDefault>
FirstRunMasterPrefsImportDefault;
IN_PROC_BROWSER_TEST_F(FirstRunMasterPrefsImportDefault, ImportDefault) {
int auto_import_state = first_run::auto_import_state();
EXPECT_EQ(MaskExpectedImportState(first_run::AUTO_IMPORT_CALLED |
first_run::AUTO_IMPORT_PROFILE_IMPORTED),
auto_import_state);
}
// The bookmarks file doesn't actually need to exist for this integration test
// to trigger the interaction being tested.
extern const char kImportBookmarksFile[] =
"{\n"
" \"distribution\": {\n"
" \"import_bookmarks_from_file\": \"/foo/doesntexists.wtv\"\n"
" }\n"
"}\n";
typedef FirstRunMasterPrefsBrowserTestT<kImportBookmarksFile>
FirstRunMasterPrefsImportBookmarksFile;
IN_PROC_BROWSER_TEST_F(FirstRunMasterPrefsImportBookmarksFile,
ImportBookmarksFile) {
int auto_import_state = first_run::auto_import_state();
EXPECT_EQ(
MaskExpectedImportState(first_run::AUTO_IMPORT_CALLED |
first_run::AUTO_IMPORT_PROFILE_IMPORTED |
first_run::AUTO_IMPORT_BOOKMARKS_FILE_IMPORTED),
auto_import_state);
}
// Test an import with all import options disabled. This is a regression test
// for http://crbug.com/169984 where this would cause the import process to
// stay running, and the NTP to be loaded with no apps.
extern const char kImportNothing[] =
"{\n"
" \"distribution\": {\n"
" \"import_bookmarks\": false,\n"
" \"import_history\": false,\n"
" \"import_home_page\": false,\n"
" \"import_search_engine\": false\n"
" }\n"
"}\n";
typedef FirstRunMasterPrefsBrowserTestT<kImportNothing>
FirstRunMasterPrefsImportNothing;
IN_PROC_BROWSER_TEST_F(FirstRunMasterPrefsImportNothing,
ImportNothingAndShowNewTabPage) {
EXPECT_EQ(first_run::AUTO_IMPORT_CALLED, first_run::auto_import_state());
ui_test_utils::NavigateToURLWithDisposition(
browser(), GURL(chrome::kChromeUINewTabURL), CURRENT_TAB,
ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
content::WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0);
EXPECT_EQ(1, tab->GetMaxPageID());
}
#endif // !defined(OS_CHROMEOS)
|