Introduce IBusConfigClient with empty implementation.

The actual implementation will be done with http://codereview.chromium.org/11273114/.

BUG=158265
TEST=ran chromeos_unittests, unit_tests

Review URL: https://chromiumcodereview.appspot.com/11271040

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165912 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp
index 519fe91..a9395a9 100644
--- a/chromeos/chromeos.gyp
+++ b/chromeos/chromeos.gyp
@@ -79,6 +79,8 @@
         'dbus/ibus/ibus_client.h',
         'dbus/ibus/ibus_component.cc',
         'dbus/ibus/ibus_component.h',
+        'dbus/ibus/ibus_config_client.cc',
+        'dbus/ibus/ibus_config_client.h',
         'dbus/ibus/ibus_constants.h',
         'dbus/ibus/ibus_engine_service.cc',
         'dbus/ibus/ibus_engine_service.h',
@@ -215,6 +217,8 @@
         'dbus/mock_dbus_thread_manager_without_gmock.h',
         'dbus/ibus/mock_ibus_client.cc',
         'dbus/ibus/mock_ibus_client.h',
+        'dbus/ibus/mock_ibus_config_client.cc',
+        'dbus/ibus/mock_ibus_config_client.h',
         'dbus/ibus/mock_ibus_input_context_client.cc',
         'dbus/ibus/mock_ibus_input_context_client.h',
         'dbus/ibus/mock_ibus_engine_factory_service.cc',
diff --git a/chromeos/dbus/ibus/ibus_config_client.cc b/chromeos/dbus/ibus/ibus_config_client.cc
new file mode 100644
index 0000000..b357b1c2
--- /dev/null
+++ b/chromeos/dbus/ibus/ibus_config_client.cc
@@ -0,0 +1,107 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/dbus/ibus/ibus_config_client.h"
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "chromeos/dbus/ibus/ibus_constants.h"
+#include "chromeos/dbus/ibus/ibus_component.h"
+#include "dbus/bus.h"
+#include "dbus/message.h"
+#include "dbus/object_path.h"
+#include "dbus/object_proxy.h"
+
+namespace chromeos {
+
+namespace {
+
+// The IBusConfigClient implementation.
+class IBusConfigClientImpl : public IBusConfigClient {
+ public:
+  explicit IBusConfigClientImpl(dbus::Bus* bus) {
+  }
+
+  virtual ~IBusConfigClientImpl() {}
+
+  // IBusConfigClient override.
+  virtual void SetStringValue(const std::string& section,
+                              const std::string& key,
+                              const std::string& value,
+                              const ErrorCallback& error_callback) OVERRIDE {
+  }
+
+  // IBusConfigClient override.
+  virtual void SetIntValue(const std::string& section,
+                           const std::string& key,
+                           int value,
+                           const ErrorCallback& error_callback) OVERRIDE {
+  }
+
+  // IBusConfigClient override.
+  virtual void SetBoolValue(const std::string& section,
+                            const std::string& key,
+                            bool value,
+                            const ErrorCallback& error_callback) OVERRIDE {
+  }
+
+  // IBusConfigClient override.
+  virtual void SetStringListValue(
+      const std::string& section,
+      const std::string& key,
+      const std::vector<std::string>& value,
+      const ErrorCallback& error_callback) OVERRIDE {
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(IBusConfigClientImpl);
+};
+
+// A stub implementation of IBusConfigClient.
+class IBusConfigClientStubImpl : public IBusConfigClient {
+ public:
+  IBusConfigClientStubImpl() {}
+  virtual ~IBusConfigClientStubImpl() {}
+  virtual void SetStringValue(const std::string& section,
+                              const std::string& key,
+                              const std::string& value,
+                              const ErrorCallback& error_callback) OVERRIDE {}
+  virtual void SetIntValue(const std::string& section,
+                           const std::string& key,
+                           int value,
+                           const ErrorCallback& error_callback) OVERRIDE {}
+  virtual void SetBoolValue(const std::string& section,
+                            const std::string& key,
+                            bool value,
+                            const ErrorCallback& error_callback) OVERRIDE {}
+  virtual void SetStringListValue(
+      const std::string& section,
+      const std::string& key,
+      const std::vector<std::string>& value,
+      const ErrorCallback& error_callback) OVERRIDE {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(IBusConfigClientStubImpl);
+};
+
+}  // namespace
+
+///////////////////////////////////////////////////////////////////////////////
+// IBusConfigClient
+
+IBusConfigClient::IBusConfigClient() {}
+
+IBusConfigClient::~IBusConfigClient() {}
+
+// static
+IBusConfigClient* IBusConfigClient::Create(DBusClientImplementationType type,
+                                           dbus::Bus* bus) {
+  if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) {
+    return new IBusConfigClientImpl(bus);
+  }
+  DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
+  return new IBusConfigClientStubImpl();
+}
+
+}  // namespace chromeos
diff --git a/chromeos/dbus/ibus/ibus_config_client.h b/chromeos/dbus/ibus/ibus_config_client.h
new file mode 100644
index 0000000..cb7e91b
--- /dev/null
+++ b/chromeos/dbus/ibus/ibus_config_client.h
@@ -0,0 +1,75 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_DBUS_IBUS_IBUS_CONFIG_CLIENT_H_
+#define CHROMEOS_DBUS_IBUS_IBUS_CONFIG_CLIENT_H_
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client_implementation_type.h"
+#include "dbus/object_path.h"
+
+namespace dbus {
+class Bus;
+}  // namespace dbus
+
+namespace chromeos {
+
+namespace ibus {
+class IBusComponent;
+}  // namespace ibus
+
+class IBusInputContextClient;
+
+// A class to make the actual DBus calls for IBusConfig service.
+class CHROMEOS_EXPORT IBusConfigClient {
+ public:
+  typedef base::Callback<void()> ErrorCallback;
+  virtual ~IBusConfigClient();
+
+  // Requests the IBusConfig to set a string value.
+  virtual void SetStringValue(const std::string& section,
+                              const std::string& key,
+                              const std::string& value,
+                              const ErrorCallback& error_callback) = 0;
+
+  // Requests the IBusConfig to set a integer value.
+  virtual void SetIntValue(const std::string& section,
+                           const std::string& key,
+                           int value,
+                           const ErrorCallback& error_callback) = 0;
+
+  // Requests the IBusConfig to set a boolean value.
+  virtual void SetBoolValue(const std::string& section,
+                            const std::string& key,
+                            bool value,
+                            const ErrorCallback& error_callback) = 0;
+
+  // Requests the IBusConfig to set multiple string values.
+  virtual void SetStringListValue(const std::string& section,
+                                  const std::string& key,
+                                  const std::vector<std::string>& value,
+                                  const ErrorCallback& error_callback) = 0;
+
+  // Factory function, creates a new instance and returns ownership.
+  // For normal usage, access the singleton via DBusThreadManager::Get().
+  static CHROMEOS_EXPORT IBusConfigClient* Create(
+      DBusClientImplementationType type,
+      dbus::Bus* bus);
+
+ protected:
+  // Create() should be used instead.
+  IBusConfigClient();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(IBusConfigClient);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_DBUS_IBUS_IBUS_CLIENT_H_
diff --git a/chromeos/dbus/ibus/mock_ibus_config_client.cc b/chromeos/dbus/ibus/mock_ibus_config_client.cc
new file mode 100644
index 0000000..7baa3e6e
--- /dev/null
+++ b/chromeos/dbus/ibus/mock_ibus_config_client.cc
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/dbus/ibus/mock_ibus_config_client.h"
+
+namespace chromeos {
+
+MockIBusConfigClient::MockIBusConfigClient() {
+}
+
+MockIBusConfigClient::~MockIBusConfigClient() {}
+
+void MockIBusConfigClient::SetStringValue(const std::string& key,
+                                          const std::string& section,
+                                          const std::string& value,
+                                          const ErrorCallback& error_callback) {
+}
+
+void MockIBusConfigClient::SetIntValue(const std::string& key,
+                                       const std::string& section,
+                                       int value,
+                                       const ErrorCallback& error_callback) {
+}
+
+void MockIBusConfigClient::SetBoolValue(const std::string& key,
+                                        const std::string& section,
+                                        bool value,
+                                        const ErrorCallback& error_callback) {
+}
+
+void MockIBusConfigClient::SetStringListValue(
+    const std::string& key,
+    const std::string& section,
+    const std::vector<std::string>& value,
+    const ErrorCallback& error_callback) {
+}
+
+}  // namespace chromeos
diff --git a/chromeos/dbus/ibus/mock_ibus_config_client.h b/chromeos/dbus/ibus/mock_ibus_config_client.h
new file mode 100644
index 0000000..456a7c1
--- /dev/null
+++ b/chromeos/dbus/ibus/mock_ibus_config_client.h
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_DBUS_IBUS_MOCK_IBUS_CONFIG_CLIENT_H_
+#define CHROMEOS_DBUS_IBUS_MOCK_IBUS_CONFIG_CLIENT_H_
+
+#include <string>
+
+#include "chromeos/dbus/ibus/ibus_config_client.h"
+
+namespace chromeos {
+
+class MockIBusConfigClient : public IBusConfigClient {
+ public:
+  MockIBusConfigClient();
+  virtual ~MockIBusConfigClient();
+
+  virtual void SetStringValue(const std::string& key,
+                              const std::string& section,
+                              const std::string& value,
+                              const ErrorCallback& error_callback) OVERRIDE;
+
+  virtual void SetIntValue(const std::string& key,
+                           const std::string& section,
+                           int value,
+                           const ErrorCallback& error_callback) OVERRIDE;
+
+  virtual void SetBoolValue(const std::string& key,
+                            const std::string& section,
+                            bool value,
+                            const ErrorCallback& error_callback) OVERRIDE;
+
+  virtual void SetStringListValue(const std::string& key,
+                                  const std::string& section,
+                                  const std::vector<std::string>& value,
+                                  const ErrorCallback& error_callback) OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockIBusConfigClient);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_DBUS_IBUS_MOCK_IBUS_CLIENT_H_