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 |