Index: chrome/browser/chromeos/extensions/file_manager/event_router.cc |
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc |
index 336698f23d57e726fddbd82bddc7c1bb569e9915..3239b8cf13f241691fa0a0e01d075d128da53eb2 100644 |
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc |
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc |
@@ -50,9 +50,6 @@ namespace file_browser_private = extensions::api::file_browser_private; |
namespace file_manager { |
namespace { |
-const char kPathChanged[] = "changed"; |
-const char kPathWatchError[] = "error"; |
- |
void DirectoryExistsOnBlockingPool(const base::FilePath& directory_path, |
const base::Closure& success_callback, |
const base::Closure& failure_callback) { |
@@ -92,27 +89,30 @@ bool IsUploadJob(drive::JobType type) { |
type == drive::TYPE_UPLOAD_EXISTING_FILE); |
} |
-// Converts the job info to its JSON (Value) form. |
-scoped_ptr<base::DictionaryValue> JobInfoToDictionaryValue( |
+// Converts the job info to a IDL generated type. |
+void JobInfoToTransferStatus( |
const std::string& extension_id, |
const std::string& job_status, |
- const drive::JobInfo& job_info) { |
+ const drive::JobInfo& job_info, |
+ file_browser_private::FileTransferStatus* status) { |
DCHECK(IsActiveFileTransferJobInfo(job_info)); |
scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue); |
GURL url = util::ConvertRelativeFilePathToFileSystemUrl( |
job_info.file_path, extension_id); |
- result->SetString("fileUrl", url.spec()); |
- result->SetString("transferState", job_status); |
- result->SetString("transferType", |
- IsUploadJob(job_info.job_type) ? "upload" : "download"); |
+ status->file_url = url.spec(); |
+ status->transfer_state = file_browser_private::ParseTransferState(job_status); |
+ status->transfer_type = |
+ IsUploadJob(job_info.job_type) ? |
+ file_browser_private::TRANSFER_TYPE_UPLOAD : |
+ file_browser_private::TRANSFER_TYPE_DOWNLOAD; |
// JavaScript does not have 64-bit integers. Instead we use double, which |
// is in IEEE 754 formant and accurate up to 52-bits in JS, and in practice |
// in C++. Larger values are rounded. |
- result->SetDouble("processed", |
- static_cast<double>(job_info.num_completed_bytes)); |
- result->SetDouble("total", static_cast<double>(job_info.num_total_bytes)); |
- return result.Pass(); |
+ status->processed.reset( |
+ new double(static_cast<double>(job_info.num_completed_bytes))); |
+ status->total.reset( |
+ new double(static_cast<double>(job_info.num_total_bytes))); |
} |
// Checks for availability of the Google+ Photos app. |
@@ -225,7 +225,7 @@ void BroadcastMountCompletedEvent( |
BroadcastEvent( |
profile, |
- extensions::event_names::kOnFileBrowserMountCompleted, |
+ file_browser_private::OnMountCompleted::kEventName, |
file_browser_private::OnMountCompleted::Create(event)); |
} |
@@ -428,7 +428,7 @@ void EventRouter::OnCopyCompleted(int copy_id, |
BroadcastEvent( |
profile_, |
- extensions::event_names::kOnFileBrowserCopyProgress, |
+ file_browser_private::OnCopyProgress::kEventName, |
file_browser_private::OnCopyProgress::Create(copy_id, status)); |
} |
@@ -450,7 +450,7 @@ void EventRouter::OnCopyProgress( |
BroadcastEvent( |
profile_, |
- extensions::event_names::kOnFileBrowserCopyProgress, |
+ file_browser_private::OnCopyProgress::kEventName, |
file_browser_private::OnCopyProgress::Create(copy_id, status)); |
} |
@@ -463,8 +463,8 @@ void EventRouter::DefaultNetworkChanged(const chromeos::NetworkState* network) { |
BroadcastEvent( |
profile_, |
- extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, |
- make_scoped_ptr(new base::ListValue)); |
+ file_browser_private::OnDriveConnectionStatusChanged::kEventName, |
+ file_browser_private::OnDriveConnectionStatusChanged::Create()); |
} |
void EventRouter::OnFileManagerPrefsChanged() { |
@@ -476,8 +476,8 @@ void EventRouter::OnFileManagerPrefsChanged() { |
BroadcastEvent( |
profile_, |
- extensions::event_names::kOnFileBrowserPreferencesChanged, |
- make_scoped_ptr(new base::ListValue)); |
+ file_browser_private::OnPreferencesChanged::kEventName, |
+ file_browser_private::OnPreferencesChanged::Create()); |
} |
void EventRouter::OnJobAdded(const drive::JobInfo& job_info) { |
@@ -538,25 +538,23 @@ void EventRouter::SendDriveFileTransferEvent(bool always) { |
return; |
} |
- // Convert the current |drive_jobs_| to a JSON value. |
- scoped_ptr<base::ListValue> event_list(new base::ListValue); |
+ // Convert the current |drive_jobs_| to IDL type. |
+ std::vector<linked_ptr<file_browser_private::FileTransferStatus> > |
+ status_list; |
for (std::map<drive::JobID, DriveJobInfoWithStatus>::iterator |
iter = drive_jobs_.begin(); iter != drive_jobs_.end(); ++iter) { |
- |
- scoped_ptr<base::DictionaryValue> job_info_dict( |
- JobInfoToDictionaryValue(kFileManagerAppId, |
- iter->second.status, |
- iter->second.job_info)); |
- event_list->Append(job_info_dict.release()); |
+ linked_ptr<file_browser_private::FileTransferStatus> status( |
+ new file_browser_private::FileTransferStatus()); |
+ JobInfoToTransferStatus(kFileManagerAppId, |
+ iter->second.status, |
+ iter->second.job_info, |
+ status.get()); |
+ status_list.push_back(status); |
} |
- |
- scoped_ptr<base::ListValue> args(new base::ListValue()); |
- args->Append(event_list.release()); |
- scoped_ptr<extensions::Event> event(new extensions::Event( |
- extensions::event_names::kOnFileTransfersUpdated, args.Pass())); |
- extensions::ExtensionSystem::Get(profile_)->event_router()-> |
- DispatchEventToExtension(kFileManagerAppId, event.Pass()); |
- |
+ BroadcastEvent( |
+ profile_, |
+ file_browser_private::OnFileTransfersUpdated::kEventName, |
+ file_browser_private::OnFileTransfersUpdated::Create(status_list)); |
last_file_transfer_event_ = now; |
} |
@@ -570,8 +568,8 @@ void EventRouter::OnRefreshTokenInvalid() { |
// Raise a DriveConnectionStatusChanged event to notify the status offline. |
BroadcastEvent( |
profile_, |
- extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, |
- make_scoped_ptr(new base::ListValue)); |
+ file_browser_private::OnDriveConnectionStatusChanged::kEventName, |
+ file_browser_private::OnDriveConnectionStatusChanged::Create()); |
} |
void EventRouter::HandleFileWatchNotification(const base::FilePath& local_path, |
@@ -597,28 +595,27 @@ void EventRouter::DispatchDirectoryChangeEvent( |
for (size_t i = 0; i < extension_ids.size(); ++i) { |
const std::string& extension_id = extension_ids[i]; |
- |
- GURL target_origin_url(extensions::Extension::GetBaseURLFromExtensionId( |
- extension_id)); |
- scoped_ptr<base::ListValue> args(new base::ListValue()); |
- base::DictionaryValue* watch_info = new base::DictionaryValue(); |
- args->Append(watch_info); |
- |
+ const GURL target_origin_url( |
+ extensions::Extension::GetBaseURLFromExtensionId(extension_id)); |
// This will be replaced with a real Entry in custom bindings. |
- fileapi::FileSystemInfo info = |
+ const fileapi::FileSystemInfo info = |
fileapi::GetFileSystemInfoForChromeOS(target_origin_url.GetOrigin()); |
- base::DictionaryValue* entry = new base::DictionaryValue(); |
- entry->SetString("fileSystemName", info.name); |
- entry->SetString("fileSystemRoot", info.root_url.spec()); |
- entry->SetString("fileFullPath", "/" + virtual_path.value()); |
- entry->SetBoolean("fileIsDirectory", true); |
- watch_info->Set("entry", entry); |
- watch_info->SetString("eventType", |
- got_error ? kPathWatchError : kPathChanged); |
- scoped_ptr<extensions::Event> event(new extensions::Event( |
- extensions::event_names::kOnDirectoryChanged, args.Pass())); |
- extensions::ExtensionSystem::Get(profile_)->event_router()-> |
- DispatchEventToExtension(extension_id, event.Pass()); |
+ |
+ file_browser_private::FileWatchEvent event; |
+ event.event_type = got_error ? |
+ file_browser_private::FILE_WATCH_EVENT_TYPE_ERROR : |
+ file_browser_private::FILE_WATCH_EVENT_TYPE_CHANGED; |
+ event.entry.additional_properties.SetString("fileSystemName", info.name); |
+ event.entry.additional_properties.SetString("fileSystemRoot", |
+ info.root_url.spec()); |
+ event.entry.additional_properties.SetString("fileFullPath", |
+ "/" + virtual_path.value()); |
+ event.entry.additional_properties.SetBoolean("fileIsDirectory", true); |
+ |
+ BroadcastEvent( |
+ profile_, |
+ file_browser_private::OnDirectoryChanged::kEventName, |
+ file_browser_private::OnDirectoryChanged::Create(event)); |
} |
} |