Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Side by Side Diff: chrome/browser/extensions/api/preference/preference_apitest.cc

Issue 23694020: Don't clear existing extension-defined preferences and content settings when reloading or updating… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: x Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/prefs/pref_service.h" 5 #include "base/prefs/pref_service.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/browser_process.h"
8 #include "chrome/browser/chrome_notification_types.h"
7 #include "chrome/browser/extensions/extension_apitest.h" 9 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chrome/browser/extensions/extension_test_message_listener.h" 10 #include "chrome/browser/extensions/extension_test_message_listener.h"
9 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
11 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/chrome_switches.h"
12 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
13 #include "chrome/test/base/ui_test_utils.h" 15 #include "chrome/test/base/ui_test_utils.h"
16 #include "content/public/browser/notification_service.h"
14 17
15 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PreferenceApi) { 18 namespace {
16 PrefService* pref_service = browser()->profile()->GetPrefs();
17 pref_service->SetBoolean(prefs::kAlternateErrorPagesEnabled, false);
18 pref_service->SetBoolean(autofill::prefs::kAutofillEnabled, false);
19 pref_service->SetBoolean(prefs::kBlockThirdPartyCookies, true);
20 pref_service->SetBoolean(prefs::kEnableHyperlinkAuditing, false);
21 pref_service->SetBoolean(prefs::kEnableReferrers, false);
22 pref_service->SetBoolean(prefs::kEnableTranslate, false);
23 pref_service->SetBoolean(prefs::kNetworkPredictionEnabled, false);
24 pref_service->SetBoolean(prefs::kSafeBrowsingEnabled, false);
25 pref_service->SetBoolean(prefs::kSearchSuggestEnabled, false);
26 19
27 EXPECT_TRUE(RunExtensionTest("preference/standard")) << message_; 20 void ReleaseBrowserProcessModule() {
28 21 g_browser_process->ReleaseModule();
29 const PrefService::Preference* pref = pref_service->FindPreference(
30 prefs::kBlockThirdPartyCookies);
31 ASSERT_TRUE(pref);
32 EXPECT_TRUE(pref->IsExtensionControlled());
33 EXPECT_TRUE(pref_service->GetBoolean(prefs::kAlternateErrorPagesEnabled));
34 EXPECT_TRUE(pref_service->GetBoolean(autofill::prefs::kAutofillEnabled));
35 EXPECT_FALSE(pref_service->GetBoolean(prefs::kBlockThirdPartyCookies));
36 EXPECT_TRUE(pref_service->GetBoolean(prefs::kEnableHyperlinkAuditing));
37 EXPECT_TRUE(pref_service->GetBoolean(prefs::kEnableReferrers));
38 EXPECT_TRUE(pref_service->GetBoolean(prefs::kEnableTranslate));
39 EXPECT_TRUE(pref_service->GetBoolean(prefs::kNetworkPredictionEnabled));
40 EXPECT_TRUE(pref_service->GetBoolean(prefs::kSafeBrowsingEnabled));
41 EXPECT_TRUE(pref_service->GetBoolean(prefs::kSearchSuggestEnabled));
42 } 22 }
43 23
44 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PreferencePersistentIncognito) { 24 } // namespace
45 PrefService* prefs = browser()->profile()->GetPrefs(); 25
26 class ExtensionPreferenceApiTest : public ExtensionApiTest {
27 protected:
28 ExtensionPreferenceApiTest() : profile_(NULL) {}
29
30 void CheckPreferencesSet() {
31 PrefService* prefs = profile_->GetPrefs();
32 const PrefService::Preference* pref = prefs->FindPreference(
33 prefs::kBlockThirdPartyCookies);
34 ASSERT_TRUE(pref);
35 EXPECT_TRUE(pref->IsExtensionControlled());
36 EXPECT_TRUE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled));
37 EXPECT_TRUE(prefs->GetBoolean(autofill::prefs::kAutofillEnabled));
38 EXPECT_FALSE(prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
39 EXPECT_TRUE(prefs->GetBoolean(prefs::kEnableHyperlinkAuditing));
40 EXPECT_TRUE(prefs->GetBoolean(prefs::kEnableReferrers));
41 EXPECT_TRUE(prefs->GetBoolean(prefs::kEnableTranslate));
42 EXPECT_TRUE(prefs->GetBoolean(prefs::kNetworkPredictionEnabled));
43 EXPECT_TRUE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
44 EXPECT_TRUE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
45 }
46
47 void CheckPreferencesCleared() {
48 PrefService* prefs = profile_->GetPrefs();
49 const PrefService::Preference* pref = prefs->FindPreference(
50 prefs::kBlockThirdPartyCookies);
51 ASSERT_TRUE(pref);
52 EXPECT_FALSE(pref->IsExtensionControlled());
53 EXPECT_FALSE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled));
54 EXPECT_FALSE(prefs->GetBoolean(autofill::prefs::kAutofillEnabled));
55 EXPECT_TRUE(prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
56 EXPECT_FALSE(prefs->GetBoolean(prefs::kEnableHyperlinkAuditing));
57 EXPECT_FALSE(prefs->GetBoolean(prefs::kEnableReferrers));
58 EXPECT_FALSE(prefs->GetBoolean(prefs::kEnableTranslate));
59 EXPECT_FALSE(prefs->GetBoolean(prefs::kNetworkPredictionEnabled));
60 EXPECT_FALSE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
61 EXPECT_FALSE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
62 }
63
64 virtual void SetUpOnMainThread() OVERRIDE {
65 ExtensionApiTest::SetUpOnMainThread();
66
67 // The browser might get closed later (and therefore be destroyed), so we
68 // save the profile.
69 profile_ = browser()->profile();
70
71 // Closing the last browser window also releases a module reference. Make
72 // sure it's not the last one, so the message loop doesn't quit
73 // unexpectedly.
74 g_browser_process->AddRefModule();
75 }
76
77 virtual void CleanUpOnMainThread() OVERRIDE {
78 // ReleaseBrowserProcessModule() needs to be called in a message loop, so we
79 // post a task to do it, then run the message loop.
80 base::MessageLoop::current()->PostTask(
81 FROM_HERE, base::Bind(&ReleaseBrowserProcessModule));
82 content::RunAllPendingInMessageLoop();
83
84 ExtensionApiTest::CleanUpOnMainThread();
85 }
86
87 Profile* profile_;
88 };
89
90 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, Standard) {
91 PrefService* prefs = profile_->GetPrefs();
92 prefs->SetBoolean(prefs::kAlternateErrorPagesEnabled, false);
93 prefs->SetBoolean(autofill::prefs::kAutofillEnabled, false);
94 prefs->SetBoolean(prefs::kBlockThirdPartyCookies, true);
95 prefs->SetBoolean(prefs::kEnableHyperlinkAuditing, false);
96 prefs->SetBoolean(prefs::kEnableReferrers, false);
97 prefs->SetBoolean(prefs::kEnableTranslate, false);
98 prefs->SetBoolean(prefs::kNetworkPredictionEnabled, false);
99 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, false);
100 prefs->SetBoolean(prefs::kSearchSuggestEnabled, false);
101
102 const char kExtensionPath[] = "preference/standard";
103
104 EXPECT_TRUE(RunExtensionSubtest(kExtensionPath, "test.html")) << message_;
105 CheckPreferencesSet();
106
107 // The settings should not be reset when the extension is reloaded.
108 ReloadExtension(last_loaded_extension_id_);
109 CheckPreferencesSet();
110
111 // Uninstalling and installing the extension (without running the test that
112 // calls the extension API) should clear the settings.
113 content::WindowedNotificationObserver observer(
114 chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
115 content::NotificationService::AllSources());
116 UninstallExtension(last_loaded_extension_id_);
117 observer.Wait();
118 CheckPreferencesCleared();
119
120 LoadExtension(test_data_dir_.AppendASCII(kExtensionPath));
121 CheckPreferencesCleared();
122 }
123
124 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, PersistentIncognito) {
125 PrefService* prefs = profile_->GetPrefs();
46 prefs->SetBoolean(prefs::kBlockThirdPartyCookies, false); 126 prefs->SetBoolean(prefs::kBlockThirdPartyCookies, false);
47 127
48 EXPECT_TRUE( 128 EXPECT_TRUE(
49 RunExtensionTestIncognito("preference/persistent_incognito")) << 129 RunExtensionTestIncognito("preference/persistent_incognito")) <<
50 message_; 130 message_;
51 131
52 // Setting an incognito preference should not create an incognito profile. 132 // Setting an incognito preference should not create an incognito profile.
53 EXPECT_FALSE(browser()->profile()->HasOffTheRecordProfile()); 133 EXPECT_FALSE(profile_->HasOffTheRecordProfile());
54 134
55 PrefService* otr_prefs = 135 PrefService* otr_prefs = profile_->GetOffTheRecordProfile()->GetPrefs();
56 browser()->profile()->GetOffTheRecordProfile()->GetPrefs();
57 const PrefService::Preference* pref = 136 const PrefService::Preference* pref =
58 otr_prefs->FindPreference(prefs::kBlockThirdPartyCookies); 137 otr_prefs->FindPreference(prefs::kBlockThirdPartyCookies);
59 ASSERT_TRUE(pref); 138 ASSERT_TRUE(pref);
60 EXPECT_TRUE(pref->IsExtensionControlled()); 139 EXPECT_TRUE(pref->IsExtensionControlled());
61 EXPECT_TRUE(otr_prefs->GetBoolean(prefs::kBlockThirdPartyCookies)); 140 EXPECT_TRUE(otr_prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
62 141
63 pref = prefs->FindPreference(prefs::kBlockThirdPartyCookies); 142 pref = prefs->FindPreference(prefs::kBlockThirdPartyCookies);
64 ASSERT_TRUE(pref); 143 ASSERT_TRUE(pref);
65 EXPECT_FALSE(pref->IsExtensionControlled()); 144 EXPECT_FALSE(pref->IsExtensionControlled());
66 EXPECT_FALSE(prefs->GetBoolean(prefs::kBlockThirdPartyCookies)); 145 EXPECT_FALSE(prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
67 } 146 }
68 147
69 // Flakily times out: http://crbug.com/106144 148 // Flakily times out: http://crbug.com/106144
70 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_PreferenceIncognitoDisabled) { 149 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, DISABLED_IncognitoDisabled) {
71 EXPECT_FALSE(RunExtensionTest("preference/persistent_incognito")); 150 EXPECT_FALSE(RunExtensionTest("preference/persistent_incognito"));
72 } 151 }
73 152
74 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PreferenceSessionOnlyIncognito) { 153 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, SessionOnlyIncognito) {
75 PrefService* prefs = browser()->profile()->GetPrefs(); 154 PrefService* prefs = profile_->GetPrefs();
76 prefs->SetBoolean(prefs::kBlockThirdPartyCookies, false); 155 prefs->SetBoolean(prefs::kBlockThirdPartyCookies, false);
77 156
78 EXPECT_TRUE( 157 EXPECT_TRUE(
79 RunExtensionTestIncognito("preference/session_only_incognito")) << 158 RunExtensionTestIncognito("preference/session_only_incognito")) <<
80 message_; 159 message_;
81 160
82 EXPECT_TRUE(browser()->profile()->HasOffTheRecordProfile()); 161 EXPECT_TRUE(profile_->HasOffTheRecordProfile());
83 162
84 PrefService* otr_prefs = 163 PrefService* otr_prefs = profile_->GetOffTheRecordProfile()->GetPrefs();
85 browser()->profile()->GetOffTheRecordProfile()->GetPrefs();
86 const PrefService::Preference* pref = 164 const PrefService::Preference* pref =
87 otr_prefs->FindPreference(prefs::kBlockThirdPartyCookies); 165 otr_prefs->FindPreference(prefs::kBlockThirdPartyCookies);
88 ASSERT_TRUE(pref); 166 ASSERT_TRUE(pref);
89 EXPECT_TRUE(pref->IsExtensionControlled()); 167 EXPECT_TRUE(pref->IsExtensionControlled());
90 EXPECT_FALSE(otr_prefs->GetBoolean(prefs::kBlockThirdPartyCookies)); 168 EXPECT_FALSE(otr_prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
91 169
92 pref = prefs->FindPreference(prefs::kBlockThirdPartyCookies); 170 pref = prefs->FindPreference(prefs::kBlockThirdPartyCookies);
93 ASSERT_TRUE(pref); 171 ASSERT_TRUE(pref);
94 EXPECT_FALSE(pref->IsExtensionControlled()); 172 EXPECT_FALSE(pref->IsExtensionControlled());
95 EXPECT_FALSE(prefs->GetBoolean(prefs::kBlockThirdPartyCookies)); 173 EXPECT_FALSE(prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
96 } 174 }
97 175
98 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PreferenceClear) { 176 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, Clear) {
99 PrefService* pref_service = browser()->profile()->GetPrefs(); 177 PrefService* prefs = profile_->GetPrefs();
100 pref_service->SetBoolean(prefs::kBlockThirdPartyCookies, true); 178 prefs->SetBoolean(prefs::kBlockThirdPartyCookies, true);
101 179
102 EXPECT_TRUE(RunExtensionTest("preference/clear")) << message_; 180 EXPECT_TRUE(RunExtensionTest("preference/clear")) << message_;
103 181
104 const PrefService::Preference* pref = pref_service->FindPreference( 182 const PrefService::Preference* pref = prefs->FindPreference(
105 prefs::kBlockThirdPartyCookies); 183 prefs::kBlockThirdPartyCookies);
106 ASSERT_TRUE(pref); 184 ASSERT_TRUE(pref);
107 EXPECT_FALSE(pref->IsExtensionControlled()); 185 EXPECT_FALSE(pref->IsExtensionControlled());
108 EXPECT_EQ(true, pref_service->GetBoolean(prefs::kBlockThirdPartyCookies)); 186 EXPECT_EQ(true, prefs->GetBoolean(prefs::kBlockThirdPartyCookies));
109 } 187 }
110 188
111 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PreferenceOnChange) { 189 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, OnChange) {
112 EXPECT_TRUE(RunExtensionTestIncognito("preference/onchange")) << 190 EXPECT_TRUE(RunExtensionTestIncognito("preference/onchange")) <<
113 message_; 191 message_;
114 } 192 }
115 193
116 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PreferenceOnChangeSplit) { 194 IN_PROC_BROWSER_TEST_F(ExtensionPreferenceApiTest, OnChangeSplit) {
117 ResultCatcher catcher; 195 ResultCatcher catcher;
118 catcher.RestrictToProfile(browser()->profile()); 196 catcher.RestrictToProfile(profile_);
119 ResultCatcher catcher_incognito; 197 ResultCatcher catcher_incognito;
120 catcher_incognito.RestrictToProfile( 198 catcher_incognito.RestrictToProfile(profile_->GetOffTheRecordProfile());
121 browser()->profile()->GetOffTheRecordProfile());
122 199
123 // Open an incognito window. 200 // Open an incognito window.
124 ui_test_utils::OpenURLOffTheRecord(browser()->profile(), 201 ui_test_utils::OpenURLOffTheRecord(profile_, GURL("chrome://newtab/"));
125 GURL("chrome://newtab/"));
126 202
127 // changeDefault listeners. 203 // changeDefault listeners.
128 ExtensionTestMessageListener listener1("changeDefault regular ready", true); 204 ExtensionTestMessageListener listener1("changeDefault regular ready", true);
129 ExtensionTestMessageListener listener_incognito1( 205 ExtensionTestMessageListener listener_incognito1(
130 "changeDefault incognito ready", true); 206 "changeDefault incognito ready", true);
131 207
132 // changeIncognitoOnly listeners. 208 // changeIncognitoOnly listeners.
133 ExtensionTestMessageListener listener2( 209 ExtensionTestMessageListener listener2(
134 "changeIncognitoOnly regular ready", true); 210 "changeIncognitoOnly regular ready", true);
135 ExtensionTestMessageListener listener_incognito2( 211 ExtensionTestMessageListener listener_incognito2(
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 303
228 // Test 6 - clearDefault 304 // Test 6 - clearDefault
229 EXPECT_TRUE(listener10.WaitUntilSatisfied()); // Regular ready 305 EXPECT_TRUE(listener10.WaitUntilSatisfied()); // Regular ready
230 EXPECT_TRUE(listener_incognito10.WaitUntilSatisfied()); // Incognito ready 306 EXPECT_TRUE(listener_incognito10.WaitUntilSatisfied()); // Incognito ready
231 listener10.Reply("ok"); 307 listener10.Reply("ok");
232 listener_incognito10.Reply("ok"); 308 listener_incognito10.Reply("ok");
233 309
234 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 310 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
235 EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message(); 311 EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message();
236 } 312 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698