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

Unified Diff: remoting/client/plugin/chromoting_instance.h

Issue 23484015: Added support of relative mouse motion in Chromoting. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: remoting/client/plugin/chromoting_instance.h
diff --git a/remoting/client/plugin/chromoting_instance.h b/remoting/client/plugin/chromoting_instance.h
index 3dd36c5d27f29aac6684996dfbcaf46ac8c65c49..2f1d1d6a664b3142c654f80133a354803fdc0b2d 100644
--- a/remoting/client/plugin/chromoting_instance.h
+++ b/remoting/client/plugin/chromoting_instance.h
@@ -17,7 +17,10 @@
#include "ppapi/c/pp_rect.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/cpp/instance.h"
+#include "ppapi/cpp/mouse_lock.h"
+#include "ppapi/cpp/point.h"
#include "ppapi/cpp/var.h"
+#include "ppapi/utility/completion_callback_factory.h"
#include "remoting/client/client_context.h"
#include "remoting/client/client_user_interface.h"
#include "remoting/client/key_event_mapper.h"
@@ -42,6 +45,7 @@ class DictionaryValue;
} // namespace base
namespace pp {
+class ImageData;
class InputEvent;
class Module;
} // namespace pp
@@ -66,7 +70,8 @@ class ChromotingInstance :
public ClientUserInterface,
public protocol::ClipboardStub,
public protocol::CursorShapeStub,
- public pp::Instance {
+ public pp::Instance,
+ public pp::MouseLock {
Wez 2013/09/05 21:19:38 Have you considered having PepperInputHandler deri
alexeypa (please no reviews) 2013/09/06 20:00:17 Done. Moved it to PepperInputHandler.
public:
// Plugin API version. This should be incremented whenever the API
// interface changes.
@@ -102,12 +107,16 @@ class ChromotingInstance :
virtual ~ChromotingInstance();
// pp::Instance interface.
+ virtual void DidChangeFocus(bool has_focus) OVERRIDE;
virtual void DidChangeView(const pp::View& view) OVERRIDE;
virtual bool Init(uint32_t argc, const char* argn[],
const char* argv[]) OVERRIDE;
virtual void HandleMessage(const pp::Var& message) OVERRIDE;
virtual bool HandleInputEvent(const pp::InputEvent& event) OVERRIDE;
+ // pp::MouseLock interface.
+ virtual void MouseLockLost() OVERRIDE;
+
// ClientUserInterface interface.
virtual void OnConnectionState(protocol::ConnectionToHost::State state,
protocol::ErrorCode error) OVERRIDE;
@@ -195,6 +204,7 @@ class ChromotingInstance :
void HandleOnThirdPartyTokenFetched(const base::DictionaryValue& data);
void HandleRequestPairing(const base::DictionaryValue& data);
void HandleExtensionMessage(const base::DictionaryValue& data);
+ void HandleAllowMouseLockMessage();
// Helper method called from Connect() to connect with parsed config.
void ConnectWithConfig(const ClientConfig& config,
@@ -226,6 +236,19 @@ class ChromotingInstance :
bool pairing_supported,
const protocol::SecretFetchedCallback& secret_fetched_callback);
+ // Applies |cursor_image_| as the custom pointer or uses the standard arrow
+ // pointer if |cursor_image_| is not available.
+ void EnableMousePointer();
+
+ // Requests the browser to lock the mouse and hides the cursor.
+ void RequestMouseLock();
+
+ // Request the browser and restores the cursor once the lock is gone.
Wez 2013/09/05 20:24:45 This wording seems b0rked!
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+ void CancelMouseLock();
+
+ // Called when the browser locked the mouse.
Wez 2013/09/05 20:24:45 nit: Does this take any action? Is this also calle
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+ void OnMouseLocked(int error);
+
bool initialized_;
PepperPluginThreadDelegate plugin_thread_delegate_;
@@ -236,6 +259,26 @@ class ChromotingInstance :
scoped_ptr<base::WeakPtrFactory<FrameConsumer> > view_weak_factory_;
pp::View plugin_view_;
+ // True if the plugin is focused.
Wez 2013/09/05 20:24:45 nit: has focus.
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+ bool focused_;
Wez 2013/09/05 20:24:45 nit: has_focus_;
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+
+ // Custom cursor image sent by the host. When mouse lock is requested
+ // |cursor_image_| is set to NULL.
Wez 2013/09/05 20:24:45 Why is this set to NULL when mouse-lock is request
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+ scoped_ptr<pp::ImageData> cursor_image_;
+
+ // Hot spot for |cursor_image_|.
+ pp::Point cursor_hotspot_;
+
+ enum MouseLockState {
+ MouseLockDisabled,
Wez 2013/09/05 20:24:45 nit: You've called this state "Disabled", but it's
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+ MouseLockOff,
+ MouseLockPending,
Wez 2013/09/05 20:24:45 nit: MouseLockRequested or MouseLockRequestPending
alexeypa (please no reviews) 2013/09/06 20:00:17 Done.
+ MouseLockOn,
+ MouseLockCancelling
+ };
+
+ MouseLockState mouse_lock_state_;
+
// Contains the most-recently-reported desktop shape, if any.
scoped_ptr<SkRegion> desktop_shape_;
@@ -257,6 +300,8 @@ class ChromotingInstance :
base::WeakPtr<PepperTokenFetcher> pepper_token_fetcher_;
+ pp::CompletionCallbackFactory<ChromotingInstance> callback_factory_;
+
// Weak reference to this instance, used for global logging and task posting.
base::WeakPtrFactory<ChromotingInstance> weak_factory_;
« no previous file with comments | « no previous file | remoting/client/plugin/chromoting_instance.cc » ('j') | remoting/client/plugin/chromoting_instance.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698