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

Unified Diff: device/wake_lock/wake_lock_service_context.cc

Issue 2734943003: Device Service: Decouple Wake Lock from //content (Closed)
Patch Set: Rebase Created 3 years, 9 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: device/wake_lock/wake_lock_service_context.cc
diff --git a/device/wake_lock/wake_lock_service_context.cc b/device/wake_lock/wake_lock_service_context.cc
index d30f8cdaadd5f8a7224a237932bfb02bc12e1467..b56680f3806510ef241cc5a6ef5cbf12f0ddc495 100644
--- a/device/wake_lock/wake_lock_service_context.cc
+++ b/device/wake_lock/wake_lock_service_context.cc
@@ -11,26 +11,36 @@
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
#include "device/power_save_blocker/power_save_blocker.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
namespace device {
WakeLockServiceContext::WakeLockServiceContext(
+ mojom::WakeLockContextRequest request,
+ int context_id,
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
- base::Callback<gfx::NativeView()> native_view_getter)
+ const WakeLockContextCallback& native_view_getter)
: main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
- file_task_runner_(file_task_runner),
+ file_task_runner_(std::move(file_task_runner)),
num_lock_requests_(0),
+#if defined(OS_ANDROID)
+ context_id_(context_id),
native_view_getter_(native_view_getter),
- weak_factory_(this) {}
+#endif
+ context_binding_(this, std::move(request)),
+ context_binding_encountered_error_(false) {
+ context_binding_.set_connection_error_handler(base::Bind(
+ &WakeLockServiceContext::OnContextBindingError, base::Unretained(this)));
+ wake_lock_bindings_.set_connection_error_handler(
+ base::Bind(&WakeLockServiceContext::DestroyIfNoLongerNeeded,
+ base::Unretained(this)));
+}
WakeLockServiceContext::~WakeLockServiceContext() {}
-void WakeLockServiceContext::CreateService(
+void WakeLockServiceContext::GetWakeLock(
mojo::InterfaceRequest<mojom::WakeLockService> request) {
- mojo::MakeStrongBinding(
- base::MakeUnique<WakeLockServiceImpl>(weak_factory_.GetWeakPtr()),
- std::move(request));
+ wake_lock_bindings_.AddBinding(base::MakeUnique<WakeLockServiceImpl>(this),
+ std::move(request));
}
void WakeLockServiceContext::RequestWakeLock() {
@@ -45,8 +55,9 @@ void WakeLockServiceContext::CancelWakeLock() {
UpdateWakeLock();
}
-bool WakeLockServiceContext::HasWakeLockForTests() const {
- return !!wake_lock_;
+void WakeLockServiceContext::HasWakeLockForTests(
+ const HasWakeLockForTestsCallback& callback) {
+ callback.Run(!!wake_lock_);
}
void WakeLockServiceContext::CreateWakeLock() {
@@ -57,7 +68,7 @@ void WakeLockServiceContext::CreateWakeLock() {
main_task_runner_, file_task_runner_));
#if defined(OS_ANDROID)
- gfx::NativeView native_view = native_view_getter_.Run();
+ gfx::NativeView native_view = native_view_getter_.Run(context_id_);
if (native_view) {
wake_lock_.get()->InitDisplaySleepBlocker(native_view);
}
@@ -80,4 +91,18 @@ void WakeLockServiceContext::UpdateWakeLock() {
}
}
+void WakeLockServiceContext::OnContextBindingError() {
+ context_binding_encountered_error_ = true;
+ DestroyIfNoLongerNeeded();
+}
+
+void WakeLockServiceContext::DestroyIfNoLongerNeeded() {
+ if (context_binding_encountered_error_ && wake_lock_bindings_.empty()) {
+ // Delete this instance once there are no more live connections to it.
+ // However, ensure that this instance stays alive throughout the destructor
+ // of a WakeLockServiceImpl instance that might be triggering this callback.
+ base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
+ }
+}
+
} // namespace device
« no previous file with comments | « device/wake_lock/wake_lock_service_context.h ('k') | device/wake_lock/wake_lock_service_context_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698