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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 8970016: refactoring mouse lock to support pepper and WebKit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated webkit API names. Created 8 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h" 55 #include "content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h"
56 #include "content/renderer/idle_user_detector.h" 56 #include "content/renderer/idle_user_detector.h"
57 #include "content/renderer/web_intents_host.h" 57 #include "content/renderer/web_intents_host.h"
58 #include "content/renderer/java/java_bridge_dispatcher.h" 58 #include "content/renderer/java/java_bridge_dispatcher.h"
59 #include "content/renderer/load_progress_tracker.h" 59 #include "content/renderer/load_progress_tracker.h"
60 #include "content/renderer/media/audio_message_filter.h" 60 #include "content/renderer/media/audio_message_filter.h"
61 #include "content/renderer/media/audio_renderer_impl.h" 61 #include "content/renderer/media/audio_renderer_impl.h"
62 #include "content/renderer/media/media_stream_impl.h" 62 #include "content/renderer/media/media_stream_impl.h"
63 #include "content/renderer/media/render_media_log.h" 63 #include "content/renderer/media/render_media_log.h"
64 #include "content/renderer/mhtml_generator.h" 64 #include "content/renderer/mhtml_generator.h"
65 #include "content/renderer/mouse_lock_dispatcher.h"
65 #include "content/renderer/notification_provider.h" 66 #include "content/renderer/notification_provider.h"
66 #include "content/renderer/p2p/socket_dispatcher.h" 67 #include "content/renderer/p2p/socket_dispatcher.h"
67 #include "content/renderer/plugin_channel_host.h" 68 #include "content/renderer/plugin_channel_host.h"
68 #include "content/renderer/render_audiosourceprovider.h" 69 #include "content/renderer/render_audiosourceprovider.h"
69 #include "content/renderer/render_process.h" 70 #include "content/renderer/render_process.h"
70 #include "content/renderer/render_thread_impl.h" 71 #include "content/renderer/render_thread_impl.h"
71 #include "content/renderer/render_widget_fullscreen_pepper.h" 72 #include "content/renderer/render_widget_fullscreen_pepper.h"
72 #include "content/renderer/renderer_accessibility.h" 73 #include "content/renderer/renderer_accessibility.h"
73 #include "content/renderer/renderer_gpu_video_decoder_factories.h" 74 #include "content/renderer/renderer_gpu_video_decoder_factories.h"
74 #include "content/renderer/renderer_webapplicationcachehost_impl.h" 75 #include "content/renderer/renderer_webapplicationcachehost_impl.h"
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 cached_is_main_frame_pinned_to_right_(false), 355 cached_is_main_frame_pinned_to_right_(false),
355 cached_has_main_frame_horizontal_scrollbar_(false), 356 cached_has_main_frame_horizontal_scrollbar_(false),
356 cached_has_main_frame_vertical_scrollbar_(false), 357 cached_has_main_frame_vertical_scrollbar_(false),
357 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)), 358 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)),
358 geolocation_dispatcher_(NULL), 359 geolocation_dispatcher_(NULL),
359 speech_input_dispatcher_(NULL), 360 speech_input_dispatcher_(NULL),
360 device_orientation_dispatcher_(NULL), 361 device_orientation_dispatcher_(NULL),
361 p2p_socket_dispatcher_(NULL), 362 p2p_socket_dispatcher_(NULL),
362 devtools_agent_(NULL), 363 devtools_agent_(NULL),
363 renderer_accessibility_(NULL), 364 renderer_accessibility_(NULL),
365 mouse_lock_dispatcher_(NULL),
364 session_storage_namespace_id_(session_storage_namespace_id), 366 session_storage_namespace_id_(session_storage_namespace_id),
365 handling_select_range_(false), 367 handling_select_range_(false),
366 #if defined(OS_WIN) 368 #if defined(OS_WIN)
367 focused_plugin_id_(-1), 369 focused_plugin_id_(-1),
368 #endif 370 #endif
369 ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)) { 371 ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)) {
370 routing_id_ = routing_id; 372 routing_id_ = routing_id;
371 if (opener_id != MSG_ROUTING_NONE) 373 if (opener_id != MSG_ROUTING_NONE)
372 opener_id_ = opener_id; 374 opener_id_ = opener_id;
373 375
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 #endif 425 #endif
424 426
425 new MHTMLGenerator(this); 427 new MHTMLGenerator(this);
426 #if defined(OS_MACOSX) 428 #if defined(OS_MACOSX)
427 new TextInputClientObserver(this); 429 new TextInputClientObserver(this);
428 #endif // defined(OS_MACOSX) 430 #endif // defined(OS_MACOSX)
429 431
430 devtools_agent_ = new DevToolsAgent(this); 432 devtools_agent_ = new DevToolsAgent(this);
431 433
432 renderer_accessibility_ = new RendererAccessibility(this); 434 renderer_accessibility_ = new RendererAccessibility(this);
435 mouse_lock_dispatcher_ = new MouseLockDispatcher(this);
433 436
434 new IdleUserDetector(this); 437 new IdleUserDetector(this);
435 438
436 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 439 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
437 if (command_line.HasSwitch(switches::kEnableMediaStream)) { 440 if (command_line.HasSwitch(switches::kEnableMediaStream)) {
438 media_stream_impl_ = new MediaStreamImpl( 441 media_stream_impl_ = new MediaStreamImpl(
439 RenderThreadImpl::current()->video_capture_impl_manager()); 442 RenderThreadImpl::current()->video_capture_impl_manager());
440 } 443 }
441 444
442 content::GetContentClient()->renderer()->RenderViewCreated(this); 445 content::GetContentClient()->renderer()->RenderViewCreated(this);
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 const std::string& mime_type, 579 const std::string& mime_type,
577 webkit::WebPluginInfo* plugin_info, 580 webkit::WebPluginInfo* plugin_info,
578 std::string* actual_mime_type) { 581 std::string* actual_mime_type) {
579 bool found = false; 582 bool found = false;
580 Send(new ViewHostMsg_GetPluginInfo( 583 Send(new ViewHostMsg_GetPluginInfo(
581 routing_id_, url, page_url, mime_type, &found, plugin_info, 584 routing_id_, url, page_url, mime_type, &found, plugin_info,
582 actual_mime_type)); 585 actual_mime_type));
583 return found; 586 return found;
584 } 587 }
585 588
589 bool RenderViewImpl::PpapiLockMouse(webkit::ppapi::PluginInstance* pinstance) {
590 return mouse_lock_dispatcher_->LockMouse(NULL, pinstance);
591 }
592
593 void RenderViewImpl::PpapiUnlockMouse(
594 webkit::ppapi::PluginInstance* pinstance) {
595 mouse_lock_dispatcher_->UnlockMouse(NULL, pinstance);
596 }
597
598 bool RenderViewImpl::PpapiIsMouseLockedTo(
599 webkit::ppapi::PluginInstance* pinstance) {
600 return mouse_lock_dispatcher_->IsMouseLockedTo(pinstance);
601 }
602
586 bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { 603 bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
587 WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL; 604 WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL;
588 if (main_frame) 605 if (main_frame)
589 content::GetContentClient()->SetActiveURL(main_frame->document().url()); 606 content::GetContentClient()->SetActiveURL(main_frame->document().url());
590 607
591 ObserverListBase<RenderViewObserver>::Iterator it(observers_); 608 ObserverListBase<RenderViewObserver>::Iterator it(observers_);
592 RenderViewObserver* observer; 609 RenderViewObserver* observer;
593 while ((observer = it.GetNext()) != NULL) 610 while ((observer = it.GetNext()) != NULL)
594 if (observer->OnMessageReceived(message)) 611 if (observer->OnMessageReceived(message))
595 return true; 612 return true;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 // TODO(viettrungluu): Move to a separate message filter. 705 // TODO(viettrungluu): Move to a separate message filter.
689 #if defined(ENABLE_FLAPPER_HACKS) 706 #if defined(ENABLE_FLAPPER_HACKS)
690 IPC_MESSAGE_HANDLER(PepperMsg_ConnectTcpACK, OnConnectTcpACK) 707 IPC_MESSAGE_HANDLER(PepperMsg_ConnectTcpACK, OnConnectTcpACK)
691 #endif 708 #endif
692 #if defined(OS_MACOSX) 709 #if defined(OS_MACOSX)
693 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) 710 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize)
694 #endif 711 #endif
695 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune, 712 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune,
696 OnSetHistoryLengthAndPrune) 713 OnSetHistoryLengthAndPrune)
697 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 714 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
698 IPC_MESSAGE_HANDLER(ViewMsg_LockMouse_ACK, OnLockMouseACK)
699 IPC_MESSAGE_HANDLER(ViewMsg_MouseLockLost, OnMouseLockLost)
700 IPC_MESSAGE_HANDLER(JavaBridgeMsg_Init, OnJavaBridgeInit) 715 IPC_MESSAGE_HANDLER(JavaBridgeMsg_Init, OnJavaBridgeInit)
701 716
702 // Have the super handle all other messages. 717 // Have the super handle all other messages.
703 IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) 718 IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message))
704 IPC_END_MESSAGE_MAP() 719 IPC_END_MESSAGE_MAP()
705 720
706 if (!msg_is_ok) { 721 if (!msg_is_ok) {
707 // The message had a handler, but its deserialization failed. 722 // The message had a handler, but its deserialization failed.
708 // Kill the renderer to avoid potential spoofing attacks. 723 // Kill the renderer to avoid potential spoofing attacks.
709 CHECK(false) << "Unable to deserialize message in RenderViewImpl."; 724 CHECK(false) << "Unable to deserialize message in RenderViewImpl.";
(...skipping 1156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1866 1881
1867 bool RenderViewImpl::enterFullScreen() { 1882 bool RenderViewImpl::enterFullScreen() {
1868 Send(new ViewHostMsg_ToggleFullscreen(routing_id_, true)); 1883 Send(new ViewHostMsg_ToggleFullscreen(routing_id_, true));
1869 return true; 1884 return true;
1870 } 1885 }
1871 1886
1872 void RenderViewImpl::exitFullScreen() { 1887 void RenderViewImpl::exitFullScreen() {
1873 Send(new ViewHostMsg_ToggleFullscreen(routing_id_, false)); 1888 Send(new ViewHostMsg_ToggleFullscreen(routing_id_, false));
1874 } 1889 }
1875 1890
1891 bool RenderViewImpl::requestPointerLock() {
1892 return mouse_lock_dispatcher_->LockMouse(webwidget(), NULL);
1893 }
1894
1895 void RenderViewImpl::requestPointerUnlock() {
1896 mouse_lock_dispatcher_->UnlockMouse(webwidget(), NULL);
1897 }
1898
1899 bool RenderViewImpl::isPointerLocked() {
1900 return mouse_lock_dispatcher_->IsPointerLockedTo(webwidget());
1901 }
1902
1876 // WebKit::WebFrameClient ----------------------------------------------------- 1903 // WebKit::WebFrameClient -----------------------------------------------------
1877 1904
1878 WebPlugin* RenderViewImpl::createPlugin(WebFrame* frame, 1905 WebPlugin* RenderViewImpl::createPlugin(WebFrame* frame,
1879 const WebPluginParams& params) { 1906 const WebPluginParams& params) {
1880 WebPlugin* plugin = NULL; 1907 WebPlugin* plugin = NULL;
1881 if (content::GetContentClient()->renderer()->OverrideCreatePlugin( 1908 if (content::GetContentClient()->renderer()->OverrideCreatePlugin(
1882 this, frame, params, &plugin)) { 1909 this, frame, params, &plugin)) {
1883 return plugin; 1910 return plugin;
1884 } 1911 }
1885 1912
(...skipping 2414 matching lines...) Expand 10 before | Expand all | Expand 10 after
4300 WebView* doomed = webview(); 4327 WebView* doomed = webview();
4301 RenderWidget::Close(); 4328 RenderWidget::Close();
4302 g_view_map.Get().erase(doomed); 4329 g_view_map.Get().erase(doomed);
4303 } 4330 }
4304 4331
4305 void RenderViewImpl::DidHandleKeyEvent() { 4332 void RenderViewImpl::DidHandleKeyEvent() {
4306 edit_commands_.clear(); 4333 edit_commands_.clear();
4307 } 4334 }
4308 4335
4309 bool RenderViewImpl::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { 4336 bool RenderViewImpl::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) {
4310 return pepper_delegate_.HandleMouseEvent(event); 4337 pepper_delegate_.WillHandleMouseEvent();
4338
4339 // If the mouse is locked, only the current owner of the mouse lock can
4340 // process mouse events.
4341 return mouse_lock_dispatcher_->WillHandleMouseEvent(event);
4311 } 4342 }
4312 4343
4313 void RenderViewImpl::DidHandleMouseEvent(const WebKit::WebMouseEvent& event) { 4344 void RenderViewImpl::DidHandleMouseEvent(const WebKit::WebMouseEvent& event) {
4314 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidHandleMouseEvent(event)); 4345 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidHandleMouseEvent(event));
4315 } 4346 }
4316 4347
4317 void RenderViewImpl::DidHandleTouchEvent(const WebTouchEvent& event) { 4348 void RenderViewImpl::DidHandleTouchEvent(const WebTouchEvent& event) {
4318 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidHandleTouchEvent(event)); 4349 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidHandleTouchEvent(event));
4319 } 4350 }
4320 4351
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
4794 4825
4795 void RenderViewImpl::OnEnableViewSourceMode() { 4826 void RenderViewImpl::OnEnableViewSourceMode() {
4796 if (!webview()) 4827 if (!webview())
4797 return; 4828 return;
4798 WebFrame* main_frame = webview()->mainFrame(); 4829 WebFrame* main_frame = webview()->mainFrame();
4799 if (!main_frame) 4830 if (!main_frame)
4800 return; 4831 return;
4801 main_frame->enableViewSourceMode(true); 4832 main_frame->enableViewSourceMode(true);
4802 } 4833 }
4803 4834
4804 void RenderViewImpl::OnLockMouseACK(bool succeeded) {
4805 // Mouse Lock removes the system cursor and provides all mouse motion as
4806 // .movementX/Y values on events all sent to a fixed target. This requires
4807 // content to specifically request the mode to be entered.
4808 // Mouse Capture is implicitly given for the duration of a drag event, and
4809 // sends all mouse events to the initial target of the drag.
4810 // If Lock is entered it supercedes any in progress Capture.
4811 if (succeeded)
4812 OnMouseCaptureLost();
4813
4814 pepper_delegate_.OnLockMouseACK(succeeded);
4815 }
4816
4817 void RenderViewImpl::OnMouseLockLost() {
4818 pepper_delegate_.OnMouseLockLost();
4819 }
4820
4821 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const { 4835 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const {
4822 return !!RenderThreadImpl::current()->compositor_thread(); 4836 return !!RenderThreadImpl::current()->compositor_thread();
4823 } 4837 }
4824 4838
4825 void RenderViewImpl::OnJavaBridgeInit() { 4839 void RenderViewImpl::OnJavaBridgeInit() {
4826 DCHECK(!java_bridge_dispatcher_.get()); 4840 DCHECK(!java_bridge_dispatcher_.get());
4827 #if defined(ENABLE_JAVA_BRIDGE) 4841 #if defined(ENABLE_JAVA_BRIDGE)
4828 java_bridge_dispatcher_.reset(new JavaBridgeDispatcher(this)); 4842 java_bridge_dispatcher_.reset(new JavaBridgeDispatcher(this));
4829 #endif 4843 #endif
4830 } 4844 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698