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

Side by Side Diff: chrome/browser/ui/extensions/extension_message_bubble_browsertest.cc

Issue 2076093004: [Extensions UI] Handle multiple warning bubbles racing to show (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix win tests Created 4 years, 6 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/ui/extensions/extension_message_bubble_browsertest.h" 5 #include "chrome/browser/ui/extensions/extension_message_bubble_browsertest.h"
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
10 #include "chrome/browser/extensions/extension_action_test_util.h" 10 #include "chrome/browser/extensions/extension_action_test_util.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 " 'manifest_version': 2,\n" 58 " 'manifest_version': 2,\n"
59 " 'description': 'controls settings',\n" 59 " 'description': 'controls settings',\n"
60 " 'chrome_settings_overrides': {\n" 60 " 'chrome_settings_overrides': {\n"
61 " %s\n" 61 " %s\n"
62 " }\n" 62 " }\n"
63 "}", settings_override_value.c_str()); 63 "}", settings_override_value.c_str());
64 custom_extension_dir_->WriteManifestWithSingleQuotes(manifest); 64 custom_extension_dir_->WriteManifestWithSingleQuotes(manifest);
65 ASSERT_TRUE(LoadExtension(custom_extension_dir_->unpacked_path())); 65 ASSERT_TRUE(LoadExtension(custom_extension_dir_->unpacked_path()));
66 } 66 }
67 67
68 void ExtensionMessageBubbleBrowserTest::CheckBubble(
69 Browser* browser,
70 AnchorPosition position,
71 bool should_be_highlighting) {
72 EXPECT_EQ(should_be_highlighting, toolbar_model()->is_highlighting());
73 EXPECT_TRUE(toolbar_model()->has_active_bubble());
74 EXPECT_TRUE(browser->window()->GetToolbarActionsBar()->is_showing_bubble());
75 CheckBubbleNative(browser, position);
76 }
77
78 void ExtensionMessageBubbleBrowserTest::CheckBubbleIsNotPresent(
79 Browser* browser,
80 bool should_profile_have_bubble,
81 bool should_be_highlighting) {
82 // We should never be highlighting without an active bubble.
83 ASSERT_TRUE(!should_be_highlighting || should_profile_have_bubble);
84 EXPECT_EQ(should_be_highlighting, toolbar_model()->is_highlighting());
85 EXPECT_EQ(should_profile_have_bubble, toolbar_model()->has_active_bubble());
86 EXPECT_FALSE(browser->window()->GetToolbarActionsBar()->is_showing_bubble());
87 CheckBubbleIsNotPresentNative(browser);
88 }
89
90 void ExtensionMessageBubbleBrowserTest::CloseBubble(Browser* browser) {
91 CloseBubbleNative(browser);
92 base::RunLoop().RunUntilIdle();
93 CheckBubbleIsNotPresent(browser, false, false);
94 }
95
68 void ExtensionMessageBubbleBrowserTest::TestBubbleAnchoredToExtensionAction() { 96 void ExtensionMessageBubbleBrowserTest::TestBubbleAnchoredToExtensionAction() {
69 scoped_refptr<const extensions::Extension> action_extension = 97 scoped_refptr<const extensions::Extension> action_extension =
70 extensions::extension_action_test_util::CreateActionExtension( 98 extensions::extension_action_test_util::CreateActionExtension(
71 "action_extension", 99 "action_extension",
72 extensions::extension_action_test_util::BROWSER_ACTION, 100 extensions::extension_action_test_util::BROWSER_ACTION,
73 extensions::Manifest::UNPACKED); 101 extensions::Manifest::UNPACKED);
74 extension_service()->AddExtension(action_extension.get()); 102 extension_service()->AddExtension(action_extension.get());
75 103
76 Browser* second_browser = new Browser(Browser::CreateParams(profile())); 104 Browser* second_browser = new Browser(Browser::CreateParams(profile()));
77 base::RunLoop().RunUntilIdle(); 105 base::RunLoop().RunUntilIdle();
78 106
79 CheckBubble(second_browser, ANCHOR_BROWSER_ACTION); 107 CheckBubble(second_browser, ANCHOR_BROWSER_ACTION, true);
80 CloseBubble(second_browser); 108 CloseBubble(second_browser);
81 } 109 }
82 110
83 void ExtensionMessageBubbleBrowserTest::TestBubbleAnchoredToAppMenu() { 111 void ExtensionMessageBubbleBrowserTest::TestBubbleAnchoredToAppMenu() {
84 scoped_refptr<const extensions::Extension> no_action_extension = 112 scoped_refptr<const extensions::Extension> no_action_extension =
85 extensions::extension_action_test_util::CreateActionExtension( 113 extensions::extension_action_test_util::CreateActionExtension(
86 "no_action_extension", 114 "no_action_extension",
87 extensions::extension_action_test_util::NO_ACTION, 115 extensions::extension_action_test_util::NO_ACTION,
88 extensions::Manifest::UNPACKED); 116 extensions::Manifest::UNPACKED);
89 extension_service()->AddExtension(no_action_extension.get()); 117 extension_service()->AddExtension(no_action_extension.get());
90 Browser* second_browser = new Browser(Browser::CreateParams(profile())); 118 Browser* second_browser = new Browser(Browser::CreateParams(profile()));
91 base::RunLoop().RunUntilIdle(); 119 base::RunLoop().RunUntilIdle();
92 CheckBubble(second_browser, ANCHOR_APP_MENU); 120 CheckBubble(second_browser, ANCHOR_APP_MENU, false);
93 CloseBubble(second_browser); 121 CloseBubble(second_browser);
94 } 122 }
95 123
96 void ExtensionMessageBubbleBrowserTest:: 124 void ExtensionMessageBubbleBrowserTest::
97 TestBubbleAnchoredToAppMenuWithOtherAction() { 125 TestBubbleAnchoredToAppMenuWithOtherAction() {
98 scoped_refptr<const extensions::Extension> no_action_extension = 126 scoped_refptr<const extensions::Extension> no_action_extension =
99 extensions::extension_action_test_util::CreateActionExtension( 127 extensions::extension_action_test_util::CreateActionExtension(
100 "no_action_extension", 128 "no_action_extension",
101 extensions::extension_action_test_util::NO_ACTION, 129 extensions::extension_action_test_util::NO_ACTION,
102 extensions::Manifest::UNPACKED); 130 extensions::Manifest::UNPACKED);
103 extension_service()->AddExtension(no_action_extension.get()); 131 extension_service()->AddExtension(no_action_extension.get());
104 132
105 scoped_refptr<const extensions::Extension> action_extension = 133 scoped_refptr<const extensions::Extension> action_extension =
106 extensions::extension_action_test_util::CreateActionExtension( 134 extensions::extension_action_test_util::CreateActionExtension(
107 "action_extension", 135 "action_extension",
108 extensions::extension_action_test_util::BROWSER_ACTION, 136 extensions::extension_action_test_util::BROWSER_ACTION,
109 extensions::Manifest::INTERNAL); 137 extensions::Manifest::INTERNAL);
110 extension_service()->AddExtension(action_extension.get()); 138 extension_service()->AddExtension(action_extension.get());
111 139
112 Browser* second_browser = new Browser(Browser::CreateParams(profile())); 140 Browser* second_browser = new Browser(Browser::CreateParams(profile()));
113 base::RunLoop().RunUntilIdle(); 141 base::RunLoop().RunUntilIdle();
114 142
115 CheckBubble(second_browser, ANCHOR_APP_MENU); 143 CheckBubble(second_browser, ANCHOR_APP_MENU, false);
116 CloseBubble(second_browser); 144 CloseBubble(second_browser);
117 } 145 }
118 146
119 void ExtensionMessageBubbleBrowserTest::TestUninstallDangerousExtension() { 147 void ExtensionMessageBubbleBrowserTest::TestUninstallDangerousExtension() {
120 // Load an extension that overrides the proxy setting. 148 // Load an extension that overrides the proxy setting.
121 ExtensionTestMessageListener listener("registered", false); 149 ExtensionTestMessageListener listener("registered", false);
122 const extensions::Extension* extension = 150 const extensions::Extension* extension =
123 LoadExtension(test_data_dir_.AppendASCII("api_test") 151 LoadExtension(test_data_dir_.AppendASCII("api_test")
124 .AppendASCII("proxy") 152 .AppendASCII("proxy")
125 .AppendASCII("register")); 153 .AppendASCII("register"));
126 // Wait for it to complete. 154 // Wait for it to complete.
127 listener.WaitUntilSatisfied(); 155 listener.WaitUntilSatisfied();
128 156
129 // Create a second browser with the extension installed - the bubble will be 157 // Create a second browser with the extension installed - the bubble will be
130 // set to show. 158 // set to show.
131 Browser* second_browser = new Browser(Browser::CreateParams(profile())); 159 Browser* second_browser = new Browser(Browser::CreateParams(profile()));
132 ASSERT_TRUE(second_browser); 160 ASSERT_TRUE(second_browser);
133 // Uninstall the extension before the bubble is shown. This should not crash, 161 // Uninstall the extension before the bubble is shown. This should not crash,
134 // and the bubble shouldn't be shown. 162 // and the bubble shouldn't be shown.
135 extension_service()->UninstallExtension( 163 extension_service()->UninstallExtension(
136 extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING, 164 extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING,
137 base::Bind(&base::DoNothing), nullptr); 165 base::Bind(&base::DoNothing), nullptr);
138 base::RunLoop().RunUntilIdle(); 166 base::RunLoop().RunUntilIdle();
139 CheckBubbleIsNotPresent(second_browser); 167 CheckBubbleIsNotPresent(second_browser, false, false);
140 } 168 }
141 169
142 void ExtensionMessageBubbleBrowserTest::PreBubbleShowsOnStartup() { 170 void ExtensionMessageBubbleBrowserTest::PreBubbleShowsOnStartup() {
143 LoadExtension(test_data_dir_.AppendASCII("good_unpacked")); 171 LoadExtension(test_data_dir_.AppendASCII("good_unpacked"));
144 } 172 }
145 173
146 void ExtensionMessageBubbleBrowserTest::TestBubbleShowsOnStartup() { 174 void ExtensionMessageBubbleBrowserTest::TestBubbleShowsOnStartup() {
147 base::RunLoop().RunUntilIdle(); 175 base::RunLoop().RunUntilIdle();
148 CheckBubble(browser(), ANCHOR_BROWSER_ACTION); 176 CheckBubble(browser(), ANCHOR_BROWSER_ACTION, true);
149 CloseBubble(browser()); 177 CloseBubble(browser());
150 } 178 }
151 179
152 void ExtensionMessageBubbleBrowserTest::TestDevModeBubbleIsntShownTwice() { 180 void ExtensionMessageBubbleBrowserTest::TestDevModeBubbleIsntShownTwice() {
153 scoped_refptr<const extensions::Extension> action_extension = 181 scoped_refptr<const extensions::Extension> action_extension =
154 extensions::extension_action_test_util::CreateActionExtension( 182 extensions::extension_action_test_util::CreateActionExtension(
155 "action_extension", 183 "action_extension",
156 extensions::extension_action_test_util::BROWSER_ACTION, 184 extensions::extension_action_test_util::BROWSER_ACTION,
157 extensions::Manifest::UNPACKED); 185 extensions::Manifest::UNPACKED);
158 extension_service()->AddExtension(action_extension.get()); 186 extension_service()->AddExtension(action_extension.get());
159 187
160 Browser* second_browser = new Browser(Browser::CreateParams(profile())); 188 Browser* second_browser = new Browser(Browser::CreateParams(profile()));
161 base::RunLoop().RunUntilIdle(); 189 base::RunLoop().RunUntilIdle();
162 190
163 CheckBubble(second_browser, ANCHOR_BROWSER_ACTION); 191 CheckBubble(second_browser, ANCHOR_BROWSER_ACTION, true);
164 CloseBubble(second_browser); 192 CloseBubble(second_browser);
165 base::RunLoop().RunUntilIdle(); 193 base::RunLoop().RunUntilIdle();
166 194
167 // The bubble was already shown, so it shouldn't be shown again. 195 // The bubble was already shown, so it shouldn't be shown again.
168 Browser* third_browser = new Browser(Browser::CreateParams(profile())); 196 Browser* third_browser = new Browser(Browser::CreateParams(profile()));
169 base::RunLoop().RunUntilIdle(); 197 base::RunLoop().RunUntilIdle();
170 CheckBubbleIsNotPresent(third_browser); 198 CheckBubbleIsNotPresent(third_browser, false, false);
171 } 199 }
172 200
173 void ExtensionMessageBubbleBrowserTest::TestControlledNewTabPageBubbleShown() { 201 void ExtensionMessageBubbleBrowserTest::TestControlledNewTabPageBubbleShown() {
174 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 202 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test")
175 .AppendASCII("override") 203 .AppendASCII("override")
176 .AppendASCII("newtab"))); 204 .AppendASCII("newtab")));
177 CheckBubbleIsNotPresent(browser()); 205 CheckBubbleIsNotPresent(browser(), false, false);
178 chrome::NewTab(browser()); 206 chrome::NewTab(browser());
179 base::RunLoop().RunUntilIdle(); 207 base::RunLoop().RunUntilIdle();
180 CheckBubble(browser(), ANCHOR_BROWSER_ACTION); 208 CheckBubble(browser(), ANCHOR_BROWSER_ACTION, false);
181 CloseBubble(browser()); 209 CloseBubble(browser());
182 } 210 }
183 211
184 void ExtensionMessageBubbleBrowserTest::TestControlledHomeBubbleShown() { 212 void ExtensionMessageBubbleBrowserTest::TestControlledHomeBubbleShown() {
185 browser()->profile()->GetPrefs()->SetBoolean(prefs::kShowHomeButton, true); 213 browser()->profile()->GetPrefs()->SetBoolean(prefs::kShowHomeButton, true);
186 214
187 const char kHomePage[] = "'homepage': 'https://www.google.com'\n"; 215 const char kHomePage[] = "'homepage': 'https://www.google.com'\n";
188 AddSettingsOverrideExtension(kHomePage); 216 AddSettingsOverrideExtension(kHomePage);
189 217
190 CheckBubbleIsNotPresent(browser()); 218 CheckBubbleIsNotPresent(browser(), false, false);
191 219
192 chrome::ExecuteCommandWithDisposition(browser(), 220 chrome::ExecuteCommandWithDisposition(browser(),
193 IDC_HOME, NEW_FOREGROUND_TAB); 221 IDC_HOME, NEW_FOREGROUND_TAB);
194 base::RunLoop().RunUntilIdle(); 222 base::RunLoop().RunUntilIdle();
195 223
196 CheckBubble(browser(), ANCHOR_BROWSER_ACTION); 224 CheckBubble(browser(), ANCHOR_BROWSER_ACTION, false);
197 CloseBubble(browser()); 225 CloseBubble(browser());
198 } 226 }
199 227
200 void ExtensionMessageBubbleBrowserTest::TestControlledSearchBubbleShown() { 228 void ExtensionMessageBubbleBrowserTest::TestControlledSearchBubbleShown() {
201 const char kSearchProvider[] = 229 const char kSearchProvider[] =
202 "'search_provider': {\n" 230 "'search_provider': {\n"
203 " 'search_url': 'https://www.google.com/search?q={searchTerms}',\n" 231 " 'search_url': 'https://www.google.com/search?q={searchTerms}',\n"
204 " 'is_default': true,\n" 232 " 'is_default': true,\n"
205 " 'favicon_url': 'https://www.google.com/favicon.icon',\n" 233 " 'favicon_url': 'https://www.google.com/favicon.icon',\n"
206 " 'keyword': 'TheGoogs',\n" 234 " 'keyword': 'TheGoogs',\n"
207 " 'name': 'Google',\n" 235 " 'name': 'Google',\n"
208 " 'encoding': 'UTF-8'\n" 236 " 'encoding': 'UTF-8'\n"
209 "}\n"; 237 "}\n";
210 AddSettingsOverrideExtension(kSearchProvider); 238 AddSettingsOverrideExtension(kSearchProvider);
211 239
212 CheckBubbleIsNotPresent(browser()); 240 CheckBubbleIsNotPresent(browser(), false, false);
213 241
214 OmniboxView* omnibox = 242 OmniboxView* omnibox =
215 browser()->window()->GetLocationBar()->GetOmniboxView(); 243 browser()->window()->GetLocationBar()->GetOmniboxView();
216 omnibox->OnBeforePossibleChange(); 244 omnibox->OnBeforePossibleChange();
217 omnibox->SetUserText(base::ASCIIToUTF16("search for this")); 245 omnibox->SetUserText(base::ASCIIToUTF16("search for this"));
218 omnibox->OnAfterPossibleChange(true); 246 omnibox->OnAfterPossibleChange(true);
219 omnibox->model()->AcceptInput(CURRENT_TAB, false); 247 omnibox->model()->AcceptInput(CURRENT_TAB, false);
220 base::RunLoop().RunUntilIdle(); 248 base::RunLoop().RunUntilIdle();
221 249
222 CheckBubble(browser(), ANCHOR_BROWSER_ACTION); 250 CheckBubble(browser(), ANCHOR_BROWSER_ACTION, false);
223 CloseBubble(browser()); 251 CloseBubble(browser());
224 } 252 }
253
254 void ExtensionMessageBubbleBrowserTest::TestBubbleWithMultipleWindows() {
255 CheckBubbleIsNotPresent(browser(), false, false);
256 LoadExtension(test_data_dir_.AppendASCII("good_unpacked"));
257 Browser* second_browser = new Browser(Browser::CreateParams(profile()));
258 Browser* third_browser = new Browser(Browser::CreateParams(profile()));
259 Browser* fourth_browser = new Browser(Browser::CreateParams(profile()));
260 base::RunLoop().RunUntilIdle();
261 CheckBubble(second_browser, ANCHOR_BROWSER_ACTION, true);
262 // Even though the bubble isn't present on these browser windows, highlighting
263 // is per-profile.
264 CheckBubbleIsNotPresent(browser(), true, true);
265 CheckBubbleIsNotPresent(third_browser, true, true);
266 CheckBubbleIsNotPresent(fourth_browser, true, true);
267 CloseBubble(second_browser);
268 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698