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

Side by Side Diff: chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer.cc

Issue 11316133: Added implementation of SyncEventObserver to route events to Javascript Extension. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix destructor for compile Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698