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

Unified Diff: extensions/browser/lazy_background_task_queue_unittest.cc

Issue 428953003: Move LazyBackgroundTaskQueueTest into extensions_unittests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: (lazy-bg) NotificationService Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: extensions/browser/lazy_background_task_queue_unittest.cc
diff --git a/extensions/browser/lazy_background_task_queue_unittest.cc b/extensions/browser/lazy_background_task_queue_unittest.cc
index bda663c2c15f501b15af6b1b9c343e66f2c8d86b..a4168cd177da30ec6bec66fb82dd91e46756ca91 100644
--- a/extensions/browser/lazy_background_task_queue_unittest.cc
+++ b/extensions/browser/lazy_background_task_queue_unittest.cc
@@ -5,28 +5,35 @@
#include "extensions/browser/lazy_background_task_queue.h"
#include "base/bind.h"
-#include "base/command_line.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_service_test_base.h"
-#include "chrome/browser/extensions/test_extension_system.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_browser_thread_bundle.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/test/test_browser_context.h"
#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/extension_registry_factory.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/browser/extension_system_provider.h"
+#include "extensions/browser/extensions_test.h"
#include "extensions/browser/process_manager.h"
+#include "extensions/browser/test_extensions_browser_client.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
+#include "extensions/common/one_shot_event.h"
#include "testing/gtest/include/gtest/gtest.h"
+using content::BrowserContext;
+
namespace extensions {
+namespace {
// A ProcessManager that doesn't create background host pages.
class TestProcessManager : public ProcessManager {
public:
- explicit TestProcessManager(Profile* profile)
- : ProcessManager(profile,
- profile->GetOriginalProfile(),
- ExtensionRegistry::Get(profile)),
- create_count_(0) {}
+ explicit TestProcessManager(BrowserContext* context)
+ : ProcessManager(context, context, ExtensionRegistry::Get(context)),
+ create_count_(0) {
+ // ProcessManager constructor above assumes non-incognito.
+ DCHECK(!context->IsOffTheRecord());
+ }
virtual ~TestProcessManager() {}
int create_count() { return create_count_; }
@@ -45,12 +52,91 @@ class TestProcessManager : public ProcessManager {
DISALLOW_COPY_AND_ASSIGN(TestProcessManager);
};
-// Derives from ExtensionServiceTestBase because ExtensionService is difficult
-// to initialize alone.
-class LazyBackgroundTaskQueueTest
- : public extensions::ExtensionServiceTestBase {
+// A simple ExtensionSystem that returns a TestProcessManager.
+class MockExtensionSystem : public ExtensionSystem {
Yoyo Zhou 2014/08/01 22:13:09 Thanks for looking at this test - I had gotten a l
public:
- LazyBackgroundTaskQueueTest() : task_run_count_(0) {}
+ explicit MockExtensionSystem(BrowserContext* context)
+ : test_process_manager_(context) {}
+ virtual ~MockExtensionSystem() {}
+
+ virtual void InitForRegularProfile(bool extensions_enabled) OVERRIDE {}
+ virtual ExtensionService* extension_service() OVERRIDE { return NULL; }
+ virtual RuntimeData* runtime_data() OVERRIDE { return NULL; }
+ virtual ManagementPolicy* management_policy() OVERRIDE { return NULL; }
+ virtual UserScriptMaster* user_script_master() OVERRIDE { return NULL; }
+ virtual ProcessManager* process_manager() OVERRIDE {
+ return &test_process_manager_;
+ }
+ virtual StateStore* state_store() OVERRIDE { return NULL; }
+ virtual StateStore* rules_store() OVERRIDE { return NULL; }
+ virtual InfoMap* info_map() OVERRIDE { return NULL; }
+ virtual LazyBackgroundTaskQueue* lazy_background_task_queue() OVERRIDE {
+ return NULL;
+ }
+ virtual EventRouter* event_router() OVERRIDE { return NULL; }
+ virtual ExtensionWarningService* warning_service() OVERRIDE { return NULL; }
+ virtual Blacklist* blacklist() OVERRIDE { return NULL; }
+ virtual ErrorConsole* error_console() OVERRIDE { return NULL; }
+ virtual InstallVerifier* install_verifier() OVERRIDE { return NULL; }
+ virtual QuotaService* quota_service() OVERRIDE { return NULL; }
+ virtual const OneShotEvent& ready() const OVERRIDE { return ready_; }
+ virtual ContentVerifier* content_verifier() OVERRIDE { return NULL; }
+ virtual scoped_ptr<ExtensionSet> GetDependentExtensions(
+ const Extension* extension) OVERRIDE {
+ return scoped_ptr<ExtensionSet>();
+ }
+
+ private:
+ TestProcessManager test_process_manager_;
+ OneShotEvent ready_;
+};
+
+// A factory to create a MockExtensionSystem.
+class MockExtensionSystemFactory : public ExtensionSystemProvider {
+ public:
+ MockExtensionSystemFactory()
+ : ExtensionSystemProvider(
+ "MockExtensionSystem",
+ BrowserContextDependencyManager::GetInstance()) {
+ DependsOn(ExtensionRegistryFactory::GetInstance());
+ }
+ virtual ~MockExtensionSystemFactory() {}
+
+ static MockExtensionSystemFactory* GetInstance() {
+ return Singleton<MockExtensionSystemFactory>::get();
+ }
+
+ // BrowserContextKeyedServiceFactory overrides:
+ virtual KeyedService* BuildServiceInstanceFor(
+ BrowserContext* context) const OVERRIDE {
+ return new MockExtensionSystem(context);
+ }
+
+ // ExtensionSystemProvider overrides:
+ virtual ExtensionSystem* GetForBrowserContext(
+ BrowserContext* context) OVERRIDE {
+ return static_cast<MockExtensionSystem*>(
+ GetInstance()->GetServiceForBrowserContext(context, true));
+ }
+
+ private:
+ friend struct DefaultSingletonTraits<MockExtensionSystemFactory>;
Yoyo Zhou 2014/08/01 22:13:09 nit: it's more or less equivalent but I prefer Laz
James Cook 2014/08/01 22:48:03 On closer inspection it doesn't need to be a singl
+
+ DISALLOW_COPY_AND_ASSIGN(MockExtensionSystemFactory);
+};
+
+} // namespace
+
+// Derives from ExtensionsTest to provide content module and keyed service
+// initialization.
+class LazyBackgroundTaskQueueTest : public ExtensionsTest {
+ public:
+ LazyBackgroundTaskQueueTest()
+ : notification_service_(content::NotificationService::Create()),
+ task_run_count_(0) {
+ extensions_browser_client()->set_extension_system_factory(
+ &extension_system_factory_);
+ }
virtual ~LazyBackgroundTaskQueueTest() {}
int task_run_count() { return task_run_count_; }
@@ -69,7 +155,7 @@ class LazyBackgroundTaskQueueTest
.Set("manifest_version", 2))
.SetID("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
.Build();
- service_->AddExtension(extension);
+ ExtensionRegistry::Get(browser_context())->AddEnabled(extension);
return extension;
}
@@ -86,11 +172,14 @@ class LazyBackgroundTaskQueueTest
.SetBoolean("persistent", false)))
.SetID("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")
.Build();
- service_->AddExtension(extension);
+ ExtensionRegistry::Get(browser_context())->AddEnabled(extension);
return extension;
}
private:
+ scoped_ptr<content::NotificationService> notification_service_;
+ MockExtensionSystemFactory extension_system_factory_;
+
// The total number of pending tasks that have been executed.
int task_run_count_;
@@ -99,41 +188,35 @@ class LazyBackgroundTaskQueueTest
// Tests that only extensions with background pages should have tasks queued.
TEST_F(LazyBackgroundTaskQueueTest, ShouldEnqueueTask) {
- InitializeEmptyExtensionService();
- InitializeProcessManager();
-
- LazyBackgroundTaskQueue queue(profile_.get());
+ LazyBackgroundTaskQueue queue(browser_context());
// Build a simple extension with no background page.
scoped_refptr<Extension> no_background = CreateSimpleExtension();
- EXPECT_FALSE(queue.ShouldEnqueueTask(profile_.get(), no_background.get()));
+ EXPECT_FALSE(queue.ShouldEnqueueTask(browser_context(), no_background.get()));
// Build another extension with a background page.
scoped_refptr<Extension> with_background = CreateLazyBackgroundExtension();
- EXPECT_TRUE(queue.ShouldEnqueueTask(profile_.get(), with_background.get()));
+ EXPECT_TRUE(
+ queue.ShouldEnqueueTask(browser_context(), with_background.get()));
}
// Tests that adding tasks actually increases the pending task count, and that
// multiple extensions can have pending tasks.
TEST_F(LazyBackgroundTaskQueueTest, AddPendingTask) {
- InitializeEmptyExtensionService();
-
- // Swap in our stub TestProcessManager.
- TestExtensionSystem* extension_system =
- static_cast<extensions::TestExtensionSystem*>(
- ExtensionSystem::Get(profile_.get()));
- // Owned by |extension_system|.
- TestProcessManager* process_manager = new TestProcessManager(profile_.get());
- extension_system->SetProcessManager(process_manager);
+ // Get our TestProcessManager.
+ MockExtensionSystem* extension_system = static_cast<MockExtensionSystem*>(
+ ExtensionSystem::Get(browser_context()));
+ TestProcessManager* process_manager =
+ static_cast<TestProcessManager*>(extension_system->process_manager());
- LazyBackgroundTaskQueue queue(profile_.get());
+ LazyBackgroundTaskQueue queue(browser_context());
// Build a simple extension with no background page.
scoped_refptr<Extension> no_background = CreateSimpleExtension();
// Adding a pending task increases the number of extensions with tasks, but
// doesn't run the task.
- queue.AddPendingTask(profile_.get(),
+ queue.AddPendingTask(browser_context(),
no_background->id(),
base::Bind(&LazyBackgroundTaskQueueTest::RunPendingTask,
base::Unretained(this)));
@@ -142,7 +225,7 @@ TEST_F(LazyBackgroundTaskQueueTest, AddPendingTask) {
// Another task on the same extension doesn't increase the number of
// extensions that have tasks and doesn't run any tasks.
- queue.AddPendingTask(profile_.get(),
+ queue.AddPendingTask(browser_context(),
no_background->id(),
base::Bind(&LazyBackgroundTaskQueueTest::RunPendingTask,
base::Unretained(this)));
@@ -152,7 +235,7 @@ TEST_F(LazyBackgroundTaskQueueTest, AddPendingTask) {
// Adding a task on an extension with a lazy background page tries to create
// a background host, and if that fails, runs the task immediately.
scoped_refptr<Extension> lazy_background = CreateLazyBackgroundExtension();
- queue.AddPendingTask(profile_.get(),
+ queue.AddPendingTask(browser_context(),
lazy_background->id(),
base::Bind(&LazyBackgroundTaskQueueTest::RunPendingTask,
base::Unretained(this)));
@@ -165,32 +248,30 @@ TEST_F(LazyBackgroundTaskQueueTest, AddPendingTask) {
// Tests that pending tasks are actually run.
TEST_F(LazyBackgroundTaskQueueTest, ProcessPendingTasks) {
- InitializeEmptyExtensionService();
-
- LazyBackgroundTaskQueue queue(profile_.get());
+ LazyBackgroundTaskQueue queue(browser_context());
// ProcessPendingTasks is a no-op if there are no tasks.
scoped_refptr<Extension> extension = CreateSimpleExtension();
- queue.ProcessPendingTasks(NULL, profile_.get(), extension);
+ queue.ProcessPendingTasks(NULL, browser_context(), extension);
EXPECT_EQ(0, task_run_count());
// Schedule a task to run.
- queue.AddPendingTask(profile_.get(),
+ queue.AddPendingTask(browser_context(),
extension->id(),
base::Bind(&LazyBackgroundTaskQueueTest::RunPendingTask,
base::Unretained(this)));
EXPECT_EQ(0, task_run_count());
EXPECT_EQ(1u, queue.extensions_with_pending_tasks());
- // Trying to run tasks for an unrelated profile should do nothing.
- TestingProfile profile2;
- queue.ProcessPendingTasks(NULL, &profile2, extension);
+ // Trying to run tasks for an unrelated BrowserContext should do nothing.
+ content::TestBrowserContext unrelated_context;
+ queue.ProcessPendingTasks(NULL, &unrelated_context, extension);
EXPECT_EQ(0, task_run_count());
EXPECT_EQ(1u, queue.extensions_with_pending_tasks());
// Processing tasks when there is one pending runs the task and removes the
// extension from the list of extensions with pending tasks.
- queue.ProcessPendingTasks(NULL, profile_.get(), extension);
+ queue.ProcessPendingTasks(NULL, browser_context(), extension);
EXPECT_EQ(1, task_run_count());
EXPECT_EQ(0u, queue.extensions_with_pending_tasks());
}

Powered by Google App Engine
This is Rietveld 408576698