Commit 9d46e6e6 authored by Joe Downing's avatar Joe Downing Committed by Commit Bot

Destroy KeyboardLockServiceImpl instance when RenderFrameHost goes away

This CL updates KeyboardLockServiceImpl to release its mojo binding if
the RenderFrameHost instance it is linked to is destroyed.

Bug: 888678
Change-Id: Icea5fe1a5c76df4d71fa4e78c423e49828664637
Reviewed-on: https://chromium-review.googlesource.com/1246290
Commit-Queue: Joe Downing <joedow@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594534}
parent 77c360d3
......@@ -38,20 +38,22 @@ void LogKeyboardLockMethodCalled(KeyboardLockMethods method) {
} // namespace
KeyboardLockServiceImpl::KeyboardLockServiceImpl(
RenderFrameHost* render_frame_host)
: render_frame_host_(static_cast<RenderFrameHostImpl*>(render_frame_host)) {
RenderFrameHost* render_frame_host,
blink::mojom::KeyboardLockServiceRequest request)
: FrameServiceBase(render_frame_host, std::move(request)),
render_frame_host_(static_cast<RenderFrameHostImpl*>(render_frame_host)) {
DCHECK(render_frame_host_);
}
KeyboardLockServiceImpl::~KeyboardLockServiceImpl() = default;
// static
void KeyboardLockServiceImpl::CreateMojoService(
RenderFrameHost* render_frame_host,
blink::mojom::KeyboardLockServiceRequest request) {
mojo::MakeStrongBinding(
std::make_unique<KeyboardLockServiceImpl>(render_frame_host),
std::move(request));
DCHECK(render_frame_host);
// The object is bound to the lifetime of |render_frame_host| and the mojo
// connection. See FrameServiceBase for details.
new KeyboardLockServiceImpl(render_frame_host, std::move(request));
}
void KeyboardLockServiceImpl::RequestKeyboardLock(
......@@ -131,4 +133,6 @@ void KeyboardLockServiceImpl::GetKeyboardLayoutMap(
std::move(callback).Run(std::move(response));
}
KeyboardLockServiceImpl::~KeyboardLockServiceImpl() = default;
} // namespace content
......@@ -9,6 +9,7 @@
#include <vector>
#include "content/common/content_export.h"
#include "content/public/browser/frame_service_base.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "third_party/blink/public/platform/modules/keyboard_lock/keyboard_lock.mojom.h"
......@@ -17,11 +18,11 @@ namespace content {
class RenderFrameHost;
class RenderFrameHostImpl;
class CONTENT_EXPORT KeyboardLockServiceImpl
: public blink::mojom::KeyboardLockService {
class CONTENT_EXPORT KeyboardLockServiceImpl final
: public FrameServiceBase<blink::mojom::KeyboardLockService> {
public:
explicit KeyboardLockServiceImpl(RenderFrameHost* render_frame_host);
~KeyboardLockServiceImpl() override;
KeyboardLockServiceImpl(RenderFrameHost* render_frame_host,
blink::mojom::KeyboardLockServiceRequest request);
static void CreateMojoService(
RenderFrameHost* render_frame_host,
......@@ -34,6 +35,9 @@ class CONTENT_EXPORT KeyboardLockServiceImpl
void GetKeyboardLayoutMap(GetKeyboardLayoutMapCallback callback) override;
private:
// |this| can only be destroyed by FrameServiceBase.
~KeyboardLockServiceImpl() override;
RenderFrameHostImpl* const render_frame_host_;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment