OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/extensions/api/sync_file_system/extension_sync_event_ob
server.h" |
| 6 |
| 7 #include "chrome/browser/extensions/event_names.h" |
| 8 #include "chrome/browser/extensions/event_router.h" |
| 9 #include "chrome/browser/extensions/extension_service.h" |
| 10 #include "chrome/browser/extensions/extension_system.h" |
| 11 #include "chrome/browser/sync_file_system/sync_event_observer.h" |
| 12 #include "chrome/common/extensions/api/sync_file_system.h" |
| 13 #include "webkit/fileapi/file_system_url.h" |
| 14 #include "webkit/fileapi/syncable/sync_operation_type.h" |
| 15 |
| 16 using sync_file_system::SyncEventObserver; |
| 17 |
| 18 namespace extensions { |
| 19 |
| 20 namespace { |
| 21 |
| 22 api::sync_file_system::SyncStateStatus SyncServiceStateEnumToExtensionEnum( |
| 23 SyncEventObserver::SyncServiceState state) { |
| 24 switch (state) { |
| 25 case SyncEventObserver::SYNC_SERVICE_RUNNING: |
| 26 return api::sync_file_system::SYNC_FILE_SYSTEM_SYNC_STATE_STATUS_RUNNING; |
| 27 case SyncEventObserver::SYNC_SERVICE_AUTHENTICATION_REQUIRED: |
| 28 return api::sync_file_system:: |
| 29 SYNC_FILE_SYSTEM_SYNC_STATE_STATUS_AUTHENTICATION_REQUIRED; |
| 30 case SyncEventObserver::SYNC_SERVICE_TEMPORARY_UNAVAILABLE: |
| 31 return api::sync_file_system:: |
| 32 SYNC_FILE_SYSTEM_SYNC_STATE_STATUS_TEMPORARY_UNAVAILABLE; |
| 33 case SyncEventObserver::SYNC_SERVICE_DISABLED: |
| 34 return api::sync_file_system::SYNC_FILE_SYSTEM_SYNC_STATE_STATUS_DISABLED; |
| 35 } |
| 36 NOTREACHED(); |
| 37 return api::sync_file_system::SYNC_FILE_SYSTEM_SYNC_STATE_STATUS_NONE; |
| 38 } |
| 39 |
| 40 api::sync_file_system::SyncOperationType SyncOperationTypeToExtensionEnum( |
| 41 fileapi::SyncOperationType operation_type) { |
| 42 switch (operation_type) { |
| 43 case fileapi::SYNC_OPERATION_NONE: |
| 44 return api::sync_file_system:: |
| 45 SYNC_FILE_SYSTEM_SYNC_OPERATION_TYPE_NONE; |
| 46 case fileapi::SYNC_OPERATION_ADD: |
| 47 return api::sync_file_system:: |
| 48 SYNC_FILE_SYSTEM_SYNC_OPERATION_TYPE_ADDED; |
| 49 case fileapi::SYNC_OPERATION_UPDATE: |
| 50 return api::sync_file_system:: |
| 51 SYNC_FILE_SYSTEM_SYNC_OPERATION_TYPE_UPDATED; |
| 52 case fileapi::SYNC_OPERATION_DELETE: |
| 53 return api::sync_file_system:: |
| 54 SYNC_FILE_SYSTEM_SYNC_OPERATION_TYPE_DELETED; |
| 55 } |
| 56 NOTREACHED(); |
| 57 return api::sync_file_system::SYNC_FILE_SYSTEM_SYNC_OPERATION_TYPE_NONE; |
| 58 } |
| 59 |
| 60 } // namespace |
| 61 |
| 62 ExtensionSyncEventObserver::ExtensionSyncEventObserver( |
| 63 Profile* profile, |
| 64 const std::string& service_name) |
| 65 : profile_(profile), |
| 66 service_name_(service_name) {} |
| 67 |
| 68 ExtensionSyncEventObserver::~ExtensionSyncEventObserver() {} |
| 69 |
| 70 const std::string& ExtensionSyncEventObserver::GetExtensionId( |
| 71 const GURL& app_origin) { |
| 72 const Extension* app = ExtensionSystem::Get(profile_)->extension_service()-> |
| 73 GetInstalledApp(app_origin); |
| 74 DCHECK(app); |
| 75 return app->id(); |
| 76 } |
| 77 |
| 78 void ExtensionSyncEventObserver::OnSyncStateUpdated( |
| 79 const GURL& app_origin, |
| 80 sync_file_system::SyncEventObserver::SyncServiceState state, |
| 81 const std::string& description) { |
| 82 // TODO(calvinlo): Check extension in set of extension_ids that are listening |
| 83 // for events. If extension_id is not in the set, then ignore the event. |
| 84 const std::string extension_id = GetExtensionId(app_origin); |
| 85 |
| 86 // Convert state and description into SyncState Object |
| 87 api::sync_file_system::SyncState sync_state; |
| 88 sync_state.service_name = service_name_; |
| 89 sync_state.state = SyncServiceStateEnumToExtensionEnum(state); |
| 90 sync_state.description = description; |
| 91 scoped_ptr<base::ListValue> params( |
| 92 api::sync_file_system::OnSyncStateChanged::Create(sync_state)); |
| 93 |
| 94 // Dispatch the event to the extension |
| 95 ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension( |
| 96 extension_id, event_names::kOnSyncStateChanged, params.Pass(), |
| 97 profile_, GURL()); |
| 98 } |
| 99 |
| 100 void ExtensionSyncEventObserver::OnFileSynced( |
| 101 const fileapi::FileSystemURL& url, |
| 102 fileapi::SyncOperationType operation) { |
| 103 const std::string extension_id = GetExtensionId(url.origin()); |
| 104 |
| 105 // TODO(calvinlo):Convert filePath from string to Webkit FileEntry. |
| 106 const api::sync_file_system::SyncOperationType sync_operation_type = |
| 107 SyncOperationTypeToExtensionEnum(operation); |
| 108 const std::string filePath = url.path().AsUTF8Unsafe(); |
| 109 scoped_ptr<base::ListValue> params( |
| 110 api::sync_file_system::OnFileSynced::Create(filePath, |
| 111 sync_operation_type)); |
| 112 |
| 113 // Dispatch the event to the extension |
| 114 ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension( |
| 115 extension_id, event_names::kOnFileSynced, params.Pass(), |
| 116 profile_, GURL()); |
| 117 } |
| 118 |
| 119 } // namespace extensions |
OLD | NEW |