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

Side by Side Diff: chrome/browser/extensions/extension_message_bubble_controller_unittest.cc

Issue 219593002: Add unit test for the Settings API Bubble. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test Created 6 years, 8 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/command_line.h" 5 #include "base/command_line.h"
6 #include "base/strings/string_util.h" 6 #include "base/strings/string_util.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/extensions/dev_mode_bubble_controller.h" 8 #include "chrome/browser/extensions/dev_mode_bubble_controller.h"
9 #include "chrome/browser/extensions/extension_function_test_utils.h" 9 #include "chrome/browser/extensions/extension_function_test_utils.h"
10 #include "chrome/browser/extensions/extension_message_bubble.h" 10 #include "chrome/browser/extensions/extension_message_bubble.h"
11 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/extensions/settings_api_bubble_controller.h"
12 #include "chrome/browser/extensions/suspicious_extension_bubble_controller.h" 13 #include "chrome/browser/extensions/suspicious_extension_bubble_controller.h"
13 #include "chrome/browser/extensions/test_extension_system.h" 14 #include "chrome/browser/extensions/test_extension_system.h"
14 #include "chrome/test/base/testing_profile.h" 15 #include "chrome/test/base/testing_profile.h"
15 #include "content/public/test/test_browser_thread_bundle.h" 16 #include "content/public/test/test_browser_thread_bundle.h"
16 #include "extensions/common/extension.h" 17 #include "extensions/common/extension.h"
17 #include "extensions/common/feature_switch.h" 18 #include "extensions/common/feature_switch.h"
18 19
19 namespace extensions { 20 namespace extensions {
20 21
21 class TestDelegate { 22 class TestDelegate {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 ++dismiss_button_callback_count_; 91 ++dismiss_button_callback_count_;
91 DevModeBubbleController::OnBubbleDismiss(); 92 DevModeBubbleController::OnBubbleDismiss();
92 } 93 }
93 94
94 virtual void OnLinkClicked() OVERRIDE { 95 virtual void OnLinkClicked() OVERRIDE {
95 ++link_click_callback_count_; 96 ++link_click_callback_count_;
96 DevModeBubbleController::OnLinkClicked(); 97 DevModeBubbleController::OnLinkClicked();
97 } 98 }
98 }; 99 };
99 100
101 // A test class for the SettingsApiBubbleController.
102 class TestSettingsApiBubbleController
103 : public SettingsApiBubbleController,
104 public TestDelegate {
105 public:
106 TestSettingsApiBubbleController(Profile* profile,
107 SettingsApiOverrideType type)
108 : SettingsApiBubbleController(profile, type) {
109 }
110
111 virtual void OnBubbleAction() OVERRIDE {
112 ++action_button_callback_count_;
113 SettingsApiBubbleController::OnBubbleAction();
114 }
115
116 virtual void OnBubbleDismiss() OVERRIDE {
117 ++dismiss_button_callback_count_;
118 SettingsApiBubbleController::OnBubbleDismiss();
119 }
120
121 virtual void OnLinkClicked() OVERRIDE {
122 ++link_click_callback_count_;
123 SettingsApiBubbleController::OnLinkClicked();
124 }
125 };
126
100 // A fake bubble used for testing the controller. Takes an action that specifies 127 // A fake bubble used for testing the controller. Takes an action that specifies
101 // what should happen when the bubble is "shown" (the bubble is actually not 128 // what should happen when the bubble is "shown" (the bubble is actually not
102 // shown, the corresponding action is taken immediately). 129 // shown, the corresponding action is taken immediately).
103 class FakeExtensionMessageBubble : public ExtensionMessageBubble { 130 class FakeExtensionMessageBubble : public ExtensionMessageBubble {
104 public: 131 public:
105 enum ExtensionBubbleAction { 132 enum ExtensionBubbleAction {
106 BUBBLE_ACTION_CLICK_ACTION_BUTTON = 0, 133 BUBBLE_ACTION_CLICK_ACTION_BUTTON = 0,
107 BUBBLE_ACTION_CLICK_DISMISS_BUTTON, 134 BUBBLE_ACTION_CLICK_DISMISS_BUTTON,
108 BUBBLE_ACTION_CLICK_LINK, 135 BUBBLE_ACTION_CLICK_LINK,
109 }; 136 };
(...skipping 28 matching lines...) Expand all
138 private: 165 private:
139 ExtensionBubbleAction action_; 166 ExtensionBubbleAction action_;
140 167
141 base::Closure action_callback_; 168 base::Closure action_callback_;
142 base::Closure dismiss_callback_; 169 base::Closure dismiss_callback_;
143 base::Closure link_callback_; 170 base::Closure link_callback_;
144 }; 171 };
145 172
146 class ExtensionMessageBubbleTest : public testing::Test { 173 class ExtensionMessageBubbleTest : public testing::Test {
147 public: 174 public:
148 ExtensionMessageBubbleTest() { 175 ExtensionMessageBubbleTest() {}
176
177 std::string LoadExtensionWithManifest(const std::string& manifest_template,
178 const std::string& index,
179 Manifest::Location location) {
180 std::string extension_data;
181 base::ReplaceChars(manifest_template, "#", index, &extension_data);
182 scoped_refptr<Extension> my_test_extension(
183 CreateExtension(
Yoyo Zhou 2014/04/02 20:36:26 Can you use ExtensionBuilder and DictionaryBuilder
184 location,
185 extension_data,
186 std::string("Autogenerated ") + index));
187 service_->AddExtension(my_test_extension);
188 return my_test_extension->id();
189 }
190
191 std::string LoadGenericExtension(const std::string& index,
192 Manifest::Location location) {
193 std::string manifest_template =
194 "{\"name\": \"Extension #\","
195 "\"version\": \"1.0\","
196 "\"manifest_version\": 2}";
197 return LoadExtensionWithManifest(manifest_template, index, location);
198 }
199
200 std::string LoadExtensionWithAction(const std::string& index,
201 Manifest::Location location) {
202 std::string manifest_template =
203 "{\"name\": \"Extension #\","
204 "\"version\": \"1.0\","
205 "\"browser_action\": {"
206 " \"default_title\": \"Default title\""
207 "},"
208 "\"manifest_version\": 2}";
209 return LoadExtensionWithManifest(manifest_template, index, location);
210 }
211
212 std::string LoadExtensionOverridingHome(const std::string& index,
213 Manifest::Location location) {
214 std::string manifest_template =
215 "{\"name\": \"Extension #\","
216 "\"version\": \"1.0\","
217 "\"manifest_version\": 2,"
218 "\"chrome_settings_overrides\": {"
219 "\"homepage\": \"http://www.google.com\""
220 "}}";
221 return LoadExtensionWithManifest(manifest_template, index, location);
222 }
223
224 std::string LoadExtensionOverridingStart(const std::string& index,
225 Manifest::Location location) {
226 std::string manifest_template =
227 "{\"name\": \"Extension #\","
228 "\"version\": \"1.0\","
229 "\"manifest_version\": 2,"
230 "\"chrome_settings_overrides\": {"
231 "\"startup_pages\": [\"http://www.google.com/\"]"
232 "}}";
233 return LoadExtensionWithManifest(manifest_template, index, location);
234 }
235
236 void Init() {
149 // The two lines of magical incantation required to get the extension 237 // The two lines of magical incantation required to get the extension
150 // service to work inside a unit test and access the extension prefs. 238 // service to work inside a unit test and access the extension prefs.
151 thread_bundle_.reset(new content::TestBrowserThreadBundle); 239 thread_bundle_.reset(new content::TestBrowserThreadBundle);
152 profile_.reset(new TestingProfile); 240 profile_.reset(new TestingProfile);
153
154 static_cast<TestExtensionSystem*>( 241 static_cast<TestExtensionSystem*>(
155 ExtensionSystem::Get(profile()))->CreateExtensionService( 242 ExtensionSystem::Get(profile()))->CreateExtensionService(
156 CommandLine::ForCurrentProcess(), 243 CommandLine::ForCurrentProcess(),
157 base::FilePath(), 244 base::FilePath(),
158 false); 245 false);
159 service_ = profile_->GetExtensionService(); 246 service_ = profile_->GetExtensionService();
160 service_->Init(); 247 service_->Init();
248 }
161 249
162 std::string basic_extension =
163 "{\"name\": \"Extension #\","
164 "\"version\": \"1.0\","
165 "\"manifest_version\": 2}";
166 std::string basic_extension_with_action =
167 "{\"name\": \"Extension #\","
168 "\"version\": \"1.0\","
169 "\"browser_action\": {"
170 " \"default_title\": \"Default title\""
171 "},"
172 "\"manifest_version\": 2}";
173
174 std::string extension_data;
175 base::ReplaceChars(basic_extension_with_action, "#", "1", &extension_data);
176 scoped_refptr<Extension> my_test_extension1(
177 CreateExtension(
178 Manifest::COMMAND_LINE,
179 extension_data,
180 "Autogenerated 1"));
181
182 base::ReplaceChars(basic_extension, "#", "2", &extension_data);
183 scoped_refptr<Extension> my_test_extension2(
184 CreateExtension(
185 Manifest::UNPACKED,
186 extension_data,
187 "Autogenerated 2"));
188
189 base::ReplaceChars(basic_extension, "#", "3", &extension_data);
190 scoped_refptr<Extension> regular_extension(
191 CreateExtension(
192 Manifest::EXTERNAL_POLICY,
193 extension_data,
194 "Autogenerated 3"));
195
196 extension_id1_ = my_test_extension1->id();
197 extension_id2_ = my_test_extension2->id();
198 extension_id3_ = regular_extension->id();
199
200 service_->AddExtension(regular_extension);
201 service_->AddExtension(my_test_extension1);
202 service_->AddExtension(my_test_extension2);
203 }
204 virtual ~ExtensionMessageBubbleTest() { 250 virtual ~ExtensionMessageBubbleTest() {
205 // Make sure the profile is destroyed before the thread bundle. 251 // Make sure the profile is destroyed before the thread bundle.
206 profile_.reset(NULL); 252 profile_.reset(NULL);
207 } 253 }
208 254
209 virtual void SetUp() { 255 virtual void SetUp() {
210 command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM)); 256 command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM));
211 } 257 }
212 258
213 protected: 259 protected:
(...skipping 25 matching lines...) Expand all
239 }; 285 };
240 286
241 // The feature this is meant to test is only implemented on Windows. 287 // The feature this is meant to test is only implemented on Windows.
242 #if defined(OS_WIN) 288 #if defined(OS_WIN)
243 #define MAYBE_WipeoutControllerTest WipeoutControllerTest 289 #define MAYBE_WipeoutControllerTest WipeoutControllerTest
244 #else 290 #else
245 #define MAYBE_WipeoutControllerTest DISABLED_WipeoutControllerTest 291 #define MAYBE_WipeoutControllerTest DISABLED_WipeoutControllerTest
246 #endif 292 #endif
247 293
248 TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) { 294 TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
249 // The test base class adds three extensions, and we control two of them in 295 Init();
250 // this test (ids are: extension_id1_ and extension_id2_). 296 // Add three extensions, and control two of them in this test (extension 1
297 // and 2).
298 extension_id1_ = LoadExtensionWithAction("1", Manifest::COMMAND_LINE);
299 extension_id2_ = LoadGenericExtension("2", Manifest::UNPACKED);
300 extension_id3_ = LoadGenericExtension("3", Manifest::EXTERNAL_POLICY);
301
251 scoped_ptr<TestSuspiciousExtensionBubbleController> controller( 302 scoped_ptr<TestSuspiciousExtensionBubbleController> controller(
252 new TestSuspiciousExtensionBubbleController(profile())); 303 new TestSuspiciousExtensionBubbleController(profile()));
253 FakeExtensionMessageBubble bubble; 304 FakeExtensionMessageBubble bubble;
254 bubble.set_action_on_show( 305 bubble.set_action_on_show(
255 FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_DISMISS_BUTTON); 306 FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_DISMISS_BUTTON);
256 307
257 // Validate that we don't have a suppress value for the extensions. 308 // Validate that we don't have a suppress value for the extensions.
258 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); 309 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
259 EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id1_)); 310 EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
260 EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id2_)); 311 EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id2_));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 // The feature this is meant to test is only implemented on Windows. 363 // The feature this is meant to test is only implemented on Windows.
313 #if defined(OS_WIN) 364 #if defined(OS_WIN)
314 #define MAYBE_DevModeControllerTest DevModeControllerTest 365 #define MAYBE_DevModeControllerTest DevModeControllerTest
315 #else 366 #else
316 #define MAYBE_DevModeControllerTest DISABLED_DevModeControllerTest 367 #define MAYBE_DevModeControllerTest DISABLED_DevModeControllerTest
317 #endif 368 #endif
318 369
319 TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) { 370 TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) {
320 FeatureSwitch::ScopedOverride force_dev_mode_highlighting( 371 FeatureSwitch::ScopedOverride force_dev_mode_highlighting(
321 FeatureSwitch::force_dev_mode_highlighting(), true); 372 FeatureSwitch::force_dev_mode_highlighting(), true);
322 // The test base class adds three extensions, and we control two of them in 373 Init();
323 // this test (ids are: extension_id1_ and extension_id2_). Extension 1 is a 374 // Add three extensions, and control two of them in this test (extension 1
324 // regular extension, Extension 2 is UNPACKED so it counts as a DevMode 375 // and 2). Extension 1 is a regular extension, Extension 2 is UNPACKED so it
325 // extension. 376 // counts as a DevMode extension.
377 extension_id1_ = LoadExtensionWithAction("1", Manifest::COMMAND_LINE);
378 extension_id2_ = LoadGenericExtension("2", Manifest::UNPACKED);
379 extension_id3_ = LoadGenericExtension("3", Manifest::EXTERNAL_POLICY);
380
326 scoped_ptr<TestDevModeBubbleController> controller( 381 scoped_ptr<TestDevModeBubbleController> controller(
327 new TestDevModeBubbleController(profile())); 382 new TestDevModeBubbleController(profile()));
328 383
329 // The list will contain one enabled unpacked extension. 384 // The list will contain one enabled unpacked extension.
330 EXPECT_TRUE(controller->ShouldShow()); 385 EXPECT_TRUE(controller->ShouldShow());
331 std::vector<base::string16> dev_mode_extensions = 386 std::vector<base::string16> dev_mode_extensions =
332 controller->GetExtensionList(); 387 controller->GetExtensionList();
333 ASSERT_EQ(2U, dev_mode_extensions.size()); 388 ASSERT_EQ(2U, dev_mode_extensions.size());
334 EXPECT_TRUE(base::ASCIIToUTF16("Extension 2") == dev_mode_extensions[0]); 389 EXPECT_TRUE(base::ASCIIToUTF16("Extension 2") == dev_mode_extensions[0]);
335 EXPECT_TRUE(base::ASCIIToUTF16("Extension 1") == dev_mode_extensions[1]); 390 EXPECT_TRUE(base::ASCIIToUTF16("Extension 1") == dev_mode_extensions[1]);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 service_->DisableExtension(extension_id2_, Extension::DISABLE_USER_ACTION); 444 service_->DisableExtension(extension_id2_, Extension::DISABLE_USER_ACTION);
390 445
391 controller.reset(new TestDevModeBubbleController( 446 controller.reset(new TestDevModeBubbleController(
392 profile())); 447 profile()));
393 DevModeBubbleController::ClearProfileListForTesting(); 448 DevModeBubbleController::ClearProfileListForTesting();
394 EXPECT_FALSE(controller->ShouldShow()); 449 EXPECT_FALSE(controller->ShouldShow());
395 dev_mode_extensions = controller->GetExtensionList(); 450 dev_mode_extensions = controller->GetExtensionList();
396 EXPECT_EQ(0U, dev_mode_extensions.size()); 451 EXPECT_EQ(0U, dev_mode_extensions.size());
397 } 452 }
398 453
454 // The feature this is meant to test is only implemented on Windows.
455 #if defined(OS_WIN)
456 #define MAYBE_SettingsApiControllerTest SettingsApiControllerTest
457 #else
458 #define MAYBE_SettingsApiControllerTest DISABLED_SettingsApiControllerTest
459 #endif
460
461 TEST_F(ExtensionMessageBubbleTest, MAYBE_SettingsApiControllerTest) {
462 Init();
463 extensions::ExtensionPrefs* prefs =
464 extensions::ExtensionPrefs::Get(profile());
465
466 // We deliberately skip testing the search engine since it relies on
Yoyo Zhou 2014/04/02 20:36:26 IMHO this would be easier to read if - the for loo
467 // TemplateURLServiceFactory that isn't available while unit testing. This
468 // test is only simulating the bubble interaction with the user and that is
469 // more or less the same for the search engine as it is for the others.
470 for (int i = 0; i < 3; i += 2) {
471 switch (static_cast<SettingsApiOverrideType>(i)) {
472 case BUBBLE_TYPE_HOME_PAGE:
473 // Load two extensions overriding home page and one overriding something
474 // unrelated (to check for interference). Extension 2 should still win
475 // on the home page setting.
476 extension_id1_ = LoadExtensionOverridingHome("1", Manifest::UNPACKED);
477 extension_id2_ = LoadExtensionOverridingHome("2", Manifest::UNPACKED);
478 extension_id3_ = LoadExtensionOverridingStart("3", Manifest::UNPACKED);
479 break;
480 case BUBBLE_TYPE_STARTUP_PAGES:
481 // Load two extensions overriding start page and one overriding
482 // something unrelated (to check for interference). Extension 2 should
483 // still win on the startup page setting.
484 extension_id1_ = LoadExtensionOverridingStart("1", Manifest::UNPACKED);
485 extension_id2_ = LoadExtensionOverridingStart("2", Manifest::UNPACKED);
486 extension_id3_ = LoadExtensionOverridingHome("3", Manifest::UNPACKED);
487 break;
488 default:
489 NOTREACHED();
490 break;
491 }
492
493 scoped_ptr<TestSettingsApiBubbleController> controller(
494 new TestSettingsApiBubbleController(
495 profile(), static_cast<SettingsApiOverrideType>(i)));
496
497 // The list will contain one enabled unpacked extension (ext 2).
498 EXPECT_TRUE(controller->ShouldShow(extension_id2_));
499 std::vector<base::string16> override_extensions =
500 controller->GetExtensionList();
501 ASSERT_EQ(1U, override_extensions.size());
502 EXPECT_TRUE(base::ASCIIToUTF16("Extension 2") ==
503 override_extensions[0].c_str());
504 EXPECT_EQ(0U, controller->link_click_count());
505 EXPECT_EQ(0U, controller->dismiss_click_count());
506 EXPECT_EQ(0U, controller->action_click_count());
507
508 // Simulate showing the bubble and dismissing it.
509 FakeExtensionMessageBubble bubble;
510 bubble.set_action_on_show(
511 FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_DISMISS_BUTTON);
512 controller->Show(&bubble);
513 EXPECT_EQ(0U, controller->link_click_count());
514 EXPECT_EQ(0U, controller->action_click_count());
515 EXPECT_EQ(1U, controller->dismiss_click_count());
516 // No extension should have become disabled.
517 EXPECT_TRUE(service_->GetExtensionById(extension_id1_, false) != NULL);
518 EXPECT_TRUE(service_->GetExtensionById(extension_id2_, false) != NULL);
519 EXPECT_TRUE(service_->GetExtensionById(extension_id3_, false) != NULL);
520 // Only extension 2 should have been acknowledged.
521 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id1_));
522 EXPECT_TRUE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id2_));
523 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id3_));
524 // Clean up after ourselves.
525 prefs->SetSettingsApiBubbleBeenAcknowledged(extension_id2_, false);
526
527 // Simulate clicking the learn more link to dismiss it.
528 bubble.set_action_on_show(
529 FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_LINK);
530 controller.reset(new TestSettingsApiBubbleController(
531 profile(), static_cast<SettingsApiOverrideType>(i)));
532 controller->Show(&bubble);
533 EXPECT_EQ(1U, controller->link_click_count());
534 EXPECT_EQ(0U, controller->action_click_count());
535 EXPECT_EQ(0U, controller->dismiss_click_count());
536 // No extension should have become disabled.
537 EXPECT_TRUE(service_->GetExtensionById(extension_id1_, false) != NULL);
538 EXPECT_TRUE(service_->GetExtensionById(extension_id2_, false) != NULL);
539 EXPECT_TRUE(service_->GetExtensionById(extension_id3_, false) != NULL);
540 // Only extension 2 should have been acknowledged.
541 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id1_));
542 EXPECT_TRUE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id2_));
543 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id3_));
544 // Clean up after ourselves.
545 prefs->SetSettingsApiBubbleBeenAcknowledged(extension_id2_, false);
546
547 // Do it again, but now opt to disable the extension.
548 bubble.set_action_on_show(
549 FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_ACTION_BUTTON);
550 controller.reset(new TestSettingsApiBubbleController(
551 profile(), static_cast<SettingsApiOverrideType>(i)));
552 EXPECT_TRUE(controller->ShouldShow(extension_id2_));
553 override_extensions = controller->GetExtensionList();
554 EXPECT_EQ(1U, override_extensions.size());
555 controller->Show(&bubble); // Simulate showing the bubble.
556 EXPECT_EQ(0U, controller->link_click_count());
557 EXPECT_EQ(1U, controller->action_click_count());
558 EXPECT_EQ(0U, controller->dismiss_click_count());
559 // Only extension 2 should have become disabled.
560 EXPECT_TRUE(service_->GetExtensionById(extension_id1_, false) != NULL);
561 EXPECT_TRUE(service_->GetExtensionById(extension_id2_, false) == NULL);
562 EXPECT_TRUE(service_->GetExtensionById(extension_id3_, false) != NULL);
563 // No extension should have been acknowledged (it got disabled).
564 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id1_));
565 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id2_));
566 EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id3_));
567
568 // Clean up after ourselves.
569 service_->UninstallExtension(extension_id1_, false, NULL);
570 service_->UninstallExtension(extension_id2_, false, NULL);
571 service_->UninstallExtension(extension_id3_, false, NULL);
572 }
573 }
574
399 } // namespace extensions 575 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698