| Index: chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
|
| diff --git a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
|
| index 1be0316818ccc2439175f2c1f8c28b666e9a928f..e3fe876b372fb203802c209bbcebbe789c11961a 100644
|
| --- a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
|
| +++ b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
|
| @@ -21,16 +21,60 @@
|
| using chromeos::file_system_provider::MountOptions;
|
| using chromeos::file_system_provider::ProvidedFileSystemInfo;
|
| using chromeos::file_system_provider::ProvidedFileSystemInterface;
|
| +using chromeos::file_system_provider::ProvidedFileSystemObserver;
|
| using chromeos::file_system_provider::RequestValue;
|
| using chromeos::file_system_provider::Service;
|
|
|
| namespace extensions {
|
| namespace {
|
|
|
| +typedef std::vector<linked_ptr<api::file_system_provider::ChildChange>>
|
| + IDLChildChanges;
|
| +
|
| const char kNotifyFailedErrorMessage[] =
|
| "Sending a response for the request failed.";
|
| const char kInvalidNotificationErrorMessage[] = "The notification is invalid.";
|
|
|
| +// Converts the change type from the IDL type to a native type. |changed_type|
|
| +// must be specified (not CHANGE_TYPE_NONE).
|
| +ProvidedFileSystemObserver::ChangeType ParseChangeType(
|
| + const api::file_system_provider::ChangeType& change_type) {
|
| + switch (change_type) {
|
| + case api::file_system_provider::CHANGE_TYPE_CHANGED:
|
| + return ProvidedFileSystemObserver::CHANGED;
|
| + case api::file_system_provider::CHANGE_TYPE_DELETED:
|
| + return ProvidedFileSystemObserver::DELETED;
|
| + default:
|
| + break;
|
| + }
|
| + NOTREACHED();
|
| + return ProvidedFileSystemObserver::CHANGED;
|
| +}
|
| +
|
| +// Convert the child change from the IDL type to a native type. The reason IDL
|
| +// types are not used is since they are imperfect, eg. paths are stored as
|
| +// strings.
|
| +ProvidedFileSystemObserver::ChildChange ParseChildChange(
|
| + const api::file_system_provider::ChildChange& child_change) {
|
| + ProvidedFileSystemObserver::ChildChange result;
|
| + result.entry_path = base::FilePath::FromUTF8Unsafe(child_change.entry_path);
|
| + result.change_type = ParseChangeType(child_change.change_type);
|
| + return result;
|
| +}
|
| +
|
| +// Converts a list of child changes from the IDL type to a native type.
|
| +scoped_ptr<ProvidedFileSystemObserver::ChildChanges> ParseChildChanges(
|
| + const IDLChildChanges& child_changes) {
|
| + scoped_ptr<ProvidedFileSystemObserver::ChildChanges> results(
|
| + new ProvidedFileSystemObserver::ChildChanges);
|
| + for (IDLChildChanges::const_iterator it = child_changes.begin();
|
| + it != child_changes.end();
|
| + ++it) {
|
| + results->push_back(ParseChildChange(*it->get()));
|
| + }
|
| + return results;
|
| +}
|
| +
|
| } // namespace
|
|
|
| bool FileSystemProviderMountFunction::RunSync() {
|
| @@ -149,13 +193,13 @@ bool FileSystemProviderNotifyFunction::RunSync() {
|
| return true;
|
| }
|
|
|
| - // TODO(mtomasz): Pass real data to Notify() instead of fake ones.
|
| if (!file_system->Notify(
|
| base::FilePath::FromUTF8Unsafe(params->options.observed_path),
|
| - chromeos::file_system_provider::ProvidedFileSystemObserver::CHANGED,
|
| - chromeos::file_system_provider::ProvidedFileSystemObserver::
|
| - ChildChanges(),
|
| - "todo-tag")) {
|
| + ParseChangeType(params->options.change_type),
|
| + params->options.child_changes.get()
|
| + ? ParseChildChanges(*params->options.child_changes.get())
|
| + : make_scoped_ptr(new ProvidedFileSystemObserver::ChildChanges),
|
| + params->options.tag.get() ? *params->options.tag.get() : "")) {
|
| base::ListValue* const result = new base::ListValue();
|
| result->Append(
|
| CreateError(kSecurityErrorName, kInvalidNotificationErrorMessage));
|
|
|