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

Side by Side Diff: content/renderer/pepper_plugin_delegate_impl.h

Issue 8970016: refactoring mouse lock to support pepper and WebKit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: OnLockTargetDestroyed typo 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 #ifndef CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_IMPL_H_ 5 #ifndef CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_IMPL_H_
6 #define CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_IMPL_H_ 6 #define CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_IMPL_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
11 #include <string> 11 #include <string>
12 12
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/id_map.h" 14 #include "base/id_map.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
17 #include "content/common/content_export.h" 17 #include "content/common/content_export.h"
18 #include "content/public/renderer/render_view_observer.h" 18 #include "content/public/renderer/render_view_observer.h"
19 #include "content/renderer/mouse_lock_dispatcher.h"
19 #include "content/renderer/pepper_parent_context_provider.h" 20 #include "content/renderer/pepper_parent_context_provider.h"
20 #include "ppapi/proxy/broker_dispatcher.h" 21 #include "ppapi/proxy/broker_dispatcher.h"
21 #include "ppapi/proxy/proxy_channel.h" 22 #include "ppapi/proxy/proxy_channel.h"
22 #include "ppapi/shared_impl/private/tcp_socket_private_impl.h" 23 #include "ppapi/shared_impl/private/tcp_socket_private_impl.h"
23 #include "ppapi/shared_impl/private/udp_socket_private_impl.h" 24 #include "ppapi/shared_impl/private/udp_socket_private_impl.h"
24 #include "ui/base/ime/text_input_type.h" 25 #include "ui/base/ime/text_input_type.h"
25 #include "webkit/plugins/ppapi/plugin_delegate.h" 26 #include "webkit/plugins/ppapi/plugin_delegate.h"
26 #include "webkit/plugins/ppapi/ppb_broker_impl.h" 27 #include "webkit/plugins/ppapi/ppb_broker_impl.h"
27 #include "webkit/plugins/ppapi/ppb_flash_menu_impl.h" 28 #include "webkit/plugins/ppapi/ppb_flash_menu_impl.h"
28 29
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 bool CanComposeInline() const; 191 bool CanComposeInline() const;
191 192
192 // IME events. 193 // IME events.
193 void OnImeSetComposition( 194 void OnImeSetComposition(
194 const string16& text, 195 const string16& text,
195 const std::vector<WebKit::WebCompositionUnderline>& underlines, 196 const std::vector<WebKit::WebCompositionUnderline>& underlines,
196 int selection_start, 197 int selection_start,
197 int selection_end); 198 int selection_end);
198 void OnImeConfirmComposition(const string16& text); 199 void OnImeConfirmComposition(const string16& text);
199 200
200 // Notification that the request to lock the mouse has completed.
201 void OnLockMouseACK(bool succeeded);
202 // Notification that the plugin instance has lost the mouse lock.
203 void OnMouseLockLost();
204 // Notification that a mouse event has arrived at the render view. 201 // Notification that a mouse event has arrived at the render view.
205 // Returns true if no further handling is needed. For example, if the mouse is 202 void WillHandleMouseEvent();
206 // currently locked, this method directly dispatches the event to the owner of
207 // the mouse lock and returns true.
208 bool HandleMouseEvent(const WebKit::WebMouseEvent& event);
209 203
210 // PluginDelegate implementation. 204 // PluginDelegate implementation.
211 virtual void PluginFocusChanged(webkit::ppapi::PluginInstance* instance, 205 virtual void PluginFocusChanged(webkit::ppapi::PluginInstance* instance,
212 bool focused) OVERRIDE; 206 bool focused) OVERRIDE;
213 virtual void PluginTextInputTypeChanged( 207 virtual void PluginTextInputTypeChanged(
214 webkit::ppapi::PluginInstance* instance) OVERRIDE; 208 webkit::ppapi::PluginInstance* instance) OVERRIDE;
215 virtual void PluginCaretPositionChanged( 209 virtual void PluginCaretPositionChanged(
216 webkit::ppapi::PluginInstance* instance) OVERRIDE; 210 webkit::ppapi::PluginInstance* instance) OVERRIDE;
217 virtual void PluginRequestedCancelComposition( 211 virtual void PluginRequestedCancelComposition(
218 webkit::ppapi::PluginInstance* instance) OVERRIDE; 212 webkit::ppapi::PluginInstance* instance) OVERRIDE;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 virtual void DidStartLoading() OVERRIDE; 370 virtual void DidStartLoading() OVERRIDE;
377 virtual void DidStopLoading() OVERRIDE; 371 virtual void DidStopLoading() OVERRIDE;
378 virtual void SetContentRestriction(int restrictions) OVERRIDE; 372 virtual void SetContentRestriction(int restrictions) OVERRIDE;
379 virtual void SaveURLAs(const GURL& url) OVERRIDE; 373 virtual void SaveURLAs(const GURL& url) OVERRIDE;
380 virtual webkit_glue::P2PTransport* CreateP2PTransport() OVERRIDE; 374 virtual webkit_glue::P2PTransport* CreateP2PTransport() OVERRIDE;
381 virtual double GetLocalTimeZoneOffset(base::Time t) OVERRIDE; 375 virtual double GetLocalTimeZoneOffset(base::Time t) OVERRIDE;
382 virtual std::string GetFlashCommandLineArgs() OVERRIDE; 376 virtual std::string GetFlashCommandLineArgs() OVERRIDE;
383 virtual base::SharedMemory* CreateAnonymousSharedMemory(uint32_t size) 377 virtual base::SharedMemory* CreateAnonymousSharedMemory(uint32_t size)
384 OVERRIDE; 378 OVERRIDE;
385 virtual ::ppapi::Preferences GetPreferences() OVERRIDE; 379 virtual ::ppapi::Preferences GetPreferences() OVERRIDE;
386 virtual void LockMouse(webkit::ppapi::PluginInstance* instance) OVERRIDE; 380 virtual bool LockMouse(webkit::ppapi::PluginInstance* instance) OVERRIDE;
387 virtual void UnlockMouse(webkit::ppapi::PluginInstance* instance) OVERRIDE; 381 virtual void UnlockMouse(webkit::ppapi::PluginInstance* instance) OVERRIDE;
382 virtual bool IsMouseLocked(webkit::ppapi::PluginInstance* instance) OVERRIDE;
388 virtual void DidChangeCursor(webkit::ppapi::PluginInstance* instance, 383 virtual void DidChangeCursor(webkit::ppapi::PluginInstance* instance,
389 const WebKit::WebCursorInfo& cursor) OVERRIDE; 384 const WebKit::WebCursorInfo& cursor) OVERRIDE;
390 virtual void DidReceiveMouseEvent( 385 virtual void DidReceiveMouseEvent(
391 webkit::ppapi::PluginInstance* instance) OVERRIDE; 386 webkit::ppapi::PluginInstance* instance) OVERRIDE;
392 virtual bool IsInFullscreenMode() OVERRIDE; 387 virtual bool IsInFullscreenMode() OVERRIDE;
393 virtual void SampleGamepads(WebKit::WebGamepads* data) OVERRIDE; 388 virtual void SampleGamepads(WebKit::WebGamepads* data) OVERRIDE;
394 virtual bool IsPageVisible() const OVERRIDE; 389 virtual bool IsPageVisible() const OVERRIDE;
395 390
396 // RenderViewObserver implementation. 391 // RenderViewObserver implementation.
397 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 392 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
(...skipping 28 matching lines...) Expand all
426 const std::string& data, 421 const std::string& data,
427 const PP_NetAddress_Private& addr); 422 const PP_NetAddress_Private& addr);
428 423
429 CONTENT_EXPORT int GetRoutingId() const; 424 CONTENT_EXPORT int GetRoutingId() const;
430 425
431 private: 426 private:
432 // Asynchronously attempts to create a PPAPI broker for the given plugin. 427 // Asynchronously attempts to create a PPAPI broker for the given plugin.
433 scoped_refptr<PpapiBrokerImpl> CreatePpapiBroker( 428 scoped_refptr<PpapiBrokerImpl> CreatePpapiBroker(
434 webkit::ppapi::PluginModule* plugin_module); 429 webkit::ppapi::PluginModule* plugin_module);
435 430
436 bool MouseLockedOrPending() const {
437 return mouse_locked_ || pending_lock_request_ || pending_unlock_request_;
438 }
439
440 // Implementation of PepperParentContextProvider. 431 // Implementation of PepperParentContextProvider.
441 virtual RendererGLContext* GetParentContextForPlatformContext3D() OVERRIDE; 432 virtual RendererGLContext* GetParentContextForPlatformContext3D() OVERRIDE;
442 433
443 // Helper function to check that TCP/UDP private APIs are allowed for current 434 // Helper function to check that TCP/UDP private APIs are allowed for current
444 // page. This check actually allows socket usage for NativeClient code only. 435 // page. This check actually allows socket usage for NativeClient code only.
445 // It is better to move this check to browser process but Pepper message 436 // It is better to move this check to browser process but Pepper message
446 // filters in browser process have no context about page that sent 437 // filters in browser process have no context about page that sent
447 // the request. Doing this check in render process is safe because NaCl code 438 // the request. Doing this check in render process is safe because NaCl code
448 // is executed in separate NaCl process. 439 // is executed in separate NaCl process.
449 // TODO(dpolukhin, yzshen): make the check consistent for in- and out-process 440 // TODO(dpolukhin, yzshen): make the check consistent for in- and out-process
450 // cases and do the check during socket creation in the browser process. 441 // cases and do the check during socket creation in the browser process.
451 bool CanUseSocketAPIs(); 442 bool CanUseSocketAPIs();
452 443
444 MouseLockDispatcher::LockTarget* GetOrCreateLockTargetAdapter(
445 webkit::ppapi::PluginInstance* instance);
446 void UnSetAndDeleteLockTargetAdapter(webkit::ppapi::PluginInstance* instance);
447
453 // Pointer to the RenderView that owns us. 448 // Pointer to the RenderView that owns us.
454 RenderViewImpl* render_view_; 449 RenderViewImpl* render_view_;
455 450
456 std::set<webkit::ppapi::PluginInstance*> active_instances_; 451 std::set<webkit::ppapi::PluginInstance*> active_instances_;
452 typedef std::map<webkit::ppapi::PluginInstance*,
453 MouseLockDispatcher::LockTarget*> LockTargetMap;
454 LockTargetMap mouse_lock_instances_;
457 455
458 // Used to send a single context menu "completion" upon menu close. 456 // Used to send a single context menu "completion" upon menu close.
459 bool has_saved_context_menu_action_; 457 bool has_saved_context_menu_action_;
460 unsigned saved_context_menu_action_; 458 unsigned saved_context_menu_action_;
461 459
462 IDMap<AsyncOpenFileCallback> pending_async_open_files_; 460 IDMap<AsyncOpenFileCallback> pending_async_open_files_;
463 461
464 IDMap<scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>, 462 IDMap<scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>,
465 IDMapOwnPointer> pending_connect_tcps_; 463 IDMapOwnPointer> pending_connect_tcps_;
466 464
467 IDMap<webkit::ppapi::PPB_TCPSocket_Private_Impl> tcp_sockets_; 465 IDMap<webkit::ppapi::PPB_TCPSocket_Private_Impl> tcp_sockets_;
468 466
469 IDMap<webkit::ppapi::PPB_UDPSocket_Private_Impl> udp_sockets_; 467 IDMap<webkit::ppapi::PPB_UDPSocket_Private_Impl> udp_sockets_;
470 468
471 IDMap<scoped_refptr<webkit::ppapi::PPB_Flash_Menu_Impl>, 469 IDMap<scoped_refptr<webkit::ppapi::PPB_Flash_Menu_Impl>,
472 IDMapOwnPointer> pending_context_menus_; 470 IDMapOwnPointer> pending_context_menus_;
473 471
474 typedef IDMap<scoped_refptr<PpapiBrokerImpl>, IDMapOwnPointer> BrokerMap; 472 typedef IDMap<scoped_refptr<PpapiBrokerImpl>, IDMapOwnPointer> BrokerMap;
475 BrokerMap pending_connect_broker_; 473 BrokerMap pending_connect_broker_;
476 474
477 // Whether or not the focus is on a PPAPI plugin 475 // Whether or not the focus is on a PPAPI plugin
478 webkit::ppapi::PluginInstance* focused_plugin_; 476 webkit::ppapi::PluginInstance* focused_plugin_;
479 477
480 // Current text input composition text. Empty if no composition is in 478 // Current text input composition text. Empty if no composition is in
481 // progress. 479 // progress.
482 string16 composition_text_; 480 string16 composition_text_;
483 481
484 // |mouse_lock_owner_| is not owned by this class. We can know about when it
485 // is destroyed via InstanceDeleted().
486 // |mouse_lock_owner_| being non-NULL doesn't indicate that currently the
487 // mouse has been locked. It is possible that a request to lock the mouse has
488 // been sent, but the response hasn't arrived yet.
489 webkit::ppapi::PluginInstance* mouse_lock_owner_;
490 bool mouse_locked_;
491 // If both |pending_lock_request_| and |pending_unlock_request_| are true,
492 // it means a lock request was sent before an unlock request and we haven't
493 // received responses for them.
494 // The logic in LockMouse() makes sure that a lock request won't be sent when
495 // there is a pending unlock request.
496 bool pending_lock_request_;
497 bool pending_unlock_request_;
498
499 // The plugin instance that received the last mouse event. It is set to NULL 482 // The plugin instance that received the last mouse event. It is set to NULL
500 // if the last mouse event went to elements other than Pepper plugins. 483 // if the last mouse event went to elements other than Pepper plugins.
501 // |last_mouse_event_target_| is not owned by this class. We can know about 484 // |last_mouse_event_target_| is not owned by this class. We can know about
502 // when it is destroyed via InstanceDeleted(). 485 // when it is destroyed via InstanceDeleted().
503 webkit::ppapi::PluginInstance* last_mouse_event_target_; 486 webkit::ppapi::PluginInstance* last_mouse_event_target_;
504 487
505 scoped_ptr<content::GamepadSharedMemoryReader> gamepad_shared_memory_reader_; 488 scoped_ptr<content::GamepadSharedMemoryReader> gamepad_shared_memory_reader_;
506 489
507 DISALLOW_COPY_AND_ASSIGN(PepperPluginDelegateImpl); 490 DISALLOW_COPY_AND_ASSIGN(PepperPluginDelegateImpl);
508 }; 491 };
509 492
510 #endif // CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_IMPL_H_ 493 #endif // CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698