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

Unified Diff: components/arc/arc_bridge_service_impl.cc

Issue 1534423002: Revert of arc-bridge: Move most methods to Mojo interfaces (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « components/arc/arc_bridge_service_impl.h ('k') | components/arc/arc_bridge_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/arc/arc_bridge_service_impl.cc
diff --git a/components/arc/arc_bridge_service_impl.cc b/components/arc/arc_bridge_service_impl.cc
index 2572579948830a73169b6681a7c8deab24be05df..1ca85afc2eb8a14e1dd676a7013619d8e0f2222e 100644
--- a/components/arc/arc_bridge_service_impl.cc
+++ b/components/arc/arc_bridge_service_impl.cc
@@ -19,6 +19,28 @@
#include "chromeos/dbus/dbus_method_call_status.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h"
+#include "mojo/public/cpp/bindings/array.h"
+#include "third_party/mojo/src/mojo/edk/embedder/embedder.h"
+
+namespace mojo {
+
+template <>
+struct TypeConverter<arc::AppInfo, arc::AppInfoPtr> {
+ static arc::AppInfo Convert(const arc::AppInfoPtr& app_info_ptr) {
+ return *app_info_ptr;
+ }
+};
+
+template <>
+struct TypeConverter<arc::RunningAppProcessInfo,
+ arc::RunningAppProcessInfoPtr> {
+ static arc::RunningAppProcessInfo Convert(
+ const arc::RunningAppProcessInfoPtr& process_ptr) {
+ return *process_ptr;
+ }
+};
+
+} // namespace mojo
namespace arc {
@@ -78,6 +100,174 @@
bootstrap_->Stop();
}
+bool ArcBridgeServiceImpl::RegisterInputDevice(const std::string& name,
+ const std::string& device_type,
+ base::ScopedFD fd) {
+ DCHECK(CalledOnValidThread());
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called RegisterInputDevice when the service is not ready";
+ return false;
+ }
+ MojoHandle wrapped_handle;
+ MojoResult wrap_result = mojo::embedder::CreatePlatformHandleWrapper(
+ mojo::embedder::ScopedPlatformHandle(
+ mojo::embedder::PlatformHandle(fd.release())),
+ &wrapped_handle);
+ if (wrap_result != MOJO_RESULT_OK) {
+ LOG(WARNING) << "Pipe failed to wrap handles. Closing: " << wrap_result;
+ return false;
+ }
+ instance_ptr_->RegisterInputDevice(
+ name, device_type, mojo::ScopedHandle(mojo::Handle(wrapped_handle)));
+ return true;
+}
+
+bool ArcBridgeServiceImpl::SendBroadcast(const std::string& action,
+ const std::string& package,
+ const std::string& clazz,
+ const base::DictionaryValue& extras) {
+ DCHECK(CalledOnValidThread());
+ if (action.empty() || package.empty() || clazz.empty()) {
+ LOG(ERROR) << "SendBroadcast failed: Invalid parameter";
+ return false;
+ }
+ std::string extras_json;
+ bool write_success = base::JSONWriter::Write(extras, &extras_json);
+ DCHECK(write_success);
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called SendBroadcast when the service is not ready";
+ return false;
+ }
+ instance_ptr_->SendBroadcast(action, package, clazz, extras_json);
+ return true;
+}
+
+bool ArcBridgeServiceImpl::SendNotificationEventToAndroid(
+ const std::string& key, ArcNotificationEvent event) {
+ DCHECK(CalledOnValidThread());
+ if (key.empty()) {
+ LOG(ERROR) << "SendNotificationToAndroid failed: Wrong parameter";
+ return false;
+ }
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called SendNotificationEventToAndroid when the service is"
+ << "not ready";
+ return false;
+ }
+ instance_ptr_->SendNotificationEventToAndroid(key, event);
+ return true;
+}
+
+bool ArcBridgeServiceImpl::RefreshAppList() {
+ DCHECK(CalledOnValidThread());
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called RefreshAppList when the service is not ready";
+ return false;
+ }
+ instance_ptr_->RefreshAppList();
+ return true;
+}
+
+bool ArcBridgeServiceImpl::LaunchApp(const std::string& package,
+ const std::string& activity) {
+ DCHECK(CalledOnValidThread());
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called LaunchApp when the service is not ready";
+ return false;
+ }
+ instance_ptr_->LaunchApp(package, activity);
+ return true;
+}
+
+bool ArcBridgeServiceImpl::RequestAppIcon(const std::string& package,
+ const std::string& activity,
+ ScaleFactor scale_factor) {
+ DCHECK(CalledOnValidThread());
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called RequestAppIcon when the service is not ready";
+ return false;
+ }
+ instance_ptr_->RequestAppIcon(package, activity, scale_factor);
+ return true;
+}
+
+bool ArcBridgeServiceImpl::RequestProcessList() {
+ DCHECK(CalledOnValidThread());
+ if (state() != State::READY) {
+ LOG_IF(ERROR, base::SysInfo::IsRunningOnChromeOS())
+ << "Called RequestProcessList when the service is not ready";
+ return false;
+ }
+ instance_ptr_->RequestProcessList();
+ return true;
+}
+
+void ArcBridgeServiceImpl::OnInstanceBootPhase(InstanceBootPhase phase) {
+ DCHECK(CalledOnValidThread());
+ // The state can be CONNECTED the first time this is called, and will then
+ // transition to READY after BRIDGE_READY has been passed.
+ if (state() != State::CONNECTED && state() != State::READY) {
+ VLOG(1) << "StopInstance() called while connecting";
+ return;
+ }
+ if (phase == INSTANCE_BOOT_PHASE_BRIDGE_READY) {
+ SetState(State::READY);
+ }
+ FOR_EACH_OBSERVER(Observer, observer_list(), OnInstanceBootPhase(phase));
+}
+
+void ArcBridgeServiceImpl::OnNotificationPosted(ArcNotificationDataPtr data) {
+ DCHECK(CalledOnValidThread());
+ FOR_EACH_OBSERVER(NotificationObserver, notification_observer_list(),
+ OnNotificationPostedFromAndroid(*data.get()));
+}
+
+void ArcBridgeServiceImpl::OnNotificationRemoved(const mojo::String& key) {
+ DCHECK(CalledOnValidThread());
+ FOR_EACH_OBSERVER(NotificationObserver, notification_observer_list(),
+ OnNotificationRemovedFromAndroid(key));
+}
+
+void ArcBridgeServiceImpl::OnAppListRefreshed(
+ mojo::Array<arc::AppInfoPtr> apps_ptr) {
+ DCHECK(CalledOnValidThread());
+ std::vector<arc::AppInfo> apps(apps_ptr.To<std::vector<arc::AppInfo>>());
+ FOR_EACH_OBSERVER(AppObserver, app_observer_list(), OnAppListRefreshed(apps));
+}
+
+void ArcBridgeServiceImpl::OnAppIcon(const mojo::String& package,
+ const mojo::String& activity,
+ ScaleFactor scale_factor,
+ mojo::Array<uint8_t> icon_png_data) {
+ DCHECK(CalledOnValidThread());
+ FOR_EACH_OBSERVER(
+ AppObserver, app_observer_list(),
+ OnAppIcon(package, activity, scale_factor, icon_png_data.storage()));
+}
+
+void ArcBridgeServiceImpl::OnUpdateProcessList(
+ mojo::Array<RunningAppProcessInfoPtr> processes_ptr) {
+ DCHECK(CalledOnValidThread());
+ std::vector<RunningAppProcessInfo> processes(
+ processes_ptr.To<std::vector<RunningAppProcessInfo>>());
+ FOR_EACH_OBSERVER(
+ ProcessObserver,
+ process_observer_list(),
+ OnUpdateProcessList(processes));
+}
+
+void ArcBridgeServiceImpl::OnAcquireDisplayWakeLock(DisplayWakeLockType type) {
+ DCHECK(CalledOnValidThread());
+ // TODO(ejcaruso): Implement.
+ VLOG(1) << "OnAcquireDisplayWakeLock";
+}
+
+void ArcBridgeServiceImpl::OnReleaseDisplayWakeLock(DisplayWakeLockType type) {
+ DCHECK(CalledOnValidThread());
+ // TODO(ejcaruso): Implement.
+ VLOG(1) << "OnReleaseDisplayWakeLock";
+}
+
void ArcBridgeServiceImpl::OnArcAvailable(bool arc_available) {
DCHECK(CalledOnValidThread());
if (available() == arc_available)
@@ -100,7 +290,7 @@
binding_.Bind(GetProxy(&host));
instance_ptr_->Init(std::move(host));
- SetState(State::READY);
+ SetState(State::CONNECTED);
}
void ArcBridgeServiceImpl::OnStopped() {
« no previous file with comments | « components/arc/arc_bridge_service_impl.h ('k') | components/arc/arc_bridge_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698