12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROMEOS_NETWORK_NETWORK_HANDLER_CALLBACKS_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROMEOS_NETWORK_NETWORK_HANDLER_CALLBACKS_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_export.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/dbus/dbus_method_call_status.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace network_handler {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)CHROMEOS_EXPORT extern const char kDBusFailedError[];
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)CHROMEOS_EXPORT extern const char kDBusFailedErrorMessage[];
25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochCHROMEOS_EXPORT extern const char kErrorName[];
26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochCHROMEOS_EXPORT extern const char kErrorDetail[];
27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochCHROMEOS_EXPORT extern const char kDbusErrorName[];
28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochCHROMEOS_EXPORT extern const char kDbusErrorMessage[];
29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// An error callback used by both the configuration handler and the state
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// handler to receive error results from the API.
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void(const std::string& error_name,
34a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)       scoped_ptr<base::DictionaryValue> error_data)> ErrorCallback;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void(const std::string& service_path,
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       const base::DictionaryValue& dictionary)> DictionaryResultCallback;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void(const std::string& service_path)> StringResultCallback;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Create a DictionaryValue for passing to ErrorCallback.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CHROMEOS_EXPORT base::DictionaryValue* CreateErrorData(
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& path,
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& error_name,
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& error_detail);
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// If not NULL, runs |error_callback| with an ErrorData dictionary created from
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// the other arguments.
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)CHROMEOS_EXPORT void RunErrorCallback(const ErrorCallback& error_callback,
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                      const std::string& path,
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                      const std::string& error_name,
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                      const std::string& error_detail);
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
567dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochCHROMEOS_EXPORT base::DictionaryValue* CreateDBusErrorData(
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& path,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& error_name,
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& error_detail,
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& dbus_error_name,
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& dbus_error_message);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Callback for Shill errors.
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// |error_name| is the error name passed to |error_callback|.
657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// |path| is the associated object path or blank if not relevant.
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// |dbus_error_name| and |dbus_error_message| are provided by the DBus handler.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Logs an error and calls |error_callback| if not null.
68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)CHROMEOS_EXPORT void ShillErrorCallbackFunction(
697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& error_name,
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    const std::string& path,
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    const ErrorCallback& error_callback,
727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& dbus_error_name,
737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& dbus_error_message);
747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Callback for property getters used by NetworkConfigurationHandler
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// (for Network Services) and by NetworkDeviceHandler. Used to translate
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// the DBus Dictionary callback into one that calls the error callback
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// if |call_status| != DBUS_METHOD_CALL_SUCCESS.
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochCHROMEOS_EXPORT void GetPropertiesCallback(
801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const DictionaryResultCallback& callback,
811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const ErrorCallback& error_callback,
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::string& path,
837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    DBusMethodCallStatus call_status,
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const base::DictionaryValue& value);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace network_handler
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace chromeos
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROMEOS_NETWORK_NETWORK_HANDLER_CALLBACKS_H_
90