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

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: 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..390bd460bbe164275bcf71fe110571280afa6184 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,11 +131,17 @@ class IBusEngineServiceImpl : public IBusEngineService {
}
// IBusEngineService override.
- virtual void Initialize(IBusEngineHandlerInterface* handler) OVERRIDE {
- if (engine_handler_.get() == NULL) {
- engine_handler_.reset(handler);
+ virtual void SetEngine(IBusEngineHandlerInterface* handler) OVERRIDE {
+ LOG_IF(ERROR, engine_handler_ == NULL) << "Override engine.";
+ engine_handler_ = handler;
+ }
+
+ // IBusEngineService override.
+ virtual void UnsetEngine() OVERRIDE {
+ if (engine_handler_ == NULL) {
+ LOG(ERROR) << "There is no engine.";
} else {
- LOG(ERROR) << "Already initialized.";
+ engine_handler_ = NULL;
}
}
@@ -225,7 +232,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 +242,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 +252,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 +262,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 +272,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 +287,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->PropertyActivate(
property_name,
static_cast<IBusEngineHandlerInterface::IBusPropertyState>(
@@ -286,6 +298,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 +307,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 +315,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 +324,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 +332,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 +341,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 +349,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 +359,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 +380,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 +392,7 @@ class IBusEngineServiceImpl : public IBusEngineService {
void KeyEventDone(dbus::Response* response,
const dbus::ExportedObject::ResponseSender& response_sender,
bool consume) {
+ //////// do we need to check engine_handler_?
Seigo Nonaka 2012/09/24 04:16:58 remove this. And I think the answer is yes, becaus
hsumita 2012/09/24 07:32:59 Done.
dbus::MessageWriter writer(response);
writer.AppendBool(consume);
response_sender.Run(response);
@@ -383,6 +401,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 +422,6 @@ class IBusEngineServiceImpl : public IBusEngineService {
<< method_call->ToString();
return;
}
- DCHECK(engine_handler_.get());
engine_handler_->CandidateClicked(
index,
static_cast<IBusEngineHandlerInterface::IBusMouseButton>(button),
@@ -415,6 +434,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 +456,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 +473,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_;
Seigo Nonaka 2012/09/24 04:16:58 IBusEngineHandlerInterfae* engine_handler_
hsumita 2012/09/24 07:32:59 Done.
dbus::ObjectPath object_path_;
scoped_refptr<dbus::ExportedObject> exported_object_;
@@ -467,7 +487,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,
« chromeos/dbus/ibus/ibus_engine_service.h ('K') | « chromeos/dbus/ibus/ibus_engine_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698