OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "chrome/browser/sync_file_system/drive_backend/sync_engine.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "base/strings/stringprintf.h" |
9 #include "chrome/browser/drive/fake_drive_service.h" | 10 #include "chrome/browser/drive/fake_drive_service.h" |
| 11 #include "chrome/browser/extensions/test_extension_service.h" |
10 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 12 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
11 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
12 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" | 14 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" |
13 #include "content/public/test/test_browser_thread_bundle.h" | 15 #include "content/public/test/test_browser_thread_bundle.h" |
14 #include "extensions/common/extension.h" | 16 #include "extensions/common/extension.h" |
| 17 #include "extensions/common/extension_builder.h" |
| 18 #include "extensions/common/value_builder.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
16 | 20 |
17 namespace sync_file_system { | 21 namespace sync_file_system { |
18 namespace drive_backend { | 22 namespace drive_backend { |
19 | 23 |
20 namespace { | 24 namespace { |
21 | 25 |
22 const char kAppID[] = "app_id"; | 26 const char kAppID[] = "app_id"; |
23 | 27 |
24 } // namespace | 28 } // namespace |
25 | 29 |
| 30 class MockExtensionService : public TestExtensionService { |
| 31 public: |
| 32 MockExtensionService() {} |
| 33 virtual ~MockExtensionService() {} |
| 34 |
| 35 virtual const ExtensionSet* extensions() const OVERRIDE { |
| 36 return &extensions_; |
| 37 } |
| 38 |
| 39 virtual const ExtensionSet* disabled_extensions() const OVERRIDE { |
| 40 return &disabled_extensions_; |
| 41 } |
| 42 |
| 43 virtual void AddExtension(const extensions::Extension* extension) OVERRIDE { |
| 44 extensions_.Insert(make_scoped_refptr(extension)); |
| 45 } |
| 46 |
| 47 virtual const extensions::Extension* GetInstalledExtension( |
| 48 const std::string& extension_id) const OVERRIDE { |
| 49 return extensions_.GetByID(extension_id); |
| 50 } |
| 51 |
| 52 virtual bool IsExtensionEnabled( |
| 53 const std::string& extension_id) const OVERRIDE { |
| 54 return extensions_.Contains(extension_id) && |
| 55 !disabled_extensions_.Contains(extension_id); |
| 56 } |
| 57 |
| 58 void UninstallExtension(const std::string& extension_id) { |
| 59 extensions_.Remove(extension_id); |
| 60 disabled_extensions_.Remove(extension_id); |
| 61 } |
| 62 |
| 63 void DisableExtension(const std::string& extension_id) { |
| 64 if (!IsExtensionEnabled(extension_id)) |
| 65 return; |
| 66 const extensions::Extension* extension = extensions_.GetByID(extension_id); |
| 67 disabled_extensions_.Insert(make_scoped_refptr(extension)); |
| 68 } |
| 69 |
| 70 private: |
| 71 ExtensionSet extensions_; |
| 72 ExtensionSet disabled_extensions_; |
| 73 |
| 74 DISALLOW_COPY_AND_ASSIGN(MockExtensionService); |
| 75 }; |
| 76 |
26 class SyncEngineTest : public testing::Test { | 77 class SyncEngineTest : public testing::Test { |
27 public: | 78 public: |
28 SyncEngineTest() {} | 79 SyncEngineTest() {} |
29 virtual ~SyncEngineTest() {} | 80 virtual ~SyncEngineTest() {} |
30 | 81 |
31 virtual void SetUp() OVERRIDE { | 82 virtual void SetUp() OVERRIDE { |
32 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); | 83 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); |
| 84 extension_service_.reset(new MockExtensionService); |
33 scoped_ptr<drive::FakeDriveService> fake_drive_service( | 85 scoped_ptr<drive::FakeDriveService> fake_drive_service( |
34 new drive::FakeDriveService); | 86 new drive::FakeDriveService); |
35 | 87 |
36 ASSERT_TRUE(fake_drive_service->LoadAccountMetadataForWapi( | 88 ASSERT_TRUE(fake_drive_service->LoadAccountMetadataForWapi( |
37 "sync_file_system/account_metadata.json")); | 89 "sync_file_system/account_metadata.json")); |
38 ASSERT_TRUE(fake_drive_service->LoadResourceListForWapi( | 90 ASSERT_TRUE(fake_drive_service->LoadResourceListForWapi( |
39 "gdata/empty_feed.json")); | 91 "gdata/empty_feed.json")); |
40 sync_engine_.reset(new drive_backend::SyncEngine( | 92 sync_engine_.reset(new drive_backend::SyncEngine( |
41 profile_dir_.path(), | 93 profile_dir_.path(), |
42 base::MessageLoopProxy::current(), | 94 base::MessageLoopProxy::current(), |
43 fake_drive_service.PassAs<drive::DriveServiceInterface>(), | 95 fake_drive_service.PassAs<drive::DriveServiceInterface>(), |
44 NULL, NULL)); | 96 NULL, |
| 97 extension_service_.get())); |
45 sync_engine_->Initialize(); | 98 sync_engine_->Initialize(); |
46 base::RunLoop().RunUntilIdle(); | 99 base::RunLoop().RunUntilIdle(); |
47 } | 100 } |
48 | 101 |
49 virtual void TearDown() OVERRIDE { | 102 virtual void TearDown() OVERRIDE { |
50 sync_engine_.reset(); | 103 sync_engine_.reset(); |
| 104 extension_service_.reset(); |
51 base::RunLoop().RunUntilIdle(); | 105 base::RunLoop().RunUntilIdle(); |
52 } | 106 } |
53 | 107 |
| 108 MockExtensionService* extension_service() { return extension_service_.get(); } |
54 SyncEngine* sync_engine() { return sync_engine_.get(); } | 109 SyncEngine* sync_engine() { return sync_engine_.get(); } |
55 | 110 |
| 111 void UpdateRegisteredApps() { |
| 112 sync_engine_->UpdateRegisteredApps(); |
| 113 } |
| 114 |
56 private: | 115 private: |
57 content::TestBrowserThreadBundle browser_threads_; | 116 content::TestBrowserThreadBundle browser_threads_; |
58 base::ScopedTempDir profile_dir_; | 117 base::ScopedTempDir profile_dir_; |
59 | 118 |
| 119 scoped_ptr<MockExtensionService> extension_service_; |
60 scoped_ptr<drive_backend::SyncEngine> sync_engine_; | 120 scoped_ptr<drive_backend::SyncEngine> sync_engine_; |
61 | 121 |
62 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); | 122 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); |
63 }; | 123 }; |
64 | 124 |
65 TEST_F(SyncEngineTest, EnableOrigin) { | 125 TEST_F(SyncEngineTest, EnableOrigin) { |
66 FileTracker tracker; | 126 FileTracker tracker; |
67 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; | 127 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; |
68 MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase(); | 128 MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase(); |
69 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); | 129 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); |
(...skipping 18 matching lines...) Expand all Loading... |
88 | 148 |
89 sync_engine()->UninstallOrigin( | 149 sync_engine()->UninstallOrigin( |
90 origin, | 150 origin, |
91 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, | 151 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, |
92 CreateResultReceiver(&sync_status)); | 152 CreateResultReceiver(&sync_status)); |
93 base::RunLoop().RunUntilIdle(); | 153 base::RunLoop().RunUntilIdle(); |
94 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | 154 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
95 ASSERT_FALSE(metadata_database->FindAppRootTracker(kAppID, &tracker)); | 155 ASSERT_FALSE(metadata_database->FindAppRootTracker(kAppID, &tracker)); |
96 } | 156 } |
97 | 157 |
| 158 TEST_F(SyncEngineTest, UpdateRegisteredApps) { |
| 159 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; |
| 160 for (int i = 0; i < 3; i++) { |
| 161 scoped_refptr<const extensions::Extension> extension = |
| 162 extensions::ExtensionBuilder() |
| 163 .SetManifest(extensions::DictionaryBuilder() |
| 164 .Set("name", "foo") |
| 165 .Set("version", "1.0") |
| 166 .Set("manifest_version", 2)) |
| 167 .SetID(base::StringPrintf("app_%d", i)) |
| 168 .Build(); |
| 169 extension_service()->AddExtension(extension.get()); |
| 170 GURL origin = extensions::Extension::GetBaseURLFromExtensionId( |
| 171 extension->id()); |
| 172 sync_status = SYNC_STATUS_UNKNOWN; |
| 173 sync_engine()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); |
| 174 base::RunLoop().RunUntilIdle(); |
| 175 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
| 176 } |
| 177 |
| 178 MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase(); |
| 179 FileTracker tracker; |
| 180 |
| 181 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_0", &tracker)); |
| 182 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); |
| 183 |
| 184 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_1", &tracker)); |
| 185 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); |
| 186 |
| 187 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_2", &tracker)); |
| 188 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); |
| 189 |
| 190 extension_service()->DisableExtension("app_1"); |
| 191 extension_service()->UninstallExtension("app_2"); |
| 192 ASSERT_FALSE(extension_service()->GetInstalledExtension("app_2")); |
| 193 UpdateRegisteredApps(); |
| 194 base::RunLoop().RunUntilIdle(); |
| 195 |
| 196 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_0", &tracker)); |
| 197 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); |
| 198 |
| 199 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_1", &tracker)); |
| 200 EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); |
| 201 |
| 202 ASSERT_FALSE(metadata_database->FindAppRootTracker("app_2", &tracker)); |
| 203 } |
| 204 |
98 } // namespace drive_backend | 205 } // namespace drive_backend |
99 } // namespace sync_file_system | 206 } // namespace sync_file_system |
OLD | NEW |