| Index: chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
|
| diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
|
| index fb3c89acd19b02bce990d03aef34c9d06733cc5a..414df0e3c7e686e774f90e82701c3cd0967ac500 100644
|
| --- a/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
|
| +++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
|
| @@ -6,12 +6,16 @@
|
|
|
| #include "base/files/scoped_temp_dir.h"
|
| #include "base/run_loop.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "chrome/browser/drive/fake_drive_service.h"
|
| +#include "chrome/browser/extensions/test_extension_service.h"
|
| #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
|
| #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
|
| #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| #include "extensions/common/extension.h"
|
| +#include "extensions/common/extension_builder.h"
|
| +#include "extensions/common/value_builder.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace sync_file_system {
|
| @@ -23,6 +27,53 @@ const char kAppID[] = "app_id";
|
|
|
| } // namespace
|
|
|
| +class MockExtensionService : public TestExtensionService {
|
| + public:
|
| + MockExtensionService() {}
|
| + virtual ~MockExtensionService() {}
|
| +
|
| + virtual const ExtensionSet* extensions() const OVERRIDE {
|
| + return &extensions_;
|
| + }
|
| +
|
| + virtual const ExtensionSet* disabled_extensions() const OVERRIDE {
|
| + return &disabled_extensions_;
|
| + }
|
| +
|
| + virtual void AddExtension(const extensions::Extension* extension) OVERRIDE {
|
| + extensions_.Insert(make_scoped_refptr(extension));
|
| + }
|
| +
|
| + virtual const extensions::Extension* GetInstalledExtension(
|
| + const std::string& extension_id) const OVERRIDE {
|
| + return extensions_.GetByID(extension_id);
|
| + }
|
| +
|
| + virtual bool IsExtensionEnabled(
|
| + const std::string& extension_id) const OVERRIDE {
|
| + return extensions_.Contains(extension_id) &&
|
| + !disabled_extensions_.Contains(extension_id);
|
| + }
|
| +
|
| + void UninstallExtension(const std::string& extension_id) {
|
| + extensions_.Remove(extension_id);
|
| + disabled_extensions_.Remove(extension_id);
|
| + }
|
| +
|
| + void DisableExtension(const std::string& extension_id) {
|
| + if (!IsExtensionEnabled(extension_id))
|
| + return;
|
| + const extensions::Extension* extension = extensions_.GetByID(extension_id);
|
| + disabled_extensions_.Insert(make_scoped_refptr(extension));
|
| + }
|
| +
|
| + private:
|
| + ExtensionSet extensions_;
|
| + ExtensionSet disabled_extensions_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MockExtensionService);
|
| +};
|
| +
|
| class SyncEngineTest : public testing::Test {
|
| public:
|
| SyncEngineTest() {}
|
| @@ -30,6 +81,7 @@ class SyncEngineTest : public testing::Test {
|
|
|
| virtual void SetUp() OVERRIDE {
|
| ASSERT_TRUE(profile_dir_.CreateUniqueTempDir());
|
| + extension_service_.reset(new MockExtensionService);
|
| scoped_ptr<drive::FakeDriveService> fake_drive_service(
|
| new drive::FakeDriveService);
|
|
|
| @@ -41,22 +93,30 @@ class SyncEngineTest : public testing::Test {
|
| profile_dir_.path(),
|
| base::MessageLoopProxy::current(),
|
| fake_drive_service.PassAs<drive::DriveServiceInterface>(),
|
| - NULL, NULL));
|
| + NULL,
|
| + extension_service_.get()));
|
| sync_engine_->Initialize();
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| virtual void TearDown() OVERRIDE {
|
| sync_engine_.reset();
|
| + extension_service_.reset();
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| + MockExtensionService* extension_service() { return extension_service_.get(); }
|
| SyncEngine* sync_engine() { return sync_engine_.get(); }
|
|
|
| + void UpdateRegisteredApps() {
|
| + sync_engine_->UpdateRegisteredApps();
|
| + }
|
| +
|
| private:
|
| content::TestBrowserThreadBundle browser_threads_;
|
| base::ScopedTempDir profile_dir_;
|
|
|
| + scoped_ptr<MockExtensionService> extension_service_;
|
| scoped_ptr<drive_backend::SyncEngine> sync_engine_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SyncEngineTest);
|
| @@ -95,5 +155,52 @@ TEST_F(SyncEngineTest, EnableOrigin) {
|
| ASSERT_FALSE(metadata_database->FindAppRootTracker(kAppID, &tracker));
|
| }
|
|
|
| +TEST_F(SyncEngineTest, UpdateRegisteredApps) {
|
| + SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN;
|
| + for (int i = 0; i < 3; i++) {
|
| + scoped_refptr<const extensions::Extension> extension =
|
| + extensions::ExtensionBuilder()
|
| + .SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", "foo")
|
| + .Set("version", "1.0")
|
| + .Set("manifest_version", 2))
|
| + .SetID(base::StringPrintf("app_%d", i))
|
| + .Build();
|
| + extension_service()->AddExtension(extension.get());
|
| + GURL origin = extensions::Extension::GetBaseURLFromExtensionId(
|
| + extension->id());
|
| + sync_status = SYNC_STATUS_UNKNOWN;
|
| + sync_engine()->RegisterOrigin(origin, CreateResultReceiver(&sync_status));
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(SYNC_STATUS_OK, sync_status);
|
| + }
|
| +
|
| + MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase();
|
| + FileTracker tracker;
|
| +
|
| + ASSERT_TRUE(metadata_database->FindAppRootTracker("app_0", &tracker));
|
| + EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind());
|
| +
|
| + ASSERT_TRUE(metadata_database->FindAppRootTracker("app_1", &tracker));
|
| + EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind());
|
| +
|
| + ASSERT_TRUE(metadata_database->FindAppRootTracker("app_2", &tracker));
|
| + EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind());
|
| +
|
| + extension_service()->DisableExtension("app_1");
|
| + extension_service()->UninstallExtension("app_2");
|
| + ASSERT_FALSE(extension_service()->GetInstalledExtension("app_2"));
|
| + UpdateRegisteredApps();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + ASSERT_TRUE(metadata_database->FindAppRootTracker("app_0", &tracker));
|
| + EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind());
|
| +
|
| + ASSERT_TRUE(metadata_database->FindAppRootTracker("app_1", &tracker));
|
| + EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind());
|
| +
|
| + ASSERT_FALSE(metadata_database->FindAppRootTracker("app_2", &tracker));
|
| +}
|
| +
|
| } // namespace drive_backend
|
| } // namespace sync_file_system
|
|
|