summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chromeos/chromeos.gyp4
-rw-r--r--chromeos/dbus/dbus_thread_manager.cc11
-rw-r--r--chromeos/dbus/dbus_thread_manager.h2
-rw-r--r--chromeos/dbus/fake_dbus_thread_manager.cc12
-rw-r--r--chromeos/dbus/fake_dbus_thread_manager.h3
-rw-r--r--chromeos/dbus/fake_lorgnette_manager_client.cc40
-rw-r--r--chromeos/dbus/fake_lorgnette_manager_client.h36
-rw-r--r--chromeos/dbus/lorgnette_manager_client.cc201
-rw-r--r--chromeos/dbus/lorgnette_manager_client.h68
9 files changed, 377 insertions, 0 deletions
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp
index bc73f6a..d6cf1bb 100644
--- a/chromeos/chromeos.gyp
+++ b/chromeos/chromeos.gyp
@@ -156,6 +156,8 @@
'dbus/fake_gsm_sms_client.h',
'dbus/fake_introspectable_client.cc',
'dbus/fake_introspectable_client.h',
+ 'dbus/fake_lorgnette_manager_client.cc',
+ 'dbus/fake_lorgnette_manager_client.h',
'dbus/fake_modem_messaging_client.cc',
'dbus/fake_modem_messaging_client.h',
'dbus/fake_nfc_adapter_client.cc',
@@ -218,6 +220,8 @@
'dbus/image_burner_client.h',
'dbus/introspectable_client.cc',
'dbus/introspectable_client.h',
+ 'dbus/lorgnette_manager_client.cc',
+ 'dbus/lorgnette_manager_client.h',
'dbus/modem_messaging_client.cc',
'dbus/modem_messaging_client.h',
'dbus/permission_broker_client.cc',
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index 46fd684..7056c03 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -30,6 +30,7 @@
#include "chromeos/dbus/gsm_sms_client.h"
#include "chromeos/dbus/image_burner_client.h"
#include "chromeos/dbus/introspectable_client.h"
+#include "chromeos/dbus/lorgnette_manager_client.h"
#include "chromeos/dbus/modem_messaging_client.h"
#include "chromeos/dbus/nfc_adapter_client.h"
#include "chromeos/dbus/nfc_device_client.h"
@@ -88,6 +89,7 @@ class DBusClientBundle {
cros_disks_client_.reset(CrosDisksClient::Create(client_type));
cryptohome_client_.reset(CryptohomeClient::Create());
debug_daemon_client_.reset(DebugDaemonClient::Create());
+ lorgnette_manager_client_.reset(LorgnetteManagerClient::Create());
shill_manager_client_.reset(ShillManagerClient::Create());
shill_device_client_.reset(ShillDeviceClient::Create());
shill_ipconfig_client_.reset(ShillIPConfigClient::Create());
@@ -154,6 +156,9 @@ class DBusClientBundle {
DebugDaemonClient* debug_daemon_client() {
return debug_daemon_client_.get();
}
+ LorgnetteManagerClient* lorgnette_manager_client() {
+ return lorgnette_manager_client_.get();
+ }
ShillDeviceClient* shill_device_client() {
return shill_device_client_.get();
}
@@ -230,6 +235,7 @@ class DBusClientBundle {
scoped_ptr<CrosDisksClient> cros_disks_client_;
scoped_ptr<CryptohomeClient> cryptohome_client_;
scoped_ptr<DebugDaemonClient> debug_daemon_client_;
+ scoped_ptr<LorgnetteManagerClient> lorgnette_manager_client_;
scoped_ptr<ShillDeviceClient> shill_device_client_;
scoped_ptr<ShillIPConfigClient> shill_ipconfig_client_;
scoped_ptr<ShillManagerClient> shill_manager_client_;
@@ -365,6 +371,10 @@ class DBusThreadManagerImpl : public DBusThreadManager {
return client_bundle_->debug_daemon_client();
}
+ virtual LorgnetteManagerClient* GetLorgnetteManagerClient() OVERRIDE {
+ return client_bundle_->lorgnette_manager_client();
+ }
+
virtual ShillDeviceClient* GetShillDeviceClient() OVERRIDE {
return client_bundle_->shill_device_client();
}
@@ -578,6 +588,7 @@ void DBusThreadManager::InitializeClients() {
InitClient(g_dbus_thread_manager->GetGsmSMSClient());
InitClient(g_dbus_thread_manager->GetImageBurnerClient());
InitClient(g_dbus_thread_manager->GetIntrospectableClient());
+ InitClient(g_dbus_thread_manager->GetLorgnetteManagerClient());
InitClient(g_dbus_thread_manager->GetModemMessagingClient());
InitClient(g_dbus_thread_manager->GetPermissionBrokerClient());
InitClient(g_dbus_thread_manager->GetPowerManagerClient());
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h
index 7253623..b1d395d 100644
--- a/chromeos/dbus/dbus_thread_manager.h
+++ b/chromeos/dbus/dbus_thread_manager.h
@@ -43,6 +43,7 @@ class DebugDaemonClient;
class GsmSMSClient;
class ImageBurnerClient;
class IntrospectableClient;
+class LorgnetteManagerClient;
class ModemMessagingClient;
class NfcAdapterClient;
class NfcDeviceClient;
@@ -142,6 +143,7 @@ class CHROMEOS_EXPORT DBusThreadManager {
virtual GsmSMSClient* GetGsmSMSClient() = 0;
virtual ImageBurnerClient* GetImageBurnerClient() = 0;
virtual IntrospectableClient* GetIntrospectableClient() = 0;
+ virtual LorgnetteManagerClient* GetLorgnetteManagerClient() = 0;
virtual ModemMessagingClient* GetModemMessagingClient() = 0;
virtual NfcAdapterClient* GetNfcAdapterClient() = 0;
virtual NfcDeviceClient* GetNfcDeviceClient() = 0;
diff --git a/chromeos/dbus/fake_dbus_thread_manager.cc b/chromeos/dbus/fake_dbus_thread_manager.cc
index 4ba7e78..10b7835 100644
--- a/chromeos/dbus/fake_dbus_thread_manager.cc
+++ b/chromeos/dbus/fake_dbus_thread_manager.cc
@@ -25,6 +25,7 @@
#include "chromeos/dbus/fake_gsm_sms_client.h"
#include "chromeos/dbus/fake_image_burner_client.h"
#include "chromeos/dbus/fake_introspectable_client.h"
+#include "chromeos/dbus/fake_lorgnette_manager_client.h"
#include "chromeos/dbus/fake_modem_messaging_client.h"
#include "chromeos/dbus/fake_nfc_adapter_client.h"
#include "chromeos/dbus/fake_nfc_device_client.h"
@@ -82,6 +83,8 @@ void FakeDBusThreadManager::SetFakeClients() {
SetCryptohomeClient(scoped_ptr<CryptohomeClient>(new FakeCryptohomeClient));
SetDebugDaemonClient(
scoped_ptr<DebugDaemonClient>(new FakeDebugDaemonClient));
+ SetLorgnetteManagerClient(
+ scoped_ptr<LorgnetteManagerClient>(new FakeLorgnetteManagerClient));
SetFakeShillClients();
@@ -202,6 +205,11 @@ void FakeDBusThreadManager::SetDebugDaemonClient(
debug_daemon_client_ = client.Pass();
}
+void FakeDBusThreadManager::SetLorgnetteManagerClient(
+ scoped_ptr<LorgnetteManagerClient> client) {
+ lorgnette_manager_client_ = client.Pass();
+}
+
void FakeDBusThreadManager::SetShillDeviceClient(
scoped_ptr<ShillDeviceClient> client) {
shill_device_client_ = client.Pass();
@@ -383,6 +391,10 @@ DebugDaemonClient* FakeDBusThreadManager::GetDebugDaemonClient() {
return debug_daemon_client_.get();
}
+LorgnetteManagerClient* FakeDBusThreadManager::GetLorgnetteManagerClient() {
+ return lorgnette_manager_client_.get();
+}
+
ShillDeviceClient*
FakeDBusThreadManager::GetShillDeviceClient() {
return shill_device_client_.get();
diff --git a/chromeos/dbus/fake_dbus_thread_manager.h b/chromeos/dbus/fake_dbus_thread_manager.h
index ce02567..b3d308c 100644
--- a/chromeos/dbus/fake_dbus_thread_manager.h
+++ b/chromeos/dbus/fake_dbus_thread_manager.h
@@ -56,6 +56,7 @@ class CHROMEOS_EXPORT FakeDBusThreadManager : public DBusThreadManager {
void SetCrosDisksClient(scoped_ptr<CrosDisksClient> client);
void SetCryptohomeClient(scoped_ptr<CryptohomeClient> client);
void SetDebugDaemonClient(scoped_ptr<DebugDaemonClient> client);
+ void SetLorgnetteManagerClient(scoped_ptr<LorgnetteManagerClient> client);
void SetShillDeviceClient(scoped_ptr<ShillDeviceClient> client);
void SetShillIPConfigClient(scoped_ptr<ShillIPConfigClient> client);
void SetShillManagerClient(scoped_ptr<ShillManagerClient> client);
@@ -99,6 +100,7 @@ class CHROMEOS_EXPORT FakeDBusThreadManager : public DBusThreadManager {
virtual CrosDisksClient* GetCrosDisksClient() OVERRIDE;
virtual CryptohomeClient* GetCryptohomeClient() OVERRIDE;
virtual DebugDaemonClient* GetDebugDaemonClient() OVERRIDE;
+ virtual LorgnetteManagerClient* GetLorgnetteManagerClient() OVERRIDE;
virtual ShillDeviceClient* GetShillDeviceClient() OVERRIDE;
virtual ShillIPConfigClient* GetShillIPConfigClient() OVERRIDE;
virtual ShillManagerClient* GetShillManagerClient() OVERRIDE;
@@ -141,6 +143,7 @@ class CHROMEOS_EXPORT FakeDBusThreadManager : public DBusThreadManager {
scoped_ptr<CrosDisksClient> cros_disks_client_;
scoped_ptr<CryptohomeClient> cryptohome_client_;
scoped_ptr<DebugDaemonClient> debug_daemon_client_;
+ scoped_ptr<LorgnetteManagerClient> lorgnette_manager_client_;
scoped_ptr<ShillDeviceClient> shill_device_client_;
scoped_ptr<ShillIPConfigClient> shill_ipconfig_client_;
scoped_ptr<ShillManagerClient> shill_manager_client_;
diff --git a/chromeos/dbus/fake_lorgnette_manager_client.cc b/chromeos/dbus/fake_lorgnette_manager_client.cc
new file mode 100644
index 0000000..16924b3
--- /dev/null
+++ b/chromeos/dbus/fake_lorgnette_manager_client.cc
@@ -0,0 +1,40 @@
+// Copyright 2014 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/fake_lorgnette_manager_client.h"
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/location.h"
+#include "base/message_loop/message_loop.h"
+
+namespace chromeos {
+
+FakeLorgnetteManagerClient::FakeLorgnetteManagerClient() {}
+
+FakeLorgnetteManagerClient::~FakeLorgnetteManagerClient() {}
+
+void FakeLorgnetteManagerClient::Init(dbus::Bus* bus) {}
+
+void FakeLorgnetteManagerClient::ListScanners(
+ const ListScannersCallback& callback) {
+ std::map<std::string, ScannerTableEntry> scanners;
+ base::MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(callback, false, scanners));
+}
+
+void FakeLorgnetteManagerClient::ScanImage(
+ std::string device_name,
+ base::PlatformFile file,
+ const ScanProperties& properties,
+ const ScanImageCallback& callback) {
+ base::MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(callback, false));
+}
+
+} // namespace chromeos
diff --git a/chromeos/dbus/fake_lorgnette_manager_client.h b/chromeos/dbus/fake_lorgnette_manager_client.h
new file mode 100644
index 0000000..7f514f5
--- /dev/null
+++ b/chromeos/dbus/fake_lorgnette_manager_client.h
@@ -0,0 +1,36 @@
+// Copyright 2014 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_FAKE_LORGNETTE_MANAGER_CLIENT_H_
+#define CHROMEOS_DBUS_FAKE_LORGNETTE_MANAGER_CLIENT_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "chromeos/dbus/lorgnette_manager_client.h"
+
+namespace chromeos {
+
+// Lorgnette LorgnetteManagerClient implementation used on Linux desktop,
+// which does nothing.
+class CHROMEOS_EXPORT FakeLorgnetteManagerClient
+ : public LorgnetteManagerClient {
+ public:
+ FakeLorgnetteManagerClient();
+ virtual ~FakeLorgnetteManagerClient();
+
+ virtual void Init(dbus::Bus* bus) OVERRIDE;
+
+ virtual void ListScanners(const ListScannersCallback& callback) OVERRIDE;
+ virtual void ScanImage(std::string device_name,
+ base::PlatformFile file,
+ const ScanProperties& properties,
+ const ScanImageCallback& callback) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FakeLorgnetteManagerClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_FAKE_LORGNETTE_MANAGER_CLIENT_H_
diff --git a/chromeos/dbus/lorgnette_manager_client.cc b/chromeos/dbus/lorgnette_manager_client.cc
new file mode 100644
index 0000000..629a60a
--- /dev/null
+++ b/chromeos/dbus/lorgnette_manager_client.cc
@@ -0,0 +1,201 @@
+// Copyright 2014 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/lorgnette_manager_client.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/location.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/platform_file.h"
+#include "base/threading/worker_pool.h"
+#include "dbus/bus.h"
+#include "dbus/message.h"
+#include "dbus/object_path.h"
+#include "dbus/object_proxy.h"
+#include "net/base/file_stream.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+
+namespace chromeos {
+
+// The LorgnetteManagerClient implementation used in production.
+class LorgnetteManagerClientImpl : public LorgnetteManagerClient {
+ public:
+ LorgnetteManagerClientImpl() :
+ lorgnette_daemon_proxy_(NULL), weak_ptr_factory_(this) {}
+
+ virtual ~LorgnetteManagerClientImpl() {}
+
+ virtual void ListScanners(const ListScannersCallback& callback) OVERRIDE {
+ dbus::MethodCall method_call(lorgnette::kManagerServiceInterface,
+ lorgnette::kListScannersMethod);
+ lorgnette_daemon_proxy_->CallMethod(
+ &method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&LorgnetteManagerClientImpl::OnListScanners,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback));
+ }
+
+ // LorgnetteManagerClient override.
+ virtual void ScanImage(std::string device_name,
+ base::PlatformFile file,
+ const ScanProperties& properties,
+ const ScanImageCallback& callback) OVERRIDE {
+ dbus::FileDescriptor* file_descriptor = new dbus::FileDescriptor();
+ file_descriptor->PutValue(file);
+ // Punt descriptor validity check to a worker thread; on return we'll
+ // issue the D-Bus request to stop tracing and collect results.
+ base::WorkerPool::PostTaskAndReply(
+ FROM_HERE,
+ base::Bind(&LorgnetteManagerClientImpl::CheckValidity,
+ file_descriptor),
+ base::Bind(&LorgnetteManagerClientImpl::OnCheckValidityScanImage,
+ weak_ptr_factory_.GetWeakPtr(),
+ base::Owned(file_descriptor),
+ device_name,
+ properties,
+ callback),
+ false);
+ }
+
+ protected:
+ virtual void Init(dbus::Bus* bus) OVERRIDE {
+ lorgnette_daemon_proxy_ =
+ bus->GetObjectProxy(lorgnette::kManagerServiceName,
+ dbus::ObjectPath(lorgnette::kManagerServicePath));
+ }
+
+ private:
+ // Called when ListScanners completes.
+ void OnListScanners(const ListScannersCallback& callback,
+ dbus::Response* response) {
+ ScannerTable scanners;
+ dbus::MessageReader table_reader(NULL);
+ if (!response || !dbus::MessageReader(response).PopArray(&table_reader)) {
+ callback.Run(false, scanners);
+ return;
+ }
+
+ bool decode_failure = false;
+ while (table_reader.HasMoreData()) {
+ std::string device_name;
+ dbus::MessageReader device_entry_reader(NULL);
+ dbus::MessageReader device_element_reader(NULL);
+ if (!table_reader.PopDictEntry(&device_entry_reader) ||
+ !device_entry_reader.PopString(&device_name) ||
+ !device_entry_reader.PopArray(&device_element_reader)) {
+ decode_failure = true;
+ break;
+ }
+
+ ScannerTableEntry scanner_entry;
+ while (device_element_reader.HasMoreData()) {
+ dbus::MessageReader device_attribute_reader(NULL);
+ std::string attribute;
+ std::string value;
+ if (!device_element_reader.PopDictEntry(&device_attribute_reader) ||
+ !device_attribute_reader.PopString(&attribute) ||
+ !device_attribute_reader.PopString(&value)) {
+ decode_failure = true;
+ break;
+ }
+ scanner_entry[attribute] = value;
+ }
+
+ if (decode_failure)
+ break;
+
+ scanners[device_name] = scanner_entry;
+ }
+
+ if (decode_failure) {
+ LOG(ERROR) << "Failed to decode response from ListScanners";
+ callback.Run(false, scanners);
+ } else {
+ callback.Run(true, scanners);
+ }
+ }
+
+ // Called to check descriptor validity on a thread where i/o is permitted.
+ static void CheckValidity(dbus::FileDescriptor* file_descriptor) {
+ file_descriptor->CheckValidity();
+ }
+
+ // Called when a CheckValidity response is received.
+ void OnCheckValidityScanImage(
+ dbus::FileDescriptor* file_descriptor,
+ std::string device_name,
+ const ScanProperties& properties,
+ const ScanImageCallback& callback) {
+ if (!file_descriptor->is_valid()) {
+ LOG(ERROR) << "Failed to scan image: file descriptor is invalid";
+ callback.Run(false);
+ return;
+ }
+ // Issue the dbus request to scan an image.
+ dbus::MethodCall method_call(
+ lorgnette::kManagerServiceInterface,
+ lorgnette::kScanImageMethod);
+ dbus::MessageWriter writer(&method_call);
+ writer.AppendString(device_name);
+ writer.AppendFileDescriptor(*file_descriptor);
+
+ dbus::MessageWriter option_writer(NULL);
+ dbus::MessageWriter element_writer(NULL);
+ writer.OpenArray("{sv}", &option_writer);
+ if (!properties.mode.empty()) {
+ option_writer.OpenDictEntry(&element_writer);
+ element_writer.AppendString(lorgnette::kScanPropertyMode);
+ element_writer.AppendVariantOfString(properties.mode);
+ option_writer.CloseContainer(&element_writer);
+ }
+ if (properties.resolution_dpi) {
+ option_writer.OpenDictEntry(&element_writer);
+ element_writer.AppendString(lorgnette::kScanPropertyResolution);
+ element_writer.AppendVariantOfUint32(properties.resolution_dpi);
+ option_writer.CloseContainer(&element_writer);
+ }
+ writer.CloseContainer(&option_writer);
+
+ lorgnette_daemon_proxy_->CallMethod(
+ &method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&LorgnetteManagerClientImpl::OnScanImageComplete,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback));
+ }
+
+ // Called when a response for ScanImage() is received.
+ void OnScanImageComplete(const ScanImageCallback& callback,
+ dbus::Response* response) {
+ if (!response) {
+ LOG(ERROR) << "Failed to scan image";
+ callback.Run(false);
+ return;
+ }
+ callback.Run(true);
+ }
+
+ dbus::ObjectProxy* lorgnette_daemon_proxy_;
+ base::WeakPtrFactory<LorgnetteManagerClientImpl> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(LorgnetteManagerClientImpl);
+};
+
+LorgnetteManagerClient::LorgnetteManagerClient() {
+}
+
+LorgnetteManagerClient::~LorgnetteManagerClient() {
+}
+
+// static
+LorgnetteManagerClient* LorgnetteManagerClient::Create() {
+ return new LorgnetteManagerClientImpl();
+}
+
+} // namespace chromeos
diff --git a/chromeos/dbus/lorgnette_manager_client.h b/chromeos/dbus/lorgnette_manager_client.h
new file mode 100644
index 0000000..2f3103e
--- /dev/null
+++ b/chromeos/dbus/lorgnette_manager_client.h
@@ -0,0 +1,68 @@
+// Copyright 2014 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_LORGNETTE_MANAGER_CLIENT_H_
+#define CHROMEOS_DBUS_LORGNETTE_MANAGER_CLIENT_H_
+
+#include <map>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/platform_file.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client.h"
+
+namespace chromeos {
+
+// LorgnetteManagerClient is used to communicate with the lorgnette
+// document scanning daemon.
+class CHROMEOS_EXPORT LorgnetteManagerClient : public DBusClient {
+ public:
+ // The property information for each scanner retured by ListScanners.
+ typedef std::map<std::string, std::string> ScannerTableEntry;
+ typedef std::map<std::string, ScannerTableEntry> ScannerTable;
+
+ // Callback type for ListScanners(). Returns a map which contains
+ // a ScannerTableEntry for each available scanner.
+ typedef base::Callback<void(
+ bool succeeded, const ScannerTable&)> ListScannersCallback;
+
+ // Called once ScanImage() is complete. Takes one parameter:
+ // - succeeded: was the scan completed successfully.
+ typedef base::Callback<void(bool succeeded)> ScanImageCallback;
+
+ // Attributes provided to a scan request.
+ struct ScanProperties {
+ ScanProperties() : resolution_dpi(0) {}
+ std::string mode; // Can be "Color", "Gray", or "Lineart".
+ int resolution_dpi;
+ };
+
+ virtual ~LorgnetteManagerClient();
+
+ // Gets a list of scanners from the lorgnette manager.
+ virtual void ListScanners(const ListScannersCallback& callback) = 0;
+
+ // Request a scanned image and calls |callback| when completed.
+ // Image data will be stored in the .png format.
+ virtual void ScanImage(std::string device_name,
+ base::PlatformFile file,
+ const ScanProperties& properties,
+ const ScanImageCallback& callback) = 0;
+
+ // Factory function, creates a new instance and returns ownership.
+ // For normal usage, access the singleton via DBusThreadManager::Get().
+ static LorgnetteManagerClient* Create();
+
+ protected:
+ // Create() should be used instead.
+ LorgnetteManagerClient();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(LorgnetteManagerClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_LORGNETTE_MANAGER_CLIENT_H_