1 // Copyright 2014 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/chromeos/file_system_provider/operations/operation.h" 6 7 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" 8 #include "extensions/browser/event_router.h" 9 10 namespace chromeos { 11 namespace file_system_provider { 12 namespace operations { 13 namespace { 14 15 // Default implementation for dispatching an event. Can be replaced for unit 16 // tests by Operation::SetDispatchEventImplForTest(). 17 bool DispatchEventImpl(extensions::EventRouter* event_router, 18 const std::string& extension_id, 19 scoped_ptr<extensions::Event> event) { 20 if (!event_router->ExtensionHasEventListener(extension_id, event->event_name)) 21 return false; 22 23 event_router->DispatchEventToExtension(extension_id, event.Pass()); 24 return true; 25 } 26 27 } // namespace 28 29 Operation::Operation(extensions::EventRouter* event_router, 30 const ProvidedFileSystemInfo& file_system_info) 31 : file_system_info_(file_system_info), 32 dispatch_event_impl_(base::Bind(&DispatchEventImpl, 33 event_router, 34 file_system_info_.extension_id())) { 35 } 36 37 Operation::~Operation() { 38 } 39 40 void Operation::SetDispatchEventImplForTesting( 41 const DispatchEventImplCallback& callback) { 42 dispatch_event_impl_ = callback; 43 } 44 45 bool Operation::SendEvent(int request_id, 46 const std::string& event_name, 47 scoped_ptr<base::DictionaryValue> options) { 48 options->SetString("fileSystemId", file_system_info_.file_system_id()); 49 options->SetInteger("requestId", request_id); 50 51 scoped_ptr<base::ListValue> event_args(new base::ListValue); 52 event_args->Append(options.release()); 53 54 return dispatch_event_impl_.Run( 55 make_scoped_ptr(new extensions::Event(event_name, event_args.Pass()))); 56 } 57 58 } // namespace operations 59 } // namespace file_system_provider 60 } // namespace chromeos 61