Index: chrome/browser/chromeos/file_system_provider/operations/write_file.cc |
diff --git a/chrome/browser/chromeos/file_system_provider/operations/write_file.cc b/chrome/browser/chromeos/file_system_provider/operations/write_file.cc |
index df4c10ada5c86c600c4e688a4196f84469d1c3e6..573c3453dc74de93caf2fbb780e294d352d62cb0 100644 |
--- a/chrome/browser/chromeos/file_system_provider/operations/write_file.cc |
+++ b/chrome/browser/chromeos/file_system_provider/operations/write_file.cc |
@@ -33,24 +33,32 @@ WriteFile::~WriteFile() { |
bool WriteFile::Execute(int request_id) { |
TRACE_EVENT0("file_system_provider", "WriteFile::Execute"); |
+ using extensions::api::file_system_provider::WriteFileRequestedOptions; |
if (!file_system_info_.writable()) |
return false; |
- scoped_ptr<base::DictionaryValue> values(new base::DictionaryValue); |
- values->SetInteger("openRequestId", file_handle_); |
- values->SetDouble("offset", offset_); |
+ WriteFileRequestedOptions options; |
+ options.file_system_id = file_system_info_.file_system_id(); |
+ options.request_id = request_id; |
+ options.open_request_id = file_handle_; |
+ options.offset = offset_; |
// Length is not passed directly since it can be accessed via data.byteLength. |
+ // Set the data directly on base::Value() to avoid an extra string copy. |
DCHECK(buffer_.get()); |
- values->Set( |
+ scoped_ptr<base::DictionaryValue> options_as_value = options.ToValue(); |
+ options_as_value->Set( |
"data", |
base::BinaryValue::CreateWithCopiedBuffer(buffer_->data(), length_)); |
+ scoped_ptr<base::ListValue> event_args(new base::ListValue); |
+ event_args->Append(options_as_value.release()); |
+ |
return SendEvent( |
request_id, |
extensions::api::file_system_provider::OnWriteFileRequested::kEventName, |
- values.Pass()); |
+ event_args.Pass()); |
} |
void WriteFile::OnSuccess(int /* request_id */, |