| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index a7d25020b4dfc937ce05a13394ce1c5463250de8..cc25047179fdb7ca43ece0e0e0d8497929d995aa 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -139,6 +139,29 @@ namespace {
|
|
|
| typedef std::map<std::string, ui::TextInputMode> TextInputModeMap;
|
|
|
| +class WebWidgetLockTarget : public content::MouseLockDispatcher::LockTarget {
|
| + public:
|
| + explicit WebWidgetLockTarget(blink::WebWidget* webwidget)
|
| + : webwidget_(webwidget) {}
|
| +
|
| + void OnLockMouseACK(bool succeeded) override {
|
| + if (succeeded)
|
| + webwidget_->didAcquirePointerLock();
|
| + else
|
| + webwidget_->didNotAcquirePointerLock();
|
| + }
|
| +
|
| + void OnMouseLockLost() override { webwidget_->didLosePointerLock(); }
|
| +
|
| + bool HandleMouseLockedInputEvent(const blink::WebMouseEvent& event) override {
|
| + // The WebWidget handles mouse lock in Blink's handleInputEvent().
|
| + return false;
|
| + }
|
| +
|
| + private:
|
| + blink::WebWidget* webwidget_;
|
| +};
|
| +
|
| class TextInputModeMapSingleton {
|
| public:
|
| static TextInputModeMapSingleton* GetInstance() {
|
| @@ -373,6 +396,8 @@ bool RenderWidget::DoInit(int32_t opener_id,
|
| opener_id_ = opener_id;
|
|
|
| webwidget_ = web_widget;
|
| + webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
|
| + mouse_lock_dispatcher_.reset(new RenderWidgetMouseLockDispatcher(this));
|
|
|
| bool result = true;
|
| if (create_widget_message)
|
| @@ -449,6 +474,10 @@ void RenderWidget::OnShowHostContextMenu(ContextMenuParams* params) {
|
| }
|
|
|
| bool RenderWidget::OnMessageReceived(const IPC::Message& message) {
|
| + if (mouse_lock_dispatcher_ &&
|
| + mouse_lock_dispatcher_->OnMessageReceived(message))
|
| + return true;
|
| +
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(RenderWidget, message)
|
| IPC_MESSAGE_HANDLER(InputMsg_HandleInputEvent, OnHandleInputEvent)
|
| @@ -2096,4 +2125,17 @@ float RenderWidget::GetOriginalDeviceScaleFactor() const {
|
| device_scale_factor_;
|
| }
|
|
|
| +bool RenderWidget::requestPointerLock() {
|
| + return mouse_lock_dispatcher_->LockMouse(webwidget_mouse_lock_target_.get());
|
| +}
|
| +
|
| +void RenderWidget::requestPointerUnlock() {
|
| + mouse_lock_dispatcher_->UnlockMouse(webwidget_mouse_lock_target_.get());
|
| +}
|
| +
|
| +bool RenderWidget::isPointerLocked() {
|
| + return mouse_lock_dispatcher_->IsMouseLockedTo(
|
| + webwidget_mouse_lock_target_.get());
|
| +}
|
| +
|
| } // namespace content
|
|
|