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 |