Commit 2110271e authored by nona@chromium.org's avatar nona@chromium.org

Implement IBusInputContextClient

IBusInputContextClient performs performs dbus communication with following spec.
Target Server: ibus-daemon
Service: org.freedesktop.IBus
ObjectPath: /org/freedesktop/IBus/InputContext_XXXX
(The object path is not determined until call CreateInputContext method, please
read commend for detail)

At this moment, all signal handler and method call implementation is not used in
production. According to this CL, IBusInputContextClient is
compiled and tested by chromeos_unittests.

BUG=chromium-os:26334
TEST=unit_tests,chromeos_unittests,dbus_unittests

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138484 0039d316-1c4b-4281-b951-d872f2087c98
parent 4aaa1878
...@@ -76,6 +76,8 @@ ...@@ -76,6 +76,8 @@
'dbus/ibus/ibus_object.h', 'dbus/ibus/ibus_object.h',
'dbus/ibus/ibus_text.cc', 'dbus/ibus/ibus_text.cc',
'dbus/ibus/ibus_text.h', 'dbus/ibus/ibus_text.h',
'dbus/ibus/ibus_input_context_client.cc',
'dbus/ibus/ibus_input_context_client.h',
'dbus/image_burner_client.cc', 'dbus/image_burner_client.cc',
'dbus/image_burner_client.h', 'dbus/image_burner_client.h',
'dbus/introspectable_client.cc', 'dbus/introspectable_client.cc',
...@@ -106,6 +108,8 @@ ...@@ -106,6 +108,8 @@
'sources': [ 'sources': [
'dbus/ibus/mock_ibus_client.cc', 'dbus/ibus/mock_ibus_client.cc',
'dbus/ibus/mock_ibus_client.h', 'dbus/ibus/mock_ibus_client.h',
'dbus/ibus/mock_ibus_input_context_client.cc',
'dbus/ibus/mock_ibus_input_context_client.h',
'dbus/mock_bluetooth_adapter_client.cc', 'dbus/mock_bluetooth_adapter_client.cc',
'dbus/mock_bluetooth_adapter_client.h', 'dbus/mock_bluetooth_adapter_client.h',
'dbus/mock_bluetooth_device_client.cc', 'dbus/mock_bluetooth_device_client.cc',
...@@ -152,6 +156,8 @@ ...@@ -152,6 +156,8 @@
'dbus/mock_speech_synthesizer_client.h', 'dbus/mock_speech_synthesizer_client.h',
'dbus/mock_update_engine_client.cc', 'dbus/mock_update_engine_client.cc',
'dbus/mock_update_engine_client.h', 'dbus/mock_update_engine_client.h',
'dbus/ibus/mock_ibus_input_context_client.cc',
'dbus/ibus/mock_ibus_input_context_client.h',
], ],
'include_dirs': [ 'include_dirs': [
'..', '..',
...@@ -183,6 +189,7 @@ ...@@ -183,6 +189,7 @@
'dbus/ibus/ibus_client_unittest.cc', 'dbus/ibus/ibus_client_unittest.cc',
'dbus/ibus/ibus_object_unittest.cc', 'dbus/ibus/ibus_object_unittest.cc',
'dbus/ibus/ibus_text_unittest.cc', 'dbus/ibus/ibus_text_unittest.cc',
'dbus/ibus/ibus_input_context_client_unittest.cc',
'network/network_sms_handler_unittest.cc', 'network/network_sms_handler_unittest.cc',
], ],
'include_dirs': [ 'include_dirs': [
......
This diff is collapsed.
// 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_INPUT_CONTEXT_CLIENT_H_
#define CHROMEOS_DBUS_IBUS_IBUS_INPUT_CONTEXT_CLIENT_H_
#pragma once
#include "base/bind.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 {
// TODO(nona): Remove ibus namespace after complete libibus removal.
namespace ibus {
class IBusText;
} // namespace
// A class to make the actual DBus calls for IBusInputContext service.
// The ibus-daemon creates object paths on demand, so the target object path is
// not determined before calling CreateInputContext. It is good to initialize
// this class at the callback from CreateInputContext in IBusClient. This class
// is managed by DBusThreadManager as singleton instance, so we can handle only
// one input context but it is enough for ChromeOS.
class CHROMEOS_EXPORT IBusInputContextClient {
public:
typedef base::Callback<void(const ibus::IBusText& text)> CommitTextHandler;
typedef base::Callback<void(uint32 keyval, uint32 keycode, uint32 state)>
ForwardKeyEventHandler;
typedef base::Callback<void(const ibus::IBusText& text,
uint32 cursor_pos,
bool visible)>
UpdatePreeditTextHandler;
typedef base::Callback<void()> ShowPreeditTextHandler;
typedef base::Callback<void()> HidePreeditTextHandler;
typedef base::Callback<void(bool is_keyevent_used)> ProcessKeyEventCallback;
virtual ~IBusInputContextClient();
// Creates object proxy and connects signals.
virtual void Initialize(dbus::Bus* bus,
const dbus::ObjectPath& object_path) = 0;
// Resets object proxy. If you want to use InputContext again, should call
// Initialize function again.
virtual void ResetObjectProxy() = 0;
// Returns true if connected to target input context path, otherwise return
// false.
virtual bool IsConnected() const = 0;
// Signal handler accessors. Setting function can be called multiple times. If
// you call setting function multiple times, previous callback will be
// overwritten.
// Sets CommitText signal handler.
virtual void SetCommitTextHandler(
const CommitTextHandler& commit_text_handler) = 0;
// Sets ForwardKeyEvent signal handler.
virtual void SetForwardKeyEventHandler(
const ForwardKeyEventHandler& forward_key_event_handler) = 0;
// Sets UpdatePreeditText signal handler.
virtual void SetUpdatePreeditTextHandler(
const UpdatePreeditTextHandler& update_preedit_text_handler) = 0;
// Sets ShowPreeditText signal handler.
virtual void SetShowPreeditTextHandler(
const ShowPreeditTextHandler& show_preedit_text_handler) = 0;
// Sets HidePreeditText signal handler.
virtual void SetHidePreeditTextHandler(
const HidePreeditTextHandler& hide_preedit_text_handler) = 0;
// Unsets CommitText signal handler.
virtual void UnsetCommitTextHandler() = 0;
// Unsets FowardKeyEvent signal handler.
virtual void UnsetForwardKeyEventHandler() = 0;
// Unsets UpdatePreeditText signal handler.
virtual void UnsetUpdatePreeditTextHandler() = 0;
// Unsets ShowPreeditText signal handler.
virtual void UnsetShowPreeditTextHandler() = 0;
// Unsets HidePreeditText signal handler.
virtual void UnsetHidePreeditTextHandler() = 0;
// Invokes SetCapabilities method call.
virtual void SetCapabilities(uint32 capability) = 0;
// Invokes FocusIn method call.
virtual void FocusIn() = 0;
// Invokes FocusOut method call.
virtual void FocusOut() = 0;
// Invokes Reset method call.
virtual void Reset() = 0;
// Invokes SetCursorLocation method call.
virtual void SetCursorLocation(int32 x, int32 y, int32 width,
int32 height) = 0;
// Invokes ProcessKeyEvent method call. |callback| shold not be null-callback.
virtual void ProcessKeyEvent(uint32 keyval,
uint32 keycode,
uint32 state,
const ProcessKeyEventCallback& callback) = 0;
// Factory function, creates a new instance and returns ownership.
// For normal usage, access the singleton via DBusThreadManager::Get().
static CHROMEOS_EXPORT IBusInputContextClient* Create(
DBusClientImplementationType type);
protected:
// Create() should be used instead.
IBusInputContextClient();
private:
DISALLOW_COPY_AND_ASSIGN(IBusInputContextClient);
};
} // namespace chromeos
#endif // CHROMEOS_DBUS_IBUS_IBUS_INPUT_CONTEXT_CLIENT_H_
This diff is collapsed.
// 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_input_context_client.h"
namespace chromeos {
MockIBusInputContextClient::MockIBusInputContextClient() {}
MockIBusInputContextClient::~MockIBusInputContextClient() {}
} // namespace chromeos
// 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_INPUT_CONTEXT_CLIENT_H_
#define CHROMEOS_DBUS_IBUS_MOCK_IBUS_INPUT_CONTEXT_CLIENT_H_
#include "chromeos/dbus/ibus/ibus_input_context_client.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace chromeos {
class MockIBusInputContextClient : public IBusInputContextClient {
public:
MockIBusInputContextClient();
virtual ~MockIBusInputContextClient();
MOCK_METHOD2(Initialize, void(dbus::Bus* bus,
const dbus::ObjectPath& object_path));
MOCK_METHOD0(ResetObjectProxy, void());
MOCK_CONST_METHOD0(IsConnected, bool());
MOCK_METHOD1(SetCommitTextHandler,
void(const CommitTextHandler& commit_text_handler));
MOCK_METHOD1(SetForwardKeyEventHandler,
void(const ForwardKeyEventHandler& forward_key_event_handler));
MOCK_METHOD1(
SetUpdatePreeditTextHandler,
void(const UpdatePreeditTextHandler& update_preedit_text_handler));
MOCK_METHOD1(SetShowPreeditTextHandler,
void(const ShowPreeditTextHandler& show_preedit_text_handler));
MOCK_METHOD1(SetHidePreeditTextHandler,
void(const HidePreeditTextHandler& hide_preedit_text_handler));
MOCK_METHOD0(UnsetCommitTextHandler, void());
MOCK_METHOD0(UnsetForwardKeyEventHandler, void());
MOCK_METHOD0(UnsetUpdatePreeditTextHandler, void());
MOCK_METHOD0(UnsetShowPreeditTextHandler, void());
MOCK_METHOD0(UnsetHidePreeditTextHandler, void());
MOCK_METHOD1(SetCapabilities, void(uint32 capabilities));
MOCK_METHOD0(FocusIn, void());
MOCK_METHOD0(FocusOut, void());
MOCK_METHOD0(Reset, void());
MOCK_METHOD4(SetCursorLocation, void(int32 x, int32 y, int32 w, int32 h));
MOCK_METHOD4(ProcessKeyEvent, void(uint32 keyval,
uint32 keycode,
uint32 state,
const ProcessKeyEventCallback& callback));
};
} // namespace chromeos
#endif // CHROMEOS_DBUS_IBUS_MOCK_IBUS_INPUT_CONTEXT_CLIENT_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment