| Index: chrome/browser/extensions/extension_toolbar_model_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_toolbar_model_unittest.cc b/chrome/browser/extensions/extension_toolbar_model_unittest.cc
|
| index 8c9f3138fb98bc94bb1c2fa82b9499c94ae36150..d7765a438388de38e29e955d1e3f54ef63fb6c23 100644
|
| --- a/chrome/browser/extensions/extension_toolbar_model_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_toolbar_model_unittest.cc
|
| @@ -112,7 +112,10 @@ KeyedService* BuildToolbarModel(content::BrowserContext* context) {
|
| // Given a |profile|, assigns the testing keyed service function to
|
| // BuildToolbarModel() and uses it to create and initialize a new
|
| // ExtensionToolbarModel.
|
| -ExtensionToolbarModel* CreateToolbarModelForProfile(Profile* profile) {
|
| +// |wait_for_ready| indicates whether or not to post the ExtensionSystem's
|
| +// ready task.
|
| +ExtensionToolbarModel* CreateToolbarModelForProfile(Profile* profile,
|
| + bool wait_for_ready) {
|
| ExtensionToolbarModel* model = ExtensionToolbarModel::Get(profile);
|
| if (model)
|
| return model;
|
| @@ -122,15 +125,18 @@ ExtensionToolbarModel* CreateToolbarModelForProfile(Profile* profile) {
|
| ExtensionToolbarModelFactory::GetInstance()->SetTestingFactory(
|
| profile, &BuildToolbarModel);
|
| model = ExtensionToolbarModel::Get(profile);
|
| - // Fake the extension system ready signal.
|
| - // HACK ALERT! In production, the ready task on ExtensionSystem (and most
|
| - // everything else on it, too) is shared between incognito and normal
|
| - // profiles, but a TestExtensionSystem doesn't have the concept of "shared".
|
| - // Because of this, we have to set any new profile's TestExtensionSystem's
|
| - // ready task, too.
|
| - static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile))->SetReady();
|
| - // Run tasks posted to TestExtensionSystem.
|
| - base::RunLoop().RunUntilIdle();
|
| + if (wait_for_ready) {
|
| + // Fake the extension system ready signal.
|
| + // HACK ALERT! In production, the ready task on ExtensionSystem (and most
|
| + // everything else on it, too) is shared between incognito and normal
|
| + // profiles, but a TestExtensionSystem doesn't have the concept of "shared".
|
| + // Because of this, we have to set any new profile's TestExtensionSystem's
|
| + // ready task, too.
|
| + static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile))->
|
| + SetReady();
|
| + // Run tasks posted to TestExtensionSystem.
|
| + base::RunLoop().RunUntilIdle();
|
| + }
|
|
|
| return model;
|
| }
|
| @@ -164,6 +170,7 @@ class ExtensionToolbarModelTestObserver
|
| size_t removed_count() const { return removed_count_; }
|
| size_t moved_count() const { return moved_count_; }
|
| int highlight_mode_count() const { return highlight_mode_count_; }
|
| + size_t initialized_count() const { return initialized_count_; }
|
| size_t reorder_count() const { return reorder_count_; }
|
|
|
| private:
|
| @@ -194,7 +201,7 @@ class ExtensionToolbarModelTestObserver
|
| highlight_mode_count_ += is_highlighting ? 1 : -1;
|
| }
|
|
|
| - void OnToolbarModelInitialized() override {}
|
| + void OnToolbarModelInitialized() override { ++initialized_count_; }
|
|
|
| void OnToolbarReorderNecessary(content::WebContents* web_contents) override {
|
| ++reorder_count_;
|
| @@ -209,6 +216,7 @@ class ExtensionToolbarModelTestObserver
|
| size_t moved_count_;
|
| // Int because it could become negative (if something goes wrong).
|
| int highlight_mode_count_;
|
| + size_t initialized_count_;
|
| size_t reorder_count_;
|
| };
|
|
|
| @@ -218,6 +226,7 @@ ExtensionToolbarModelTestObserver::ExtensionToolbarModelTestObserver(
|
| removed_count_(0),
|
| moved_count_(0),
|
| highlight_mode_count_(0),
|
| + initialized_count_(0),
|
| reorder_count_(0) {
|
| model_->AddObserver(this);
|
| }
|
| @@ -299,7 +308,7 @@ class ExtensionToolbarModelUnitTest : public ExtensionServiceTestBase {
|
|
|
| void ExtensionToolbarModelUnitTest::Init() {
|
| InitializeEmptyExtensionService();
|
| - toolbar_model_ = CreateToolbarModelForProfile(profile());
|
| + toolbar_model_ = CreateToolbarModelForProfile(profile(), true);
|
| model_observer_.reset(new ExtensionToolbarModelTestObserver(toolbar_model_));
|
| }
|
|
|
| @@ -887,7 +896,7 @@ TEST_F(ExtensionToolbarModelUnitTest, ExtensionToolbarIncognitoModeTest) {
|
|
|
| // Get an incognito profile and toolbar.
|
| ExtensionToolbarModel* incognito_model =
|
| - CreateToolbarModelForProfile(profile()->GetOffTheRecordProfile());
|
| + CreateToolbarModelForProfile(profile()->GetOffTheRecordProfile(), true);
|
|
|
| ExtensionToolbarModelTestObserver incognito_observer(incognito_model);
|
| EXPECT_EQ(0u, incognito_observer.moved_count());
|
| @@ -992,7 +1001,7 @@ TEST_F(ExtensionToolbarModelUnitTest,
|
|
|
| // Get an incognito profile and toolbar.
|
| ExtensionToolbarModel* incognito_model =
|
| - CreateToolbarModelForProfile(profile()->GetOffTheRecordProfile());
|
| + CreateToolbarModelForProfile(profile()->GetOffTheRecordProfile(), true);
|
| ExtensionToolbarModelTestObserver incognito_observer(incognito_model);
|
|
|
| // Right now, no extensions are enabled in incognito mode.
|
| @@ -1275,4 +1284,31 @@ TEST_F(ExtensionToolbarModelUnitTest, ToolbarActionsPopOutToAct) {
|
| EXPECT_EQ(3u, observer()->reorder_count());
|
| }
|
|
|
| +// Test that observers receive no Added notifications until after the
|
| +// ExtensionSystem has initialized.
|
| +TEST_F(ExtensionToolbarModelUnitTest, ModelWaitsForExtensionSystemReady) {
|
| + InitializeEmptyExtensionService();
|
| + ExtensionToolbarModel* toolbar_model =
|
| + CreateToolbarModelForProfile(profile(), false);
|
| + ExtensionToolbarModelTestObserver model_observer(toolbar_model);
|
| + EXPECT_TRUE(AddBrowserActionExtensions());
|
| +
|
| + // Since the model hasn't been initialized (the ExtensionSystem::ready task
|
| + // hasn't been run), there should be no insertion notifications.
|
| + EXPECT_EQ(0u, model_observer.inserted_count());
|
| + EXPECT_EQ(0u, model_observer.initialized_count());
|
| + EXPECT_FALSE(toolbar_model->extensions_initialized());
|
| +
|
| + // Run the ready task.
|
| + static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile()))->
|
| + SetReady();
|
| + // Run tasks posted to TestExtensionSystem.
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // We should still have no insertions, but should have an initialized count.
|
| + EXPECT_TRUE(toolbar_model->extensions_initialized());
|
| + EXPECT_EQ(0u, model_observer.inserted_count());
|
| + EXPECT_EQ(1u, model_observer.initialized_count());
|
| +}
|
| +
|
| } // namespace extensions
|
|
|