Chromium Code Reviews| Index: chromeos/arc/bridge/arc_bridge_service.cc |
| diff --git a/chromeos/arc/bridge/arc_bridge_service.cc b/chromeos/arc/bridge/arc_bridge_service.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..108156936f2bdfe7fdda98ccd7719a17fd17ba7f |
| --- /dev/null |
| +++ b/chromeos/arc/bridge/arc_bridge_service.cc |
| @@ -0,0 +1,85 @@ |
| +// Copyright 2015 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/arc/bridge/arc_bridge_service.h" |
| + |
| +#include "base/files/file_util.h" |
| +#include "chrome/browser/profiles/profile.h" |
|
oshima
2015/10/23 20:29:45
ditto
Luis Héctor Chávez
2015/10/27 00:37:47
Done.
|
| +#include "chromeos/dbus/arc_instance_client.h" |
| +#include "chromeos/dbus/dbus_method_call_status.h" |
| +#include "chromeos/dbus/dbus_thread_manager.h" |
| + |
| +namespace { |
| + |
| +const char kArcBridgeSocketPath[] = "/home/chronos/ArcBridge/bridge.sock"; |
|
satorux1
2015/10/23 06:10:58
should this be shared between here and the chromeo
Luis Héctor Chávez
2015/10/27 00:37:47
There will be no sharing of this constant. It will
|
| + |
| +} // namespace |
| + |
| +namespace arc { |
| + |
| +ArcBridgeService::ArcBridgeService(Profile* profile) |
| + : BridgeHostEndpoint(), |
| + enabled_(true), |
| + running_(false), |
| + profile_(profile) {} |
| + |
| +ArcBridgeService::~ArcBridgeService() {} |
| + |
| +void ArcBridgeService::HandleStartup() { |
| + if (!IsEnabled()) |
| + return; |
| + if (!SocketConnect(kArcBridgeSocketPath)) { |
| + LOG(ERROR) << "ARC++ unable to connect to the socket"; |
| + return; |
| + } |
| + connected_ = true; |
| + // This will fail if the ArcInstanceService is not running on Chrome OS. |
| + chromeos::DBusThreadManager::Get()->GetArcInstanceClient()->StartInstance( |
|
satorux1
2015/10/23 06:10:58
Is the D-Bus client code checked-in? I'm reviewing
Luis Héctor Chávez
2015/10/27 00:37:47
Not yet, but here's its review: https://codereview
|
| + kArcBridgeSocketPath, |
| + base::Bind(&ArcBridgeService::OnInstanceStarted, base::Unretained(this))); |
|
satorux1
2015/10/23 06:10:58
Is it safe to base::Unretained() here? Please docu
Luis Héctor Chávez
2015/10/27 00:37:47
Done.
|
| +} |
| + |
| +void ArcBridgeService::Shutdown() { |
| + if (!connected_) |
| + return; |
| + channel_->Close(); |
|
satorux1
2015/10/23 06:10:58
channel_ is defined in the parent class right? May
Luis Héctor Chávez
2015/10/27 00:37:47
Done.
|
| + base::DeleteFile(base::FilePath(kArcBridgeSocketPath), false); |
| + if (!running_) |
| + return; |
| + chromeos::DBusThreadManager::Get()->GetArcInstanceClient()->StopInstance( |
| + base::Bind(&ArcBridgeService::OnInstanceStopped, base::Unretained(this))); |
|
satorux1
2015/10/23 06:10:58
ditto. add a comment about base::Unretained()?
Luis Héctor Chávez
2015/10/27 00:37:47
Done.
|
| +} |
| + |
| +void ArcBridgeService::AddObserver(Observer* observer) { |
| + observer_list_.AddObserver(observer); |
| +} |
| + |
| +void ArcBridgeService::RemoveObserver(Observer* observer) { |
| + observer_list_.RemoveObserver(observer); |
| +} |
| + |
| +void ArcBridgeService::OnInstanceStarted(chromeos::DBusMethodCallStatus status, |
| + bool success) { |
| + running_ = success; |
| + if (!running_) { |
| + LOG(ERROR) << "ARC++ instance unable to start. Shutting down the bridge"; |
| + Shutdown(); |
| + } |
| + FOR_EACH_OBSERVER(Observer, observer_list_, OnInstanceStarted(success)); |
| +} |
| + |
| +void ArcBridgeService::OnInstanceStopped( |
| + chromeos::DBusMethodCallStatus status) { |
| + if (running_) |
| + FOR_EACH_OBSERVER(Observer, observer_list_, OnInstanceStopped()); |
| + running_ = false; |
| +} |
| + |
| +void ArcBridgeService::OnInstanceReady() { |
| + FOR_EACH_OBSERVER(Observer, observer_list_, OnInstanceReady()); |
| +} |
| + |
| +void ArcBridgeService::OnPong() {} |
| + |
| +} // namespace arc |