Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: chromeos/dbus/ibus/ibus_engine_service.cc

Issue 10968056: Fix crash bug of IME extension API. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix unittest. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/dbus/ibus/ibus_engine_service.cc
diff --git a/chromeos/dbus/ibus/ibus_engine_service.cc b/chromeos/dbus/ibus/ibus_engine_service.cc
index dcfee8369d4ea6e88901e747d55754f2a157ef44..51022df49392ae5d8ce5bb53cd717ec56c04c933 100644
--- a/chromeos/dbus/ibus/ibus_engine_service.cc
+++ b/chromeos/dbus/ibus/ibus_engine_service.cc
@@ -24,6 +24,7 @@ class IBusEngineServiceImpl : public IBusEngineService {
IBusEngineServiceImpl(dbus::Bus* bus,
const dbus::ObjectPath& object_path)
: bus_(bus),
+ engine_handler_(NULL),
object_path_(object_path),
weak_ptr_factory_(this) {
exported_object_ = bus->GetExportedObject(object_path_);
@@ -130,12 +131,15 @@ class IBusEngineServiceImpl : public IBusEngineService {
}
// IBusEngineService override.
- virtual void Initialize(IBusEngineHandlerInterface* handler) OVERRIDE {
- if (engine_handler_.get() == NULL) {
- engine_handler_.reset(handler);
- } else {
- LOG(ERROR) << "Already initialized.";
- }
+ virtual void SetEngine(IBusEngineHandlerInterface* handler) OVERRIDE {
+ LOG_IF(ERROR, engine_handler_ == NULL) << "Override engine.";
Seigo Nonaka 2012/09/24 07:52:45 DLOG? and is the comment correct? And should we tr
hsumita 2012/09/24 08:01:16 Done.
+ engine_handler_ = handler;
+ }
+
+ // IBusEngineService override.
+ virtual void UnsetEngine() OVERRIDE {
+ LOG_IF(ERROR, engine_handler_ == NULL) << "There is no engine.";
+ engine_handler_ = NULL;
}
// IBusEngineService override.
@@ -225,7 +229,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles FocusIn method call from ibus-daemon.
void FocusIn(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
- DCHECK(engine_handler_.get());
+ if (engine_handler_ == NULL)
+ return;
engine_handler_->FocusIn();
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -234,7 +239,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles FocusOut method call from ibus-daemon.
void FocusOut(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
- DCHECK(engine_handler_.get());
+ if (engine_handler_ == NULL)
+ return;
engine_handler_->FocusOut();
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -243,7 +249,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles Enable method call from ibus-daemon.
void Enable(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
- DCHECK(engine_handler_.get());
+ if (engine_handler_ == NULL)
+ return;
engine_handler_->Enable();
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -252,7 +259,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles Disable method call from ibus-daemon.
void Disable(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
- DCHECK(engine_handler_.get());
+ if (engine_handler_ == NULL)
+ return;
engine_handler_->Disable();
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -261,6 +269,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles PropertyActivate method call from ibus-daemon.
void PropertyActivate(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
std::string property_name;
if (!reader.PopString(&property_name)) {
@@ -274,7 +284,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->PropertyActivate(
property_name,
static_cast<IBusEngineHandlerInterface::IBusPropertyState>(
@@ -286,6 +295,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles PropertyShow method call from ibus-daemon.
void PropertyShow(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
std::string property_name;
if (!reader.PopString(&property_name)) {
@@ -293,7 +304,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->PropertyShow(property_name);
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -302,6 +312,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles PropertyHide method call from ibus-daemon.
void PropertyHide(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
std::string property_name;
if (!reader.PopString(&property_name)) {
@@ -309,7 +321,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->PropertyHide(property_name);
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -318,6 +329,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles SetCapability method call from ibus-daemon.
void SetCapability(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
uint32 capability = 0;
if (!reader.PopUint32(&capability)) {
@@ -325,7 +338,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->SetCapability(
static_cast<IBusEngineHandlerInterface::IBusCapability>(capability));
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
@@ -334,7 +346,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
void Reset(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
- DCHECK(engine_handler_.get());
+ if (engine_handler_ == NULL)
+ return;
engine_handler_->Reset();
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -343,6 +356,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles ProcessKeyEvent method call from ibus-daemon.
void ProcessKeyEvent(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
uint32 keysym = 0;
if (!reader.PopUint32(&keysym)) {
@@ -362,7 +377,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->ProcessKeyEvent(
keysym, keycode, state,
base::Bind(&IBusEngineServiceImpl::KeyEventDone,
@@ -375,6 +389,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
void KeyEventDone(dbus::Response* response,
const dbus::ExportedObject::ResponseSender& response_sender,
bool consume) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageWriter writer(response);
writer.AppendBool(consume);
response_sender.Run(response);
@@ -383,6 +399,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
// Handles CandidateClicked method call from ibus-daemon.
void CandidateClicked(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
uint32 index = 0;
if (!reader.PopUint32(&index)) {
@@ -402,7 +420,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->CandidateClicked(
index,
static_cast<IBusEngineHandlerInterface::IBusMouseButton>(button),
@@ -415,6 +432,8 @@ class IBusEngineServiceImpl : public IBusEngineService {
void SetSurroundingText(
dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
+ if (engine_handler_ == NULL)
+ return;
dbus::MessageReader reader(method_call);
std::string text;
if (!reader.PopString(&text)) {
@@ -435,7 +454,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->SetSurroundingText(text, cursor_pos, anchor_pos);
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
response_sender.Run(response);
@@ -453,7 +471,7 @@ class IBusEngineServiceImpl : public IBusEngineService {
dbus::Bus* bus_;
// All incoming method calls are passed on to the |engine_handler_|.
- scoped_ptr<IBusEngineHandlerInterface> engine_handler_;
+ IBusEngineHandlerInterface* engine_handler_;
dbus::ObjectPath object_path_;
scoped_refptr<dbus::ExportedObject> exported_object_;
@@ -467,7 +485,8 @@ class IBusEngineServiceStubImpl : public IBusEngineService {
IBusEngineServiceStubImpl() {}
virtual ~IBusEngineServiceStubImpl() {}
// IBusEngineService overrides.
- virtual void Initialize(IBusEngineHandlerInterface* handler) OVERRIDE {}
+ virtual void SetEngine(IBusEngineHandlerInterface* handler) OVERRIDE {}
+ virtual void UnsetEngine() OVERRIDE {}
virtual void RegisterProperties(
const ibus::IBusPropertyList& property_list) OVERRIDE {}
virtual void UpdatePreedit(const ibus::IBusText& ibus_text,

Powered by Google App Engine
This is Rietveld 408576698