| Index: content/browser/keyboard_lock/keyboard_lock_service_impl.cc
|
| diff --git a/content/browser/keyboard_lock/keyboard_lock_service_impl.cc b/content/browser/keyboard_lock/keyboard_lock_service_impl.cc
|
| index 585c90af2b59186ca2275f2a81ce290abbf05f18..d29e4ec708f49ec0d246da2a13876ba657ada472 100644
|
| --- a/content/browser/keyboard_lock/keyboard_lock_service_impl.cc
|
| +++ b/content/browser/keyboard_lock/keyboard_lock_service_impl.cc
|
| @@ -7,32 +7,60 @@
|
| #include <memory>
|
| #include <utility>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/location.h"
|
| +#include "base/logging.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "components/keyboard_lock/keyboard_lock_host.h"
|
| +#include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/render_frame_host.h"
|
|
|
| namespace content {
|
|
|
| -KeyboardLockServiceImpl::KeyboardLockServiceImpl() = default;
|
| +KeyboardLockServiceImpl::KeyboardLockServiceImpl(
|
| + RenderFrameHost* render_frame_host)
|
| + : web_contents_(WebContents::FromRenderFrameHost(render_frame_host)) {
|
| + DCHECK(web_contents_);
|
| +}
|
|
|
| KeyboardLockServiceImpl::~KeyboardLockServiceImpl() = default;
|
|
|
| // static
|
| void KeyboardLockServiceImpl::CreateMojoService(
|
| + RenderFrameHost* render_frame_host,
|
| blink::mojom::KeyboardLockServiceRequest request) {
|
| mojo::MakeStrongBinding(
|
| - base::MakeUnique<KeyboardLockServiceImpl>(),
|
| + base::MakeUnique<KeyboardLockServiceImpl>(render_frame_host),
|
| std::move(request));
|
| }
|
|
|
| void KeyboardLockServiceImpl::RequestKeyboardLock(
|
| const std::vector<std::string>& key_codes,
|
| RequestKeyboardLockCallback callback) {
|
| - // TODO(zijiehe): Implementation required.
|
| - std::move(callback).Run(blink::mojom::KeyboardLockRequestResult::SUCCESS);
|
| + keyboard_lock::KeyboardLockHost* host =
|
| + keyboard_lock::KeyboardLockHost::Find(web_contents_);
|
| + if (!host) {
|
| + // This should not happen in production.
|
| + std::move(callback).Run(blink::mojom::KeyboardLockRequestResult::SUCCESS);
|
| + return;
|
| + }
|
| +
|
| + host->SetReservedKeyCodes(web_contents_, key_codes,
|
| + base::Bind([](RequestKeyboardLockCallback&& callback, bool result) {
|
| + std::move(callback).Run(
|
| + blink::mojom::KeyboardLockRequestResult::SUCCESS);
|
| + },
|
| + base::Passed(std::move(callback))));
|
| }
|
|
|
| void KeyboardLockServiceImpl::CancelKeyboardLock() {
|
| - // TODO(zijiehe): Implementation required.
|
| + keyboard_lock::KeyboardLockHost* host =
|
| + keyboard_lock::KeyboardLockHost::Find(web_contents_);
|
| + if (!host) {
|
| + // This should not happen in production.
|
| + return;
|
| + }
|
| + host->ClearReservedKeys(web_contents_, base::Callback<void(bool)>());
|
| }
|
|
|
| } // namespace content
|
|
|