Home | History | Annotate | Download | only in operations
      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