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

Unified Diff: chrome/browser/sync_file_system/drive_backend/sync_engine.cc

Issue 62883005: Implement SyncEngine::UpdateRegisteredApps() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed Created 7 years, 1 month 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: chrome/browser/sync_file_system/drive_backend/sync_engine.cc
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
index 7ba7f511509426453f7820837fe818d5ef6737ef..b8a2a9a8d34cc2e5017a77fb0d83575badd9d167 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
@@ -8,6 +8,7 @@
#include "base/values.h"
#include "chrome/browser/drive/drive_api_service.h"
#include "chrome/browser/drive/drive_notification_manager.h"
+#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
#include "chrome/browser/sync_file_system/drive_backend/list_changes_task.h"
#include "chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h"
@@ -18,16 +19,23 @@
#include "chrome/browser/sync_file_system/drive_backend/uninstall_app_task.h"
#include "chrome/browser/sync_file_system/logger.h"
#include "chrome/browser/sync_file_system/sync_task.h"
+#include "extensions/common/extension.h"
namespace sync_file_system {
namespace drive_backend {
+namespace {
+
+void EmptyStatusCallback(SyncStatusCode status) {}
+
+} // namespace
+
SyncEngine::SyncEngine(
const base::FilePath& base_dir,
base::SequencedTaskRunner* task_runner,
scoped_ptr<drive::DriveServiceInterface> drive_service,
drive::DriveNotificationManager* notification_manager,
- ExtensionService* extension_service)
+ ExtensionServiceInterface* extension_service)
: base_dir_(base_dir),
task_runner_(task_runner),
drive_service_(drive_service.Pass()),
@@ -288,6 +296,7 @@ void SyncEngine::DoEnableApp(const std::string& app_id,
void SyncEngine::DidInitialize(SyncEngineInitializer* initializer,
SyncStatusCode status) {
metadata_database_ = initializer->PassMetadataDatabase();
+ UpdateRegisteredApps();
}
void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
@@ -341,5 +350,42 @@ void SyncEngine::UpdateServiceState(RemoteServiceState state,
OnRemoteServiceStateUpdated(GetCurrentState(), description));
}
+void SyncEngine::UpdateRegisteredApps() {
+ if (!extension_service_)
+ return;
+
+ std::vector<std::string> app_ids;
+ metadata_database_->GetRegisteredAppIDs(&app_ids);
+
+ // Update the status of every origin using status from ExtensionService.
+ for (std::vector<std::string>::const_iterator itr = app_ids.begin();
+ itr != app_ids.end(); ++itr) {
+ const std::string& app_id = *itr;
+ GURL origin =
+ extensions::Extension::GetBaseURLFromExtensionId(app_id);
+ if (!extension_service_->GetInstalledExtension(app_id)) {
+ // Extension has been uninstalled.
+ // (At this stage we can't know if it was unpacked extension or not,
+ // so just purge the remote folder.)
+ UninstallOrigin(origin,
+ RemoteFileSyncService::UNINSTALL_AND_PURGE_REMOTE,
+ base::Bind(&EmptyStatusCallback));
+ continue;
+ }
+ FileTracker tracker;
+ if (!metadata_database_->FindAppRootTracker(app_id, &tracker)) {
+ // App will register itself on first run.
+ continue;
+ }
+ bool is_app_enabled = extension_service_->IsExtensionEnabled(app_id);
+ bool is_app_root_tracker_enabled =
+ tracker.tracker_kind() == TRACKER_KIND_APP_ROOT;
+ if (is_app_enabled && !is_app_root_tracker_enabled)
+ EnableOrigin(origin, base::Bind(&EmptyStatusCallback));
+ else if (!is_app_enabled && is_app_root_tracker_enabled)
+ DisableOrigin(origin, base::Bind(&EmptyStatusCallback));
+ }
+}
+
} // namespace drive_backend
} // namespace sync_file_system

Powered by Google App Engine
This is Rietveld 408576698