summaryrefslogtreecommitdiffstats
path: root/ppapi
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-08 20:28:43 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-08 20:28:43 +0000
commit33ec505631bcc1cc6709248b97b468fbdf3d5f0a (patch)
tree4963e5e21af0f8173c5b6353c34209993b5da852 /ppapi
parent41c3696d8ebb37c0b2e0afd0361f0b40bc369483 (diff)
downloadchromium_src-33ec505631bcc1cc6709248b97b468fbdf3d5f0a.zip
chromium_src-33ec505631bcc1cc6709248b97b468fbdf3d5f0a.tar.gz
chromium_src-33ec505631bcc1cc6709248b97b468fbdf3d5f0a.tar.bz2
Add new MouseCursor interface for setting the mouse cursor.
Remove most of the old cursor control interface. This keeps backwards compat for CursorControl.SetCursor (which just redirects to the new function) to kepe existing users running. None of the other functions on cursor control were implemented, so I removed all the proxying and stuff for them. BUG= TEST= Review URL: https://chromiumcodereview.appspot.com/9814015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131314 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r--ppapi/api/ppb_mouse_cursor.idl106
-rw-r--r--ppapi/c/ppb_mouse_cursor.h138
-rw-r--r--ppapi/cpp/mouse_cursor.cc31
-rw-r--r--ppapi/cpp/mouse_cursor.h56
-rw-r--r--ppapi/examples/2d/paint_manager_example.cc5
-rw-r--r--ppapi/examples/mouse_cursor/mouse_cursor.cc98
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc14
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/browser_globals.h4
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_cursor_control_rpc_server.cc113
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_mouse_cursor_rpc_server.cc49
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/build.scons2
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/nacl.scons2
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc4
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.cc138
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.h26
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.cc58
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.h26
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp2
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp2
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_cursor_control.srpc45
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_mouse_cursor.srpc20
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc114
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc96
-rwxr-xr-xppapi/native_client/src/shared/ppapi_proxy/run_srpcgen.py2
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h54
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h48
-rw-r--r--ppapi/native_client/tests/ppapi_browser/ppb_dev/ppapi_ppb_dev.cc9
-rw-r--r--ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc13
-rw-r--r--ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h4
-rw-r--r--ppapi/native_client/tests/ppapi_tests/nacl.scons2
-rw-r--r--ppapi/ppapi_proxy.gypi2
-rw-r--r--ppapi/ppapi_shared.gypi1
-rw-r--r--ppapi/ppapi_sources.gypi5
-rw-r--r--ppapi/ppapi_tests.gypi10
-rw-r--r--ppapi/proxy/interface_list.cc1
-rw-r--r--ppapi/proxy/plugin_dispatcher.cc1
-rw-r--r--ppapi/proxy/ppapi_messages.h25
-rw-r--r--ppapi/proxy/ppb_cursor_control_proxy.cc149
-rw-r--r--ppapi/proxy/ppb_cursor_control_proxy.h67
-rw-r--r--ppapi/proxy/ppb_instance_proxy.cc41
-rw-r--r--ppapi/proxy/ppb_instance_proxy.h8
-rw-r--r--ppapi/shared_impl/ppb_instance_shared.cc43
-rw-r--r--ppapi/shared_impl/ppb_instance_shared.h4
-rw-r--r--ppapi/tests/test_mouse_cursor.cc82
-rw-r--r--ppapi/tests/test_mouse_cursor.h27
-rw-r--r--ppapi/thunk/interfaces_ppb_public_dev.h3
-rw-r--r--ppapi/thunk/interfaces_ppb_public_stable.h1
-rw-r--r--ppapi/thunk/ppb_cursor_control_api.h34
-rw-r--r--ppapi/thunk/ppb_cursor_control_thunk.cc31
-rw-r--r--ppapi/thunk/ppb_instance_api.h7
-rw-r--r--ppapi/thunk/ppb_mouse_cursor_thunk.cc36
-rw-r--r--ppapi/thunk/ppb_mouse_lock_thunk.cc4
52 files changed, 971 insertions, 892 deletions
diff --git a/ppapi/api/ppb_mouse_cursor.idl b/ppapi/api/ppb_mouse_cursor.idl
new file mode 100644
index 0000000..b939016
--- /dev/null
+++ b/ppapi/api/ppb_mouse_cursor.idl
@@ -0,0 +1,106 @@
+/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/**
+ * This file defines the <code>PPB_MouseCursor</code> interface for setting
+ * the mouse cursor.
+ */
+
+label Chrome {
+ M19 = 1.0
+};
+
+/**
+ * The <code>PP_MouseCursor_Type</code> enumeration lists the available stock
+ * cursor types.
+ */
+[assert_size(4), notypedef]
+enum PP_MouseCursor_Type {
+ PP_MOUSECURSOR_TYPE_CUSTOM = -1,
+ PP_MOUSECURSOR_TYPE_POINTER = 0,
+ PP_MOUSECURSOR_TYPE_CROSS = 1,
+ PP_MOUSECURSOR_TYPE_HAND = 2,
+ PP_MOUSECURSOR_TYPE_IBEAM = 3,
+ PP_MOUSECURSOR_TYPE_WAIT = 4,
+ PP_MOUSECURSOR_TYPE_HELP = 5,
+ PP_MOUSECURSOR_TYPE_EASTRESIZE = 6,
+ PP_MOUSECURSOR_TYPE_NORTHRESIZE = 7,
+ PP_MOUSECURSOR_TYPE_NORTHEASTRESIZE = 8,
+ PP_MOUSECURSOR_TYPE_NORTHWESTRESIZE = 9,
+ PP_MOUSECURSOR_TYPE_SOUTHRESIZE = 10,
+ PP_MOUSECURSOR_TYPE_SOUTHEASTRESIZE = 11,
+ PP_MOUSECURSOR_TYPE_SOUTHWESTRESIZE = 12,
+ PP_MOUSECURSOR_TYPE_WESTRESIZE = 13,
+ PP_MOUSECURSOR_TYPE_NORTHSOUTHRESIZE = 14,
+ PP_MOUSECURSOR_TYPE_EASTWESTRESIZE = 15,
+ PP_MOUSECURSOR_TYPE_NORTHEASTSOUTHWESTRESIZE = 16,
+ PP_MOUSECURSOR_TYPE_NORTHWESTSOUTHEASTRESIZE = 17,
+ PP_MOUSECURSOR_TYPE_COLUMNRESIZE = 18,
+ PP_MOUSECURSOR_TYPE_ROWRESIZE = 19,
+ PP_MOUSECURSOR_TYPE_MIDDLEPANNING = 20,
+ PP_MOUSECURSOR_TYPE_EASTPANNING = 21,
+ PP_MOUSECURSOR_TYPE_NORTHPANNING = 22,
+ PP_MOUSECURSOR_TYPE_NORTHEASTPANNING = 23,
+ PP_MOUSECURSOR_TYPE_NORTHWESTPANNING = 24,
+ PP_MOUSECURSOR_TYPE_SOUTHPANNING = 25,
+ PP_MOUSECURSOR_TYPE_SOUTHEASTPANNING = 26,
+ PP_MOUSECURSOR_TYPE_SOUTHWESTPANNING = 27,
+ PP_MOUSECURSOR_TYPE_WESTPANNING = 28,
+ PP_MOUSECURSOR_TYPE_MOVE = 29,
+ PP_MOUSECURSOR_TYPE_VERTICALTEXT = 30,
+ PP_MOUSECURSOR_TYPE_CELL = 31,
+ PP_MOUSECURSOR_TYPE_CONTEXTMENU = 32,
+ PP_MOUSECURSOR_TYPE_ALIAS = 33,
+ PP_MOUSECURSOR_TYPE_PROGRESS = 34,
+ PP_MOUSECURSOR_TYPE_NODROP = 35,
+ PP_MOUSECURSOR_TYPE_COPY = 36,
+ PP_MOUSECURSOR_TYPE_NONE = 37,
+ PP_MOUSECURSOR_TYPE_NOTALLOWED = 38,
+ PP_MOUSECURSOR_TYPE_ZOOMIN = 39,
+ PP_MOUSECURSOR_TYPE_ZOOMOUT = 40,
+ PP_MOUSECURSOR_TYPE_GRAB = 41,
+ PP_MOUSECURSOR_TYPE_GRABBING = 42
+};
+
+/**
+ * The <code>PPB_MouseCursor</code> allows setting the mouse cursor.
+ */
+interface PPB_MouseCursor {
+ /**
+ * Sets the given mouse cursor. The mouse cursor will be in effect whenever
+ * the mouse is over the given instance until it is set again by another
+ * call. Note that you can hide the mouse cursor by setting it to the
+ * <code>PP_MOUSECURSOR_TYPE_NONE</code> type.
+ *
+ * This function allows setting both system defined mouse cursors and
+ * custom cursors. To set a system-defined cursor, pass the type you want
+ * and set the custom image to 0 and the hot spot to NULL. To set a custom
+ * cursor, set the type to <code>PP_MOUSECURSOR_TYPE_CUSTOM</code> and
+ * specify your image and hot spot.
+ *
+ * @param[in] instance A <code>PP_Instance</code> indentifying the instance
+ * that the mouse cursor will affect.
+ *
+ * @param[in] type A <code>PP_MouseCursor_Type</code> identifying the type of
+ * mouse cursor to show.
+ *
+ * @param[in] image A <code>PPB_ImageData</code> resource identifying the
+ * custom image to set when the type is
+ * <code>PP_MOUSECURSOR_TYPE_CUSTOM</code>. The image must be less than 32
+ * pixels in each direction and must be of the system's native image format.
+ * When you are specifying a predefined cursor, this parameter must be 0.
+ *
+ * @param[in] hot_spot When setting a custom cursor, this idenfifies the
+ * pixel position within the given image of the "hot spot" of the cursor.
+ * When specifying a stock cursor, this parameter is ignored.
+ *
+ * @return PP_TRUE on success, or PP_FALSE if the instance or cursor type
+ * is invalid, or if the image is too large.
+ */
+ PP_Bool SetCursor([in] PP_Instance instance,
+ [in] PP_MouseCursor_Type type,
+ [in] PP_Resource image,
+ [in] PP_Point hot_spot);
+};
diff --git a/ppapi/c/ppb_mouse_cursor.h b/ppapi/c/ppb_mouse_cursor.h
new file mode 100644
index 0000000..1be5889
--- /dev/null
+++ b/ppapi/c/ppb_mouse_cursor.h
@@ -0,0 +1,138 @@
+/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* From ppb_mouse_cursor.idl modified Mon Mar 26 22:05:07 2012. */
+
+#ifndef PPAPI_C_PPB_MOUSE_CURSOR_H_
+#define PPAPI_C_PPB_MOUSE_CURSOR_H_
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_instance.h"
+#include "ppapi/c/pp_macros.h"
+#include "ppapi/c/pp_point.h"
+#include "ppapi/c/pp_resource.h"
+#include "ppapi/c/pp_stdint.h"
+
+#define PPB_MOUSECURSOR_INTERFACE_1_0 "PPB_MouseCursor;1.0"
+#define PPB_MOUSECURSOR_INTERFACE PPB_MOUSECURSOR_INTERFACE_1_0
+
+/**
+ * @file
+ * This file defines the <code>PPB_MouseCursor</code> interface for setting
+ * the mouse cursor.
+ */
+
+
+/**
+ * @addtogroup Enums
+ * @{
+ */
+/**
+ * The <code>PP_MouseCursor_Type</code> enumeration lists the available stock
+ * cursor types.
+ */
+enum PP_MouseCursor_Type {
+ PP_MOUSECURSOR_TYPE_CUSTOM = -1,
+ PP_MOUSECURSOR_TYPE_POINTER = 0,
+ PP_MOUSECURSOR_TYPE_CROSS = 1,
+ PP_MOUSECURSOR_TYPE_HAND = 2,
+ PP_MOUSECURSOR_TYPE_IBEAM = 3,
+ PP_MOUSECURSOR_TYPE_WAIT = 4,
+ PP_MOUSECURSOR_TYPE_HELP = 5,
+ PP_MOUSECURSOR_TYPE_EASTRESIZE = 6,
+ PP_MOUSECURSOR_TYPE_NORTHRESIZE = 7,
+ PP_MOUSECURSOR_TYPE_NORTHEASTRESIZE = 8,
+ PP_MOUSECURSOR_TYPE_NORTHWESTRESIZE = 9,
+ PP_MOUSECURSOR_TYPE_SOUTHRESIZE = 10,
+ PP_MOUSECURSOR_TYPE_SOUTHEASTRESIZE = 11,
+ PP_MOUSECURSOR_TYPE_SOUTHWESTRESIZE = 12,
+ PP_MOUSECURSOR_TYPE_WESTRESIZE = 13,
+ PP_MOUSECURSOR_TYPE_NORTHSOUTHRESIZE = 14,
+ PP_MOUSECURSOR_TYPE_EASTWESTRESIZE = 15,
+ PP_MOUSECURSOR_TYPE_NORTHEASTSOUTHWESTRESIZE = 16,
+ PP_MOUSECURSOR_TYPE_NORTHWESTSOUTHEASTRESIZE = 17,
+ PP_MOUSECURSOR_TYPE_COLUMNRESIZE = 18,
+ PP_MOUSECURSOR_TYPE_ROWRESIZE = 19,
+ PP_MOUSECURSOR_TYPE_MIDDLEPANNING = 20,
+ PP_MOUSECURSOR_TYPE_EASTPANNING = 21,
+ PP_MOUSECURSOR_TYPE_NORTHPANNING = 22,
+ PP_MOUSECURSOR_TYPE_NORTHEASTPANNING = 23,
+ PP_MOUSECURSOR_TYPE_NORTHWESTPANNING = 24,
+ PP_MOUSECURSOR_TYPE_SOUTHPANNING = 25,
+ PP_MOUSECURSOR_TYPE_SOUTHEASTPANNING = 26,
+ PP_MOUSECURSOR_TYPE_SOUTHWESTPANNING = 27,
+ PP_MOUSECURSOR_TYPE_WESTPANNING = 28,
+ PP_MOUSECURSOR_TYPE_MOVE = 29,
+ PP_MOUSECURSOR_TYPE_VERTICALTEXT = 30,
+ PP_MOUSECURSOR_TYPE_CELL = 31,
+ PP_MOUSECURSOR_TYPE_CONTEXTMENU = 32,
+ PP_MOUSECURSOR_TYPE_ALIAS = 33,
+ PP_MOUSECURSOR_TYPE_PROGRESS = 34,
+ PP_MOUSECURSOR_TYPE_NODROP = 35,
+ PP_MOUSECURSOR_TYPE_COPY = 36,
+ PP_MOUSECURSOR_TYPE_NONE = 37,
+ PP_MOUSECURSOR_TYPE_NOTALLOWED = 38,
+ PP_MOUSECURSOR_TYPE_ZOOMIN = 39,
+ PP_MOUSECURSOR_TYPE_ZOOMOUT = 40,
+ PP_MOUSECURSOR_TYPE_GRAB = 41,
+ PP_MOUSECURSOR_TYPE_GRABBING = 42
+};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_MouseCursor_Type, 4);
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup Interfaces
+ * @{
+ */
+/**
+ * The <code>PPB_MouseCursor</code> allows setting the mouse cursor.
+ */
+struct PPB_MouseCursor_1_0 {
+ /**
+ * Sets the given mouse cursor. The mouse cursor will be in effect whenever
+ * the mouse is over the given instance until it is set again by another
+ * call. Note that you can hide the mouse cursor by setting it to the
+ * <code>PP_MOUSECURSOR_TYPE_NONE</code> type.
+ *
+ * This function allows setting both system defined mouse cursors and
+ * custom cursors. To set a system-defined cursor, pass the type you want
+ * and set the custom image to 0 and the hot spot to NULL. To set a custom
+ * cursor, set the type to <code>PP_MOUSECURSOR_TYPE_CUSTOM</code> and
+ * specify your image and hot spot.
+ *
+ * @param[in] instance A <code>PP_Instance</code> indentifying the instance
+ * that the mouse cursor will affect.
+ *
+ * @param[in] type A <code>PP_MouseCursor_Type</code> identifying the type of
+ * mouse cursor to show.
+ *
+ * @param[in] image A <code>PPB_ImageData</code> resource identifying the
+ * custom image to set when the type is
+ * <code>PP_MOUSECURSOR_TYPE_CUSTOM</code>. The image must be less than 32
+ * pixels in each direction and must be of the system's native image format.
+ * When you are specifying a predefined cursor, this parameter must be 0.
+ *
+ * @param[in] hot_spot When setting a custom cursor, this idenfifies the
+ * pixel position within the given image of the "hot spot" of the cursor.
+ * When specifying a stock cursor, this parameter is ignored.
+ *
+ * @return PP_TRUE on success, or PP_FALSE if the instance or cursor type
+ * is invalid, or if the image is too large.
+ */
+ PP_Bool (*SetCursor)(PP_Instance instance,
+ enum PP_MouseCursor_Type type,
+ PP_Resource image,
+ const struct PP_Point* hot_spot);
+};
+
+typedef struct PPB_MouseCursor_1_0 PPB_MouseCursor;
+/**
+ * @}
+ */
+
+#endif /* PPAPI_C_PPB_MOUSE_CURSOR_H_ */
+
diff --git a/ppapi/cpp/mouse_cursor.cc b/ppapi/cpp/mouse_cursor.cc
new file mode 100644
index 0000000..c5ac20a
--- /dev/null
+++ b/ppapi/cpp/mouse_cursor.cc
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/cpp/mouse_cursor.h"
+
+#include "ppapi/cpp/module_impl.h"
+
+namespace pp {
+
+namespace {
+
+template <> const char* interface_name<PPB_MouseCursor_1_0>() {
+ return PPB_MOUSECURSOR_INTERFACE_1_0;
+}
+
+} // namespace
+
+// static
+bool MouseCursor::SetCursor(const InstanceHandle& instance,
+ PP_MouseCursor_Type type,
+ const ImageData& image,
+ const Point& hot_spot) {
+ if (!has_interface<PPB_MouseCursor_1_0>())
+ return false;
+ return PP_ToBool(get_interface<PPB_MouseCursor_1_0>()->SetCursor(
+ instance.pp_instance(), type, image.pp_resource(),
+ &hot_spot.pp_point()));
+}
+
+} // namespace pp
diff --git a/ppapi/cpp/mouse_cursor.h b/ppapi/cpp/mouse_cursor.h
new file mode 100644
index 0000000..a54084e
--- /dev/null
+++ b/ppapi/cpp/mouse_cursor.h
@@ -0,0 +1,56 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PPAPI_CPP_MOUSE_CURSOR_H_
+#define PPAPI_CPP_MOUSE_CURSOR_H_
+
+#include "ppapi/c/ppb_mouse_cursor.h"
+#include "ppapi/cpp/image_data.h"
+#include "ppapi/cpp/instance_handle.h"
+#include "ppapi/cpp/point.h"
+
+namespace pp {
+
+class MouseCursor {
+ public:
+ /// Sets the given mouse cursor. The mouse cursor will be in effect whenever
+ /// the mouse is over the given instance until it is set again by another
+ /// call. Note that you can hide the mouse cursor by setting it to the
+ /// <code>PP_MOUSECURSOR_TYPE_NONE</code> type.
+ ///
+ /// This function allows setting both system defined mouse cursors and
+ /// custom cursors. To set a system-defined cursor, pass the type you want
+ /// and set the custom image to a default-constructor ImageData object.
+ /// To set a custom cursor, set the type to
+ /// <code>PP_MOUSECURSOR_TYPE_CUSTOM</code> and specify your image and hot
+ /// spot.
+ ///
+ /// @param[in] instance A handle indentifying the instance that the mouse
+ /// cursor will affect.
+ ///
+ /// @param[in] type A <code>PP_MouseCursor_Type</code> identifying the type
+ /// of mouse cursor to show. See <code>ppapi/c/ppb_mouse_cursor.h</code>.
+ ///
+ /// @param[in] image A <code>ImageData</code> object identifying the
+ /// custom image to set when the type is
+ /// <code>PP_MOUSECURSOR_TYPE_CUSTOM</code>. The image must be less than 32
+ /// pixels in each direction and must be of the system's native image format.
+ /// When you are specifying a predefined cursor, this parameter should be a
+ /// default-constructed ImageData.
+ ///
+ /// @param[in] hot_spot When setting a custom cursor, this idenfifies the
+ /// pixel position within the given image of the "hot spot" of the cursor.
+ /// When specifying a stock cursor, this parameter is ignored.
+ ///
+ /// @return true on success, or false if the instance or cursor type
+ /// was invalid or if the image was too large.
+ static bool SetCursor(const InstanceHandle& instance,
+ PP_MouseCursor_Type type,
+ const ImageData& image = ImageData(),
+ const Point& hot_spot = Point(0, 0));
+};
+
+} // namespace pp
+
+#endif // PPAPI_CPP_MOUSE_CURSOR_H_
diff --git a/ppapi/examples/2d/paint_manager_example.cc b/ppapi/examples/2d/paint_manager_example.cc
index d3530cb..86bdbe7 100644
--- a/ppapi/examples/2d/paint_manager_example.cc
+++ b/ppapi/examples/2d/paint_manager_example.cc
@@ -9,6 +9,7 @@
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/size.h"
+#include "ppapi/cpp/view.h"
#include "ppapi/utility/graphics/paint_manager.h"
// Number of pixels to each side of the center of the square that we draw.
@@ -70,8 +71,8 @@ class MyInstance : public pp::Instance, public pp::PaintManager::Client {
}
}
- virtual void DidChangeView(const pp::Rect& position, const pp::Rect& clip) {
- paint_manager_.SetSize(position.size());
+ virtual void DidChangeView(const pp::View& view) {
+ paint_manager_.SetSize(view.GetRect().size());
}
// PaintManager::Client implementation.
diff --git a/ppapi/examples/mouse_cursor/mouse_cursor.cc b/ppapi/examples/mouse_cursor/mouse_cursor.cc
new file mode 100644
index 0000000..0c8b10b
--- /dev/null
+++ b/ppapi/examples/mouse_cursor/mouse_cursor.cc
@@ -0,0 +1,98 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/cpp/graphics_2d.h"
+#include "ppapi/cpp/image_data.h"
+#include "ppapi/cpp/input_event.h"
+#include "ppapi/cpp/instance.h"
+#include "ppapi/cpp/module.h"
+#include "ppapi/cpp/mouse_cursor.h"
+#include "ppapi/cpp/view.h"
+
+void FillRect(pp::ImageData* image, int left, int top, int width, int height,
+ uint32_t color) {
+ for (int y = std::max(0, top);
+ y < std::min(image->size().height() - 1, top + height);
+ y++) {
+ for (int x = std::max(0, left);
+ x < std::min(image->size().width() - 1, left + width);
+ x++)
+ *image->GetAddr32(pp::Point(x, y)) = color;
+ }
+}
+
+class MyInstance : public pp::Instance {
+ public:
+ MyInstance(PP_Instance instance)
+ : pp::Instance(instance), width_(0), height_(0) {
+ RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE);
+ }
+
+ virtual ~MyInstance() {
+ }
+
+ virtual void DidChangeView(const pp::View& view) {
+ width_ = view.GetRect().width();
+ height_ = view.GetRect().height();
+ }
+
+ virtual bool HandleInputEvent(const pp::InputEvent& event) {
+ switch (event.GetType()) {
+ case PP_INPUTEVENT_TYPE_MOUSEDOWN:
+ return true;
+ case PP_INPUTEVENT_TYPE_MOUSEMOVE:
+ HandleMove(pp::MouseInputEvent(event));
+ return true;
+ case PP_INPUTEVENT_TYPE_KEYDOWN:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ void HandleMove(const pp::MouseInputEvent& event) {
+ pp::Point point = event.GetPosition();
+ int segments = 3;
+ if (point.y() < height_ / segments) {
+ // Top part gets custom cursor of wait.
+ pp::MouseCursor::SetCursor(this, PP_MOUSECURSOR_TYPE_WAIT);
+ } else if (point.y() < (height_ / segments) * 2) {
+ // Next part gets custom image cursor.
+ pp::ImageData cursor(this, pp::ImageData::GetNativeImageDataFormat(),
+ pp::Size(32, 32), true);
+ // Note that in real life you will need to handle the case where the
+ // native format is different.
+ FillRect(&cursor, 0, 0, 32, 32, 0x80000080);
+ pp::MouseCursor::SetCursor(this, PP_MOUSECURSOR_TYPE_CUSTOM, cursor,
+ pp::Point(16, 16));
+ } else {
+ // Next part gets no cursor.
+ pp::MouseCursor::SetCursor(this, PP_MOUSECURSOR_TYPE_NONE);
+ }
+ }
+
+
+ private:
+ int width_;
+ int height_;
+};
+
+class MyModule : public pp::Module {
+ public:
+ MyModule() : pp::Module() {}
+ virtual ~MyModule() {}
+
+ virtual pp::Instance* CreateInstance(PP_Instance instance) {
+ return new MyInstance(instance);
+ }
+};
+
+namespace pp {
+
+// Factory function for your specialization of the Module object.
+Module* CreateModule() {
+ return new MyModule();
+}
+
+} // namespace pp
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc b/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc
index e5c0d91..35a6e8f 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc
+++ b/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc
@@ -347,13 +347,6 @@ const PPB_WheelInputEvent* PPBWheelInputEventInterface() {
}
// Dev interfaces.
-const PPB_CursorControl_Dev* PPBCursorControlInterface() {
- static const PPB_CursorControl_Dev* ppb =
- static_cast<const PPB_CursorControl_Dev*>(
- GetBrowserInterfaceSafe(PPB_CURSOR_CONTROL_DEV_INTERFACE));
- return ppb;
-}
-
const PPB_FileIO* PPBFileIOInterface() {
static const PPB_FileIO* ppb =
static_cast<const PPB_FileIO*>(
@@ -403,6 +396,13 @@ const PPB_Gamepad* PPBGamepadInterface() {
return ppb;
}
+const PPB_MouseCursor_1_0* PPBMouseCursorInterface() {
+ static const PPB_MouseCursor_1_0* ppb =
+ static_cast<const PPB_MouseCursor_1_0*>(
+ GetBrowserInterfaceSafe(PPB_MOUSECURSOR_INTERFACE_1_0));
+ return ppb;
+}
+
const PPB_MouseLock* PPBMouseLockInterface() {
static const PPB_MouseLock* ppb = static_cast<const PPB_MouseLock*>(
GetBrowserInterfaceSafe(PPB_MOUSELOCK_INTERFACE));
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.h b/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.h
index 62ebd9b..d8f37a9 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.h
+++ b/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.h
@@ -5,7 +5,6 @@
#ifndef NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_BROWSER_GLOBALS_H_
#define NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_BROWSER_GLOBALS_H_
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
#include "ppapi/c/dev/ppb_find_dev.h"
#include "ppapi/c/dev/ppb_font_dev.h"
#include "ppapi/c/dev/ppb_memory_dev.h"
@@ -28,6 +27,7 @@
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/c/ppb_instance.h"
#include "ppapi/c/ppb_messaging.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
#include "ppapi/c/ppb_mouse_lock.h"
#include "ppapi/c/ppb_url_loader.h"
#include "ppapi/c/ppb_url_request_info.h"
@@ -102,7 +102,7 @@ const void* GetBrowserInterfaceSafe(const char* interface_name);
// plugin side of the proxy, so they can be used by the shared proxy code
// under both trusted and untrusted compilation.
const PPB_Core* PPBCoreInterface(); // shared
-const PPB_CursorControl_Dev* PPBCursorControlInterface();
+const PPB_MouseCursor_1_0* PPBMouseCursorInterface();
const PPB_FileIO* PPBFileIOInterface();
const PPB_FileRef* PPBFileRefInterface();
const PPB_FileSystem* PPBFileSystemInterface();
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_cursor_control_rpc_server.cc b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_cursor_control_rpc_server.cc
deleted file mode 100644
index b0b3218..0000000
--- a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_cursor_control_rpc_server.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// SRPC-abstraction wrappers around PPB_CursorControl_Dev functions.
-
-#include "native_client/src/include/nacl_macros.h"
-#include "native_client/src/include/nacl_scoped_ptr.h"
-#include "native_client/src/include/portability.h"
-#include "native_client/src/shared/ppapi_proxy/browser_globals.h"
-#include "native_client/src/shared/ppapi_proxy/utility.h"
-#include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-#include "ppapi/c/pp_errors.h"
-#include "ppapi/c/pp_point.h"
-#include "ppapi/c/ppb_image_data.h"
-#include "srpcgen/ppb_rpc.h"
-
-using ppapi_proxy::DebugPrintf;
-using ppapi_proxy::PPBCursorControlInterface;
-
-void PpbCursorControlRpcServer::PPB_CursorControl_SetCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t type,
- PP_Resource custom_image,
- nacl_abi_size_t hot_spot_size, char* hot_spot,
- int32_t* success) {
- NaClSrpcClosureRunner runner(done);
- rpc->result = NACL_SRPC_RESULT_APP_ERROR;
-
- PP_Point* pp_hot_spot = NULL;
- if (hot_spot_size != 0) {
- if (hot_spot_size != sizeof(struct PP_Point))
- return;
- pp_hot_spot = reinterpret_cast<struct PP_Point*>(hot_spot);
- }
- PP_Bool pp_success = PPBCursorControlInterface()->SetCursor(
- instance,
- static_cast<PP_CursorType_Dev>(type),
- custom_image,
- pp_hot_spot);
- *success = PP_ToBool(pp_success);
-
- DebugPrintf("PPB_CursorControl::SetCursor: success=%"NACL_PRId32"\n",
- *success);
- rpc->result = NACL_SRPC_RESULT_OK;
-}
-
-void PpbCursorControlRpcServer::PPB_CursorControl_LockCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success) {
- NaClSrpcClosureRunner runner(done);
- rpc->result = NACL_SRPC_RESULT_APP_ERROR;
-
- PP_Bool pp_success = PPBCursorControlInterface()->LockCursor(instance);
- *success = PP_ToBool(pp_success);
-
- DebugPrintf("PPB_CursorControl::LockCursor: success=%"NACL_PRId32"\n",
- *success);
- rpc->result = NACL_SRPC_RESULT_OK;
-}
-
-void PpbCursorControlRpcServer::PPB_CursorControl_UnlockCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success) {
- NaClSrpcClosureRunner runner(done);
- rpc->result = NACL_SRPC_RESULT_APP_ERROR;
-
- PP_Bool pp_success = PPBCursorControlInterface()->UnlockCursor(instance);
- *success = PP_ToBool(pp_success);
-
- DebugPrintf("PPB_CursorControl::UnlockCursor: success=%"NACL_PRId32"\n",
- *success);
- rpc->result = NACL_SRPC_RESULT_OK;
-}
-
-void PpbCursorControlRpcServer::PPB_CursorControl_HasCursorLock(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success) {
- NaClSrpcClosureRunner runner(done);
- rpc->result = NACL_SRPC_RESULT_APP_ERROR;
-
- PP_Bool pp_success = PPBCursorControlInterface()->HasCursorLock(instance);
- *success = PP_ToBool(pp_success);
-
- DebugPrintf("PPB_CursorControl::HasCursorLock: success=%"NACL_PRId32"\n",
- *success);
- rpc->result = NACL_SRPC_RESULT_OK;
-}
-
-void PpbCursorControlRpcServer::PPB_CursorControl_CanLockCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success) {
- NaClSrpcClosureRunner runner(done);
- rpc->result = NACL_SRPC_RESULT_APP_ERROR;
-
- PP_Bool pp_success = PPBCursorControlInterface()->CanLockCursor(instance);
- *success = PP_ToBool(pp_success);
-
- DebugPrintf("PPB_CursorControl::CanLockCursor: success=%"NACL_PRId32"\n",
- *success);
- rpc->result = NACL_SRPC_RESULT_OK;
-}
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_mouse_cursor_rpc_server.cc b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_mouse_cursor_rpc_server.cc
new file mode 100644
index 0000000..96c4687
--- /dev/null
+++ b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_mouse_cursor_rpc_server.cc
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// SRPC-abstraction wrappers around PPB_MouseCursor functions.
+
+#include "native_client/src/include/nacl_macros.h"
+#include "native_client/src/include/nacl_scoped_ptr.h"
+#include "native_client/src/include/portability.h"
+#include "native_client/src/shared/ppapi_proxy/browser_globals.h"
+#include "native_client/src/shared/ppapi_proxy/utility.h"
+#include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/pp_point.h"
+#include "ppapi/c/ppb_image_data.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
+#include "srpcgen/ppb_rpc.h"
+
+using ppapi_proxy::DebugPrintf;
+using ppapi_proxy::PPBMouseCursorInterface;
+
+void PpbMouseCursorRpcServer::PPB_MouseCursor_SetCursor(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Instance instance,
+ int32_t type,
+ PP_Resource custom_image,
+ nacl_abi_size_t hot_spot_size, char* hot_spot,
+ int32_t* success) {
+ NaClSrpcClosureRunner runner(done);
+ rpc->result = NACL_SRPC_RESULT_APP_ERROR;
+
+ PP_Point* pp_hot_spot = NULL;
+ if (hot_spot_size != 0) {
+ if (hot_spot_size != sizeof(struct PP_Point))
+ return;
+ pp_hot_spot = reinterpret_cast<struct PP_Point*>(hot_spot);
+ }
+ PP_Bool pp_success = PPBMouseCursorInterface()->SetCursor(
+ instance,
+ static_cast<PP_MouseCursor_Type>(type),
+ custom_image,
+ pp_hot_spot);
+ *success = PP_ToBool(pp_success);
+
+ DebugPrintf("PPB_MouseCursor::SetCursor: success=%"NACL_PRId32"\n",
+ *success);
+ rpc->result = NACL_SRPC_RESULT_OK;
+}
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/build.scons b/ppapi/native_client/src/shared/ppapi_proxy/build.scons
index 83b7d2d..9fa7068 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/build.scons
+++ b/ppapi/native_client/src/shared/ppapi_proxy/build.scons
@@ -39,7 +39,6 @@ env.DualLibrary('ppapi_browser',
'browser_ppb_audio_rpc_server.cc',
'browser_ppb_audio_config_rpc_server.cc',
'browser_ppb_core_rpc_server.cc',
- 'browser_ppb_cursor_control_rpc_server.cc',
'browser_ppb_file_io_rpc_server.cc',
'browser_ppb_file_ref_rpc_server.cc',
'browser_ppb_file_system_rpc_server.cc',
@@ -54,6 +53,7 @@ env.DualLibrary('ppapi_browser',
'browser_ppb_input_event_rpc_server.cc',
'browser_ppb_instance_rpc_server.cc',
'browser_ppb_messaging_rpc_server.cc',
+ 'browser_ppb_mouse_cursor_rpc_server.cc',
'browser_ppb_mouse_lock_rpc_server.cc',
'browser_ppb_net_address_private_rpc_server.cc',
'browser_ppb_pdf_rpc_server.cc',
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/nacl.scons b/ppapi/native_client/src/shared/ppapi_proxy/nacl.scons
index 911a00c..0409965 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/nacl.scons
+++ b/ppapi/native_client/src/shared/ppapi_proxy/nacl.scons
@@ -60,7 +60,6 @@ libppruntime = env.NaClSdkLibrary(
'plugin_ppb_audio_config.cc',
'plugin_ppb_buffer.cc',
'plugin_ppb_core.cc',
- 'plugin_ppb_cursor_control.cc',
'plugin_ppb_file_io.cc',
'plugin_ppb_file_system.cc',
'plugin_ppb_file_ref.cc',
@@ -76,6 +75,7 @@ libppruntime = env.NaClSdkLibrary(
'plugin_ppb_instance.cc',
'plugin_ppb_memory.cc',
'plugin_ppb_messaging.cc',
+ 'plugin_ppb_mouse_cursor.cc',
'plugin_ppb_mouse_lock.cc',
'plugin_ppb_net_address_private.cc',
'plugin_ppb_pdf.cc',
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc
index 2f2a9b1..e2dbe9a 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc
+++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc
@@ -11,7 +11,6 @@
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_audio_config.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_buffer.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_core.h"
-#include "native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_file_ref.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_file_system.h"
@@ -27,6 +26,7 @@
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_instance.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_memory.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_messaging.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_lock.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.h"
#include "native_client/src/shared/ppapi_proxy/plugin_ppb_pdf.h"
@@ -63,7 +63,7 @@ InterfaceMapElement interface_map[] = {
{ PPB_AUDIO_CONFIG_INTERFACE_1_0, PluginAudioConfig::GetInterface1_0(),
true },
{ PPB_CORE_INTERFACE, PluginCore::GetInterface(), true },
- { PPB_CURSOR_CONTROL_DEV_INTERFACE, PluginCursorControl::GetInterface(),
+ { PPB_MOUSECURSOR_INTERFACE_1_0, PluginMouseCursor::GetInterface(),
true },
{ PPB_FILEIO_INTERFACE, PluginFileIO::GetInterface(), true },
{ PPB_FILEREF_INTERFACE, PluginFileRef::GetInterface(), true },
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.cc
deleted file mode 100644
index a36c992..0000000
--- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.cc
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.h"
-
-#include "native_client/src/include/portability.h"
-#include "native_client/src/shared/ppapi_proxy/plugin_callback.h"
-#include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
-#include "native_client/src/shared/ppapi_proxy/utility.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-#include "ppapi/c/pp_completion_callback.h"
-#include "ppapi/c/pp_errors.h"
-#include "srpcgen/ppb_rpc.h"
-
-namespace ppapi_proxy {
-
-namespace {
-
-const nacl_abi_size_t kPPPointBytes =
- static_cast<nacl_abi_size_t>(sizeof(struct PP_Point));
-
-PP_Bool SetCursor(PP_Instance instance,
- enum PP_CursorType_Dev type,
- PP_Resource custom_image,
- const struct PP_Point* hot_spot) {
- DebugPrintf("PPB_CursorControl::SetCursor: "
- "instance=%"NACL_PRId32"\n", instance);
-
- int32_t hot_spot_size = (hot_spot != NULL) ? kPPPointBytes : 0;
- int32_t success = 0;
- NaClSrpcError srpc_result =
- PpbCursorControlRpcClient::PPB_CursorControl_SetCursor(
- GetMainSrpcChannel(),
- instance,
- type,
- custom_image,
- hot_spot_size,
- reinterpret_cast<char*>(const_cast<struct PP_Point*>(hot_spot)),
- &success);
-
- DebugPrintf("PPB_CursorControl::SetCursor: %s\n",
- NaClSrpcErrorString(srpc_result));
- if (srpc_result == NACL_SRPC_RESULT_OK && success)
- return PP_TRUE;
- return PP_FALSE;
-}
-
-PP_Bool LockCursor(PP_Instance instance) {
- DebugPrintf("PPB_CursorControl::LockCursor: "
- "instance=%"NACL_PRId32"\n", instance);
-
- int32_t success = 0;
- NaClSrpcError srpc_result =
- PpbCursorControlRpcClient::PPB_CursorControl_LockCursor(
- GetMainSrpcChannel(),
- instance,
- &success);
-
- DebugPrintf("PPB_CursorControl::LockCursor: %s\n",
- NaClSrpcErrorString(srpc_result));
-
- if (srpc_result == NACL_SRPC_RESULT_OK && success)
- return PP_TRUE;
- return PP_FALSE;
-}
-
-PP_Bool UnlockCursor(PP_Instance instance) {
- DebugPrintf("PPB_CursorControl::UnlockCursor: "
- "instance=%"NACL_PRId32"\n", instance);
-
- int32_t success = 0;
- NaClSrpcError srpc_result =
- PpbCursorControlRpcClient::PPB_CursorControl_UnlockCursor(
- GetMainSrpcChannel(),
- instance,
- &success);
-
- DebugPrintf("PPB_CursorControl::UnlockCursor: %s\n",
- NaClSrpcErrorString(srpc_result));
-
- if (srpc_result == NACL_SRPC_RESULT_OK && success)
- return PP_TRUE;
- return PP_FALSE;
-}
-
-PP_Bool HasCursorLock(PP_Instance instance) {
- DebugPrintf("PPB_CursorControl::HasCursorLock: "
- "instance=%"NACL_PRId32"\n", instance);
-
- int32_t success = 0;
- NaClSrpcError srpc_result =
- PpbCursorControlRpcClient::PPB_CursorControl_HasCursorLock(
- GetMainSrpcChannel(),
- instance,
- &success);
-
- DebugPrintf("PPB_CursorControl::HasCursorLock: %s\n",
- NaClSrpcErrorString(srpc_result));
-
- if (srpc_result == NACL_SRPC_RESULT_OK && success)
- return PP_TRUE;
- return PP_FALSE;
-}
-
-PP_Bool CanLockCursor(PP_Instance instance) {
- DebugPrintf("PPB_CursorControl::CanLockCursor: "
- "instance=%"NACL_PRId32"\n", instance);
-
- int32_t success = 0;
- NaClSrpcError srpc_result =
- PpbCursorControlRpcClient::PPB_CursorControl_CanLockCursor(
- GetMainSrpcChannel(),
- instance,
- &success);
-
- DebugPrintf("PPB_CursorControl::CanLockCursor: %s\n",
- NaClSrpcErrorString(srpc_result));
-
- if (srpc_result == NACL_SRPC_RESULT_OK && success)
- return PP_TRUE;
- return PP_FALSE;
-}
-
-} // namespace
-
-const PPB_CursorControl_Dev* PluginCursorControl::GetInterface() {
- static const PPB_CursorControl_Dev cursor_control_interface = {
- SetCursor,
- LockCursor,
- UnlockCursor,
- HasCursorLock,
- CanLockCursor
- };
- return &cursor_control_interface;
-}
-
-} // namespace ppapi_proxy
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.h b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.h
deleted file mode 100644
index a90b26f..0000000
--- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_cursor_control.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_PPB_CURSOR_CONTROL_H_
-#define NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_PPB_CURSOR_CONTROL_H_
-
-#include "native_client/src/include/nacl_macros.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-
-namespace ppapi_proxy {
-
-// Implements the untrusted side of the PPB_CursorControl_Dev interface.
-class PluginCursorControl {
- public:
- PluginCursorControl();
- static const PPB_CursorControl_Dev* GetInterface();
-
- private:
- NACL_DISALLOW_COPY_AND_ASSIGN(PluginCursorControl);
-};
-
-} // namespace ppapi_proxy
-
-#endif // NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_PPB_CURSOR_CONTROL_H_
-
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.cc
new file mode 100644
index 0000000..76a2185
--- /dev/null
+++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.cc
@@ -0,0 +1,58 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.h"
+
+#include "native_client/src/include/portability.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_callback.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
+#include "native_client/src/shared/ppapi_proxy/utility.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
+#include "srpcgen/ppb_rpc.h"
+
+namespace ppapi_proxy {
+
+namespace {
+
+const nacl_abi_size_t kPPPointBytes =
+ static_cast<nacl_abi_size_t>(sizeof(struct PP_Point));
+
+PP_Bool SetCursor(PP_Instance instance,
+ enum PP_MouseCursor_Type type,
+ PP_Resource custom_image,
+ const struct PP_Point* hot_spot) {
+ DebugPrintf("PPB_MouseCursor::SetCursor: "
+ "instance=%"NACL_PRId32"\n", instance);
+
+ int32_t hot_spot_size = (hot_spot != NULL) ? kPPPointBytes : 0;
+ int32_t success = 0;
+ NaClSrpcError srpc_result =
+ PpbMouseCursorRpcClient::PPB_MouseCursor_SetCursor(
+ GetMainSrpcChannel(),
+ instance,
+ type,
+ custom_image,
+ hot_spot_size,
+ reinterpret_cast<char*>(const_cast<struct PP_Point*>(hot_spot)),
+ &success);
+
+ DebugPrintf("PPB_MouseCursor::SetCursor: %s\n",
+ NaClSrpcErrorString(srpc_result));
+ if (srpc_result == NACL_SRPC_RESULT_OK && success)
+ return PP_TRUE;
+ return PP_FALSE;
+}
+
+} // namespace
+
+const PPB_MouseCursor_1_0* PluginMouseCursor::GetInterface() {
+ static const PPB_MouseCursor mouse_cursor_interface = {
+ SetCursor,
+ };
+ return &mouse_cursor_interface;
+}
+
+} // namespace ppapi_proxy
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.h b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.h
new file mode 100644
index 0000000..490a8d4
--- /dev/null
+++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_mouse_cursor.h
@@ -0,0 +1,26 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_PPB_MOUSE_CURSOR_H_
+#define NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_PPB_MOUSE_CURSOR_H_
+
+#include "native_client/src/include/nacl_macros.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
+
+namespace ppapi_proxy {
+
+// Implements the untrusted side of the PPB_MouseCursor interface.
+class PluginMouseCursor {
+ public:
+ PluginMouseCursor();
+ static const PPB_MouseCursor_1_0* GetInterface();
+
+ private:
+ NACL_DISALLOW_COPY_AND_ASSIGN(PluginMouseCursor);
+};
+
+} // namespace ppapi_proxy
+
+#endif // NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_PPB_MOUSE_CURSOR_H_
+
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp
index 5922275..4918710 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp
+++ b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp
@@ -34,7 +34,6 @@
'browser_ppb_audio_config_rpc_server.cc',
'browser_ppb_audio_rpc_server.cc',
'browser_ppb_core_rpc_server.cc',
- 'browser_ppb_cursor_control_rpc_server.cc',
'browser_ppb_file_io_rpc_server.cc',
'browser_ppb_file_ref_rpc_server.cc',
'browser_ppb_file_system_rpc_server.cc',
@@ -49,6 +48,7 @@
'browser_ppb_input_event_rpc_server.cc',
'browser_ppb_instance_rpc_server.cc',
'browser_ppb_messaging_rpc_server.cc',
+ 'browser_ppb_mouse_cursor_rpc_server.cc',
'browser_ppb_mouse_lock_rpc_server.cc',
'browser_ppb_net_address_private_rpc_server.cc',
'browser_ppb_pdf_rpc_server.cc',
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp
index d2dff3d..5761d0e 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp
+++ b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp
@@ -57,7 +57,6 @@
'plugin_ppb_audio_config.cc',
'plugin_ppb_buffer.cc',
'plugin_ppb_core.cc',
- 'plugin_ppb_cursor_control.cc',
'plugin_ppb_file_io.cc',
'plugin_ppb_file_system.cc',
'plugin_ppb_file_ref.cc',
@@ -73,6 +72,7 @@
'plugin_ppb_instance.cc',
'plugin_ppb_memory.cc',
'plugin_ppb_messaging.cc',
+ 'plugin_ppb_mouse_cursor.cc',
'plugin_ppb_mouse_lock.cc',
'plugin_ppb_net_address_private.cc',
'plugin_ppb_pdf.cc',
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_cursor_control.srpc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_cursor_control.srpc
deleted file mode 100644
index 1b1115b..0000000
--- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_cursor_control.srpc
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2011 The Native Client Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# RPC methods used to implement PPB_CursorControl calls from the plugin.
-# See ppapi/c/ppb_cursor_control_dev.h for interface details.
-
-{
- 'name': 'PpbCursorControlRpc',
- 'rpcs': [
- {'name': 'PPB_CursorControl_SetCursor',
- 'inputs': [['instance', 'PP_Instance'], # PP_Instance
- ['type', 'int32_t'], # PP_CursorType_Dev
- ['custom_image', 'PP_Resource'], # PP_Resource
- ['hot_spot', 'char[]'], # PP_Point
- ],
- 'outputs': [['success', 'int32_t'], # PP_Bool
- ]
- },
- {'name': 'PPB_CursorControl_LockCursor',
- 'inputs': [['instance', 'PP_Instance'], # PP_Instance
- ],
- 'outputs': [['success', 'int32_t'], # PP_Bool
- ]
- },
- {'name': 'PPB_CursorControl_UnlockCursor',
- 'inputs': [['instance', 'PP_Instance'], # PP_Instance
- ],
- 'outputs': [['success', 'int32_t'], # PP_Bool
- ]
- },
- {'name': 'PPB_CursorControl_HasCursorLock',
- 'inputs': [['instance', 'PP_Instance'], # PP_Instance
- ],
- 'outputs': [['success', 'int32_t'], # PP_Bool
- ]
- },
- {'name': 'PPB_CursorControl_CanLockCursor',
- 'inputs': [['instance', 'PP_Instance'], # PP_Instance
- ],
- 'outputs': [['success', 'int32_t'], # PP_Bool
- ]
- },
- ]
-}
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_mouse_cursor.srpc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_mouse_cursor.srpc
new file mode 100644
index 0000000..474e68b
--- /dev/null
+++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_mouse_cursor.srpc
@@ -0,0 +1,20 @@
+# Copyright (c) 2011 The Native Client Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# RPC methods used to implement PPB_MouseCursor calls from the plugin.
+
+{
+ 'name': 'PpbMouseCursorRpc',
+ 'rpcs': [
+ {'name': 'PPB_MouseCursor_SetCursor',
+ 'inputs': [['instance', 'PP_Instance'], # PP_Instance
+ ['type', 'int32_t'], # PP_MouseCursor_Type
+ ['custom_image', 'PP_Resource'], # PP_Resource
+ ['hot_spot', 'char[]'], # PP_Point
+ ],
+ 'outputs': [['success', 'int32_t'], # PP_Bool
+ ]
+ },
+ ]
+}
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc
index c869403..5f139eb 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc
+++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc
@@ -385,97 +385,6 @@ NaClSrpcError PpbCoreRpcClient::PPB_Core_CallOnMainThread(
return retval;
}
-NaClSrpcError PpbCursorControlRpcClient::PPB_CursorControl_SetCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t type,
- PP_Resource custom_image,
- nacl_abi_size_t hot_spot_bytes, char* hot_spot,
- int32_t* success) {
- VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(),
- ("%s: PPAPI calls are not supported off the main thread\n",
- __FUNCTION__));
- NaClSrpcError retval;
- retval = NaClSrpcInvokeBySignature(
- channel,
- "PPB_CursorControl_SetCursor:iiiC:i",
- instance,
- type,
- custom_image,
- hot_spot_bytes, hot_spot,
- success
- );
- return retval;
-}
-
-NaClSrpcError PpbCursorControlRpcClient::PPB_CursorControl_LockCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success) {
- VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(),
- ("%s: PPAPI calls are not supported off the main thread\n",
- __FUNCTION__));
- NaClSrpcError retval;
- retval = NaClSrpcInvokeBySignature(
- channel,
- "PPB_CursorControl_LockCursor:i:i",
- instance,
- success
- );
- return retval;
-}
-
-NaClSrpcError PpbCursorControlRpcClient::PPB_CursorControl_UnlockCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success) {
- VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(),
- ("%s: PPAPI calls are not supported off the main thread\n",
- __FUNCTION__));
- NaClSrpcError retval;
- retval = NaClSrpcInvokeBySignature(
- channel,
- "PPB_CursorControl_UnlockCursor:i:i",
- instance,
- success
- );
- return retval;
-}
-
-NaClSrpcError PpbCursorControlRpcClient::PPB_CursorControl_HasCursorLock(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success) {
- VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(),
- ("%s: PPAPI calls are not supported off the main thread\n",
- __FUNCTION__));
- NaClSrpcError retval;
- retval = NaClSrpcInvokeBySignature(
- channel,
- "PPB_CursorControl_HasCursorLock:i:i",
- instance,
- success
- );
- return retval;
-}
-
-NaClSrpcError PpbCursorControlRpcClient::PPB_CursorControl_CanLockCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success) {
- VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(),
- ("%s: PPAPI calls are not supported off the main thread\n",
- __FUNCTION__));
- NaClSrpcError retval;
- retval = NaClSrpcInvokeBySignature(
- channel,
- "PPB_CursorControl_CanLockCursor:i:i",
- instance,
- success
- );
- return retval;
-}
-
NaClSrpcError PpbFileIORpcClient::PPB_FileIO_Create(
NaClSrpcChannel* channel,
PP_Instance instance,
@@ -2047,6 +1956,29 @@ NaClSrpcError PpbMessagingRpcClient::PPB_Messaging_PostMessage(
return retval;
}
+NaClSrpcError PpbMouseCursorRpcClient::PPB_MouseCursor_SetCursor(
+ NaClSrpcChannel* channel,
+ PP_Instance instance,
+ int32_t type,
+ PP_Resource custom_image,
+ nacl_abi_size_t hot_spot_bytes, char* hot_spot,
+ int32_t* success) {
+ VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(),
+ ("%s: PPAPI calls are not supported off the main thread\n",
+ __FUNCTION__));
+ NaClSrpcError retval;
+ retval = NaClSrpcInvokeBySignature(
+ channel,
+ "PPB_MouseCursor_SetCursor:iiiC:i",
+ instance,
+ type,
+ custom_image,
+ hot_spot_bytes, hot_spot,
+ success
+ );
+ return retval;
+}
+
NaClSrpcError PpbMouseLockRpcClient::PPB_MouseLock_LockMouse(
NaClSrpcChannel* channel,
PP_Instance instance,
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc
index d059fca..c7ef961 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc
+++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc
@@ -329,79 +329,6 @@ static void PPB_Core_CallOnMainThreadDispatcher(
);
}
-static void PPB_CursorControl_SetCursorDispatcher(
- NaClSrpcRpc* rpc,
- NaClSrpcArg** inputs,
- NaClSrpcArg** outputs,
- NaClSrpcClosure* done
-) {
- PpbCursorControlRpcServer::PPB_CursorControl_SetCursor(
- rpc,
- done,
- inputs[0]->u.ival,
- inputs[1]->u.ival,
- inputs[2]->u.ival,
- inputs[3]->u.count, inputs[3]->arrays.carr,
- &(outputs[0]->u.ival)
- );
-}
-
-static void PPB_CursorControl_LockCursorDispatcher(
- NaClSrpcRpc* rpc,
- NaClSrpcArg** inputs,
- NaClSrpcArg** outputs,
- NaClSrpcClosure* done
-) {
- PpbCursorControlRpcServer::PPB_CursorControl_LockCursor(
- rpc,
- done,
- inputs[0]->u.ival,
- &(outputs[0]->u.ival)
- );
-}
-
-static void PPB_CursorControl_UnlockCursorDispatcher(
- NaClSrpcRpc* rpc,
- NaClSrpcArg** inputs,
- NaClSrpcArg** outputs,
- NaClSrpcClosure* done
-) {
- PpbCursorControlRpcServer::PPB_CursorControl_UnlockCursor(
- rpc,
- done,
- inputs[0]->u.ival,
- &(outputs[0]->u.ival)
- );
-}
-
-static void PPB_CursorControl_HasCursorLockDispatcher(
- NaClSrpcRpc* rpc,
- NaClSrpcArg** inputs,
- NaClSrpcArg** outputs,
- NaClSrpcClosure* done
-) {
- PpbCursorControlRpcServer::PPB_CursorControl_HasCursorLock(
- rpc,
- done,
- inputs[0]->u.ival,
- &(outputs[0]->u.ival)
- );
-}
-
-static void PPB_CursorControl_CanLockCursorDispatcher(
- NaClSrpcRpc* rpc,
- NaClSrpcArg** inputs,
- NaClSrpcArg** outputs,
- NaClSrpcClosure* done
-) {
- PpbCursorControlRpcServer::PPB_CursorControl_CanLockCursor(
- rpc,
- done,
- inputs[0]->u.ival,
- &(outputs[0]->u.ival)
- );
-}
-
static void PPB_FileIO_CreateDispatcher(
NaClSrpcRpc* rpc,
NaClSrpcArg** inputs,
@@ -1634,6 +1561,23 @@ static void PPB_Messaging_PostMessageDispatcher(
);
}
+static void PPB_MouseCursor_SetCursorDispatcher(
+ NaClSrpcRpc* rpc,
+ NaClSrpcArg** inputs,
+ NaClSrpcArg** outputs,
+ NaClSrpcClosure* done
+) {
+ PpbMouseCursorRpcServer::PPB_MouseCursor_SetCursor(
+ rpc,
+ done,
+ inputs[0]->u.ival,
+ inputs[1]->u.ival,
+ inputs[2]->u.ival,
+ inputs[3]->u.count, inputs[3]->arrays.carr,
+ &(outputs[0]->u.ival)
+ );
+}
+
static void PPB_MouseLock_LockMouseDispatcher(
NaClSrpcRpc* rpc,
NaClSrpcArg** inputs,
@@ -3188,11 +3132,6 @@ NaClSrpcHandlerDesc PpbRpcs::srpc_methods[] = {
{ "PPB_Core_GetTime::d", PPB_Core_GetTimeDispatcher },
{ "PPB_Core_GetTimeTicks::d", PPB_Core_GetTimeTicksDispatcher },
{ "PPB_Core_CallOnMainThread:iii:", PPB_Core_CallOnMainThreadDispatcher },
- { "PPB_CursorControl_SetCursor:iiiC:i", PPB_CursorControl_SetCursorDispatcher },
- { "PPB_CursorControl_LockCursor:i:i", PPB_CursorControl_LockCursorDispatcher },
- { "PPB_CursorControl_UnlockCursor:i:i", PPB_CursorControl_UnlockCursorDispatcher },
- { "PPB_CursorControl_HasCursorLock:i:i", PPB_CursorControl_HasCursorLockDispatcher },
- { "PPB_CursorControl_CanLockCursor:i:i", PPB_CursorControl_CanLockCursorDispatcher },
{ "PPB_FileIO_Create:i:i", PPB_FileIO_CreateDispatcher },
{ "PPB_FileIO_IsFileIO:i:i", PPB_FileIO_IsFileIODispatcher },
{ "PPB_FileIO_Open:iiii:i", PPB_FileIO_OpenDispatcher },
@@ -3272,6 +3211,7 @@ NaClSrpcHandlerDesc PpbRpcs::srpc_methods[] = {
{ "PPB_Instance_BindGraphics:ii:i", PPB_Instance_BindGraphicsDispatcher },
{ "PPB_Instance_IsFullFrame:i:i", PPB_Instance_IsFullFrameDispatcher },
{ "PPB_Messaging_PostMessage:iC:", PPB_Messaging_PostMessageDispatcher },
+ { "PPB_MouseCursor_SetCursor:iiiC:i", PPB_MouseCursor_SetCursorDispatcher },
{ "PPB_MouseLock_LockMouse:ii:i", PPB_MouseLock_LockMouseDispatcher },
{ "PPB_MouseLock_UnlockMouse:i:", PPB_MouseLock_UnlockMouseDispatcher },
{ "PPB_NetAddress_Private_AreEqual:CC:i", PPB_NetAddress_Private_AreEqualDispatcher },
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/run_srpcgen.py b/ppapi/native_client/src/shared/ppapi_proxy/run_srpcgen.py
index 62b4779..9876124 100755
--- a/ppapi/native_client/src/shared/ppapi_proxy/run_srpcgen.py
+++ b/ppapi/native_client/src/shared/ppapi_proxy/run_srpcgen.py
@@ -61,7 +61,6 @@ all_units = [
'ppb_audio.srpc',
'ppb_audio_config.srpc',
'ppb_core.srpc',
- 'ppb_cursor_control.srpc',
'ppb_file_io.srpc',
'ppb_file_ref.srpc',
'ppb_file_system.srpc',
@@ -76,6 +75,7 @@ all_units = [
'ppb_input_event.srpc',
'ppb_instance.srpc',
'ppb_messaging.srpc',
+ 'ppb_mouse_cursor.srpc',
'ppb_mouse_lock.srpc',
'ppb_net_address_private.srpc',
'ppb_pdf.srpc',
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h b/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h
index 863f907..efd393b 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h
+++ b/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h
@@ -174,43 +174,6 @@ class PpbCoreRpcServer {
void operator=(const PpbCoreRpcServer);
}; // class PpbCoreRpcServer
-class PpbCursorControlRpcServer {
- public:
- static void PPB_CursorControl_SetCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t type,
- PP_Resource custom_image,
- nacl_abi_size_t hot_spot_bytes, char* hot_spot,
- int32_t* success);
- static void PPB_CursorControl_LockCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success);
- static void PPB_CursorControl_UnlockCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success);
- static void PPB_CursorControl_HasCursorLock(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success);
- static void PPB_CursorControl_CanLockCursor(
- NaClSrpcRpc* rpc,
- NaClSrpcClosure* done,
- PP_Instance instance,
- int32_t* success);
-
- private:
- PpbCursorControlRpcServer();
- PpbCursorControlRpcServer(const PpbCursorControlRpcServer&);
- void operator=(const PpbCursorControlRpcServer);
-}; // class PpbCursorControlRpcServer
-
class PpbFileIORpcServer {
public:
static void PPB_FileIO_Create(
@@ -846,6 +809,23 @@ class PpbMessagingRpcServer {
void operator=(const PpbMessagingRpcServer);
}; // class PpbMessagingRpcServer
+class PpbMouseCursorRpcServer {
+ public:
+ static void PPB_MouseCursor_SetCursor(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Instance instance,
+ int32_t type,
+ PP_Resource custom_image,
+ nacl_abi_size_t hot_spot_bytes, char* hot_spot,
+ int32_t* success);
+
+ private:
+ PpbMouseCursorRpcServer();
+ PpbMouseCursorRpcServer(const PpbMouseCursorRpcServer&);
+ void operator=(const PpbMouseCursorRpcServer);
+}; // class PpbMouseCursorRpcServer
+
class PpbMouseLockRpcServer {
public:
static void PPB_MouseLock_LockMouse(
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h b/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h
index 288455f..a54103b 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h
+++ b/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h
@@ -153,38 +153,6 @@ class PpbCoreRpcClient {
void operator=(const PpbCoreRpcClient);
}; // class PpbCoreRpcClient
-class PpbCursorControlRpcClient {
- public:
- static NaClSrpcError PPB_CursorControl_SetCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t type,
- PP_Resource custom_image,
- nacl_abi_size_t hot_spot_bytes, char* hot_spot,
- int32_t* success);
- static NaClSrpcError PPB_CursorControl_LockCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success);
- static NaClSrpcError PPB_CursorControl_UnlockCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success);
- static NaClSrpcError PPB_CursorControl_HasCursorLock(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success);
- static NaClSrpcError PPB_CursorControl_CanLockCursor(
- NaClSrpcChannel* channel,
- PP_Instance instance,
- int32_t* success);
-
- private:
- PpbCursorControlRpcClient();
- PpbCursorControlRpcClient(const PpbCursorControlRpcClient&);
- void operator=(const PpbCursorControlRpcClient);
-}; // class PpbCursorControlRpcClient
-
class PpbFileIORpcClient {
public:
static NaClSrpcError PPB_FileIO_Create(
@@ -741,6 +709,22 @@ class PpbMessagingRpcClient {
void operator=(const PpbMessagingRpcClient);
}; // class PpbMessagingRpcClient
+class PpbMouseCursorRpcClient {
+ public:
+ static NaClSrpcError PPB_MouseCursor_SetCursor(
+ NaClSrpcChannel* channel,
+ PP_Instance instance,
+ int32_t type,
+ PP_Resource custom_image,
+ nacl_abi_size_t hot_spot_bytes, char* hot_spot,
+ int32_t* success);
+
+ private:
+ PpbMouseCursorRpcClient();
+ PpbMouseCursorRpcClient(const PpbMouseCursorRpcClient&);
+ void operator=(const PpbMouseCursorRpcClient);
+}; // class PpbMouseCursorRpcClient
+
class PpbMouseLockRpcClient {
public:
static NaClSrpcError PPB_MouseLock_LockMouse(
diff --git a/ppapi/native_client/tests/ppapi_browser/ppb_dev/ppapi_ppb_dev.cc b/ppapi/native_client/tests/ppapi_browser/ppb_dev/ppapi_ppb_dev.cc
index 964b1f3..6cbd907 100644
--- a/ppapi/native_client/tests/ppapi_browser/ppb_dev/ppapi_ppb_dev.cc
+++ b/ppapi/native_client/tests/ppapi_browser/ppb_dev/ppapi_ppb_dev.cc
@@ -12,12 +12,11 @@
#include "native_client/src/shared/ppapi_proxy/plugin_nacl_file.h"
#include "native_client/tests/ppapi_test_lib/get_browser_interface.h"
#include "native_client/tests/ppapi_test_lib/test_interface.h"
+#include "ppapi/c/dev/ppb_zoom_dev.h"
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppb_core.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-
namespace {
////////////////////////////////////////////////////////////////////////////////
@@ -25,11 +24,7 @@ namespace {
////////////////////////////////////////////////////////////////////////////////
void TestGetDevInterfaces() {
- // This test is run as a simple embedded .nexe with --enable-nacl. It should
- // have access to all dev interfaces. Only test one to make the test more
- // robust as interfaces change.
- EXPECT(GetBrowserInterface(PPB_CURSOR_CONTROL_DEV_INTERFACE) != NULL);
-
+ // TODO(brettw) remove this test.
TEST_PASSED;
}
diff --git a/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc b/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc
index 42376a1..c4c419a 100644
--- a/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc
+++ b/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc
@@ -4,7 +4,6 @@
#include "native_client/src/shared/platform/nacl_check.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
#include "ppapi/c/dev/ppb_font_dev.h"
#include "ppapi/c/dev/ppb_memory_dev.h"
#include "ppapi/c/dev/ppb_scrollbar_dev.h"
@@ -24,6 +23,7 @@
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/c/ppb_instance.h"
#include "ppapi/c/ppb_messaging.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
#include "ppapi/c/ppb_opengles2.h"
#include "ppapi/c/ppb_url_loader.h"
#include "ppapi/c/ppb_url_request_info.h"
@@ -118,6 +118,11 @@ const PPB_Messaging* PPBMessaging() {
GetBrowserInterfaceSafe(PPB_MESSAGING_INTERFACE));
}
+const PPB_MouseCursor_1_0* PPBMouseCursor() {
+ return reinterpret_cast<const PPB_MouseCursor_1_0*>(
+ GetBrowserInterfaceSafe(PPB_MOUSECURSOR_INTERFACE_1_0));
+}
+
const PPB_MouseInputEvent* PPBMouseInputEvent() {
return reinterpret_cast<const PPB_MouseInputEvent*>(
GetBrowserInterfaceSafe(PPB_MOUSE_INPUT_EVENT_INTERFACE));
@@ -156,12 +161,6 @@ const PPB_WheelInputEvent* PPBWheelInputEvent() {
// Dev interfaces.
-const PPB_CursorControl_Dev* PPBCursorControlDev() {
- return reinterpret_cast<const PPB_CursorControl_Dev*>(
- // Change to GetBrowserInterfaceSafe when moving out of dev.
- GetBrowserInterface(PPB_CURSOR_CONTROL_DEV_INTERFACE));
-}
-
const PPB_Font_Dev* PPBFontDev() {
return reinterpret_cast<const PPB_Font_Dev*>(
// Change to GetBrowserInterfaceSafe when moving out of dev.
diff --git a/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h b/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h
index 300d92d..30266a2 100644
--- a/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h
+++ b/ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h
@@ -21,13 +21,13 @@
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/c/ppb_instance.h"
#include "ppapi/c/ppb_messaging.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
#include "ppapi/c/ppb_opengles2.h"
#include "ppapi/c/ppb_url_loader.h"
#include "ppapi/c/ppb_url_request_info.h"
#include "ppapi/c/ppb_url_response_info.h"
#include "ppapi/c/ppb_var.h"
#include "ppapi/c/ppb_view.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
#include "ppapi/c/dev/ppb_font_dev.h"
#include "ppapi/c/dev/ppb_memory_dev.h"
#include "ppapi/c/dev/ppb_scrollbar_dev.h"
@@ -58,6 +58,7 @@ const PPB_InputEvent* PPBInputEvent();
const PPB_Instance* PPBInstance();
const PPB_KeyboardInputEvent* PPBKeyboardInputEvent();
const PPB_Messaging* PPBMessaging();
+const PPB_MouseCursor* PPBMouseCursor();
const PPB_MouseInputEvent* PPBMouseInputEvent();
const PPB_OpenGLES2* PPBOpenGLES2();
const PPB_URLLoader* PPBURLLoader();
@@ -72,7 +73,6 @@ const PPB_WheelInputEvent* PPBWheelInputEvent();
// Lookup returns NULL if the interface is not available.
//
-const PPB_CursorControl_Dev* PPBCursorControlDev();
const PPB_Font_Dev* PPBFontDev();
const PPB_Memory_Dev* PPBMemoryDev();
const PPB_Scrollbar_Dev* PPBScrollbarDev();
diff --git a/ppapi/native_client/tests/ppapi_tests/nacl.scons b/ppapi/native_client/tests/ppapi_tests/nacl.scons
index b590a84..50edb2d 100644
--- a/ppapi/native_client/tests/ppapi_tests/nacl.scons
+++ b/ppapi/native_client/tests/ppapi_tests/nacl.scons
@@ -37,7 +37,6 @@ ppapi_tests_sources = [
#'test_buffer.cc',
# Not yet proxied.
#'test_char_set.cc',
- 'test_cursor_control.cc',
# Fails in DeleteDirectoryRecursively.
# BUG: http://code.google.com/p/nativeclient/issues/detail?id=2107
#'test_directory_reader.cc',
@@ -45,6 +44,7 @@ ppapi_tests_sources = [
'test_file_ref.cc',
'test_file_system.cc',
'test_memory.cc',
+ 'test_mouse_cursor.cc',
'test_graphics_2d.cc',
'test_image_data.cc',
'test_paint_aggregator.cc',
diff --git a/ppapi/ppapi_proxy.gypi b/ppapi/ppapi_proxy.gypi
index d28fe32..472d484 100644
--- a/ppapi/ppapi_proxy.gypi
+++ b/ppapi/ppapi_proxy.gypi
@@ -80,8 +80,6 @@
'proxy/ppb_buffer_proxy.h',
'proxy/ppb_core_proxy.cc',
'proxy/ppb_core_proxy.h',
- 'proxy/ppb_cursor_control_proxy.cc',
- 'proxy/ppb_cursor_control_proxy.h',
'proxy/ppb_file_chooser_proxy.cc',
'proxy/ppb_file_chooser_proxy.h',
'proxy/ppb_file_io_proxy.cc',
diff --git a/ppapi/ppapi_shared.gypi b/ppapi/ppapi_shared.gypi
index af2bf84..187afaf 100644
--- a/ppapi/ppapi_shared.gypi
+++ b/ppapi/ppapi_shared.gypi
@@ -210,6 +210,7 @@
'thunk/ppb_layer_compositor_thunk.cc',
'thunk/ppb_message_loop_api.h',
'thunk/ppb_messaging_thunk.cc',
+ 'thunk/ppb_mouse_cursor_thunk.cc',
'thunk/ppb_mouse_lock_thunk.cc',
'thunk/ppb_network_list_private_api.h',
'thunk/ppb_network_list_private_thunk.cc',
diff --git a/ppapi/ppapi_sources.gypi b/ppapi/ppapi_sources.gypi
index 3ec8c27..67243b0 100644
--- a/ppapi/ppapi_sources.gypi
+++ b/ppapi/ppapi_sources.gypi
@@ -37,6 +37,7 @@
'c/ppb_input_event.h',
'c/ppb_instance.h',
'c/ppb_messaging.h',
+ 'c/ppb_mouse_cursor.h',
'c/ppb_mouse_lock.h',
'c/ppb_opengles2.h',
'c/ppb_url_loader.h',
@@ -165,6 +166,8 @@
'cpp/module.cc',
'cpp/module.h',
'cpp/module_impl.h',
+ 'cpp/mouse_cursor.cc',
+ 'cpp/mouse_cursor.h',
'cpp/mouse_lock.cc',
'cpp/mouse_lock.h',
'cpp/output_traits.h',
@@ -348,6 +351,7 @@
'tests/test_graphics_2d.cc',
'tests/test_image_data.cc',
'tests/test_memory.cc',
+ 'tests/test_mouse_cursor.cc',
'tests/test_paint_aggregator.cc',
'tests/test_post_message.cc',
'tests/test_scrollbar.cc',
@@ -413,6 +417,7 @@
'tests/test_input_event.h',
'tests/test_memory.cc',
'tests/test_memory.h',
+ 'tests/test_mouse_cursor.cc',
'tests/test_net_address_private.cc',
'tests/test_net_address_private.h',
'tests/test_network_monitor_private.cc',
diff --git a/ppapi/ppapi_tests.gypi b/ppapi/ppapi_tests.gypi
index 96d914f..56f9c66 100644
--- a/ppapi/ppapi_tests.gypi
+++ b/ppapi/ppapi_tests.gypi
@@ -224,6 +224,16 @@
},
},
{
+ 'target_name': 'ppapi_example_mouse_cursor',
+ 'dependencies': [
+ 'ppapi_example_skeleton',
+ 'ppapi.gyp:ppapi_cpp',
+ ],
+ 'sources': [
+ 'examples/mouse_cursor/mouse_cursor.cc',
+ ],
+ },
+ {
'target_name': 'ppapi_example_mouse_lock',
'dependencies': [
'ppapi_example_skeleton',
diff --git a/ppapi/proxy/interface_list.cc b/ppapi/proxy/interface_list.cc
index 5d42468..53b8db1 100644
--- a/ppapi/proxy/interface_list.cc
+++ b/ppapi/proxy/interface_list.cc
@@ -75,7 +75,6 @@
#include "ppapi/proxy/ppb_broker_proxy.h"
#include "ppapi/proxy/ppb_buffer_proxy.h"
#include "ppapi/proxy/ppb_core_proxy.h"
-#include "ppapi/proxy/ppb_cursor_control_proxy.h"
#include "ppapi/proxy/ppb_file_chooser_proxy.h"
#include "ppapi/proxy/ppb_file_io_proxy.h"
#include "ppapi/proxy/ppb_file_ref_proxy.h"
diff --git a/ppapi/proxy/plugin_dispatcher.cc b/ppapi/proxy/plugin_dispatcher.cc
index 11eea64..31e20ba 100644
--- a/ppapi/proxy/plugin_dispatcher.cc
+++ b/ppapi/proxy/plugin_dispatcher.cc
@@ -20,7 +20,6 @@
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/plugin_var_serialization_rules.h"
#include "ppapi/proxy/ppapi_messages.h"
-#include "ppapi/proxy/ppb_cursor_control_proxy.h"
#include "ppapi/proxy/ppb_instance_proxy.h"
#include "ppapi/proxy/ppp_class_proxy.h"
#include "ppapi/proxy/resource_creation_proxy.h"
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index 1d288dd..4c9b744 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -675,26 +675,6 @@ IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBCore_AddRefResource,
IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBCore_ReleaseResource,
ppapi::HostResource)
-// PPB_CursorControl.
-IPC_SYNC_MESSAGE_ROUTED4_1(PpapiHostMsg_PPBCursorControl_SetCursor,
- PP_Instance /* instance */,
- int32_t /* type */,
- ppapi::HostResource /* custom_image */,
- PP_Point /* hot_spot */,
- PP_Bool /* result */)
-IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBCursorControl_LockCursor,
- PP_Instance /* instance */,
- PP_Bool /* result */)
-IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBCursorControl_UnlockCursor,
- PP_Instance /* instance */,
- PP_Bool /* result */)
-IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBCursorControl_HasCursorLock,
- PP_Instance /* instance */,
- PP_Bool /* result */)
-IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBCursorControl_CanLockCursor,
- PP_Instance /* instance */,
- PP_Bool /* result */)
-
// PPB_FileChooser.
IPC_SYNC_MESSAGE_ROUTED3_1(PpapiHostMsg_PPBFileChooser_Create,
PP_Instance /* instance */,
@@ -944,6 +924,11 @@ IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBInstance_GetDocumentURL,
IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBInstance_GetPluginInstanceURL,
PP_Instance /* active */,
ppapi::proxy::SerializedVar /* result */)
+IPC_MESSAGE_ROUTED4(PpapiHostMsg_PPBInstance_SetCursor,
+ PP_Instance /* instance */,
+ int32_t /* type */,
+ ppapi::HostResource /* custom_image */,
+ PP_Point /* hot_spot */)
IPC_SYNC_MESSAGE_ROUTED3_1(
PpapiHostMsg_PPBPDF_GetFontFileWithFallback,
diff --git a/ppapi/proxy/ppb_cursor_control_proxy.cc b/ppapi/proxy/ppb_cursor_control_proxy.cc
deleted file mode 100644
index a795975..0000000
--- a/ppapi/proxy/ppb_cursor_control_proxy.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ppapi/proxy/ppb_cursor_control_proxy.h"
-
-#include "ppapi/c/dev/pp_cursor_type_dev.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
-#include "ppapi/proxy/ppapi_messages.h"
-#include "ppapi/shared_impl/ppapi_globals.h"
-#include "ppapi/thunk/enter.h"
-#include "ppapi/thunk/thunk.h"
-
-using ppapi::thunk::EnterFunctionNoLock;
-using ppapi::thunk::PPB_CursorControl_FunctionAPI;
-
-namespace ppapi {
-namespace proxy {
-
-PPB_CursorControl_Proxy::PPB_CursorControl_Proxy(Dispatcher* dispatcher)
- : InterfaceProxy(dispatcher) {
-}
-
-PPB_CursorControl_Proxy::~PPB_CursorControl_Proxy() {
-}
-
-ppapi::thunk::PPB_CursorControl_FunctionAPI*
-PPB_CursorControl_Proxy::AsPPB_CursorControl_FunctionAPI() {
- return this;
-}
-
-PP_Bool PPB_CursorControl_Proxy::SetCursor(PP_Instance instance,
- PP_CursorType_Dev type,
- PP_Resource custom_image_id,
- const PP_Point* hot_spot) {
- // It's legal for the image ID to be null if the type is not custom.
- HostResource cursor_image_resource;
- if (type == PP_CURSORTYPE_CUSTOM) {
- Resource* cursor_image =
- PpapiGlobals::Get()->GetResourceTracker()->GetResource(custom_image_id);
- if (!cursor_image || cursor_image->pp_instance() != instance)
- return PP_FALSE;
- cursor_image_resource = cursor_image->host_resource();
- } else {
- if (custom_image_id)
- return PP_FALSE; // Image specified for a predefined type.
- }
-
- PP_Bool result = PP_FALSE;
- PP_Point empty_point = { 0, 0 };
- dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_SetCursor(
- API_ID_PPB_CURSORCONTROL,
- instance, static_cast<int32_t>(type), cursor_image_resource,
- hot_spot ? *hot_spot : empty_point, &result));
- return result;
-}
-
-PP_Bool PPB_CursorControl_Proxy::LockCursor(PP_Instance instance) {
- PP_Bool result = PP_FALSE;
- dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_LockCursor(
- API_ID_PPB_CURSORCONTROL, instance, &result));
- return result;
-}
-
-PP_Bool PPB_CursorControl_Proxy::UnlockCursor(PP_Instance instance) {
- PP_Bool result = PP_FALSE;
- dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_UnlockCursor(
- API_ID_PPB_CURSORCONTROL, instance, &result));
- return result;
-}
-
-PP_Bool PPB_CursorControl_Proxy::HasCursorLock(PP_Instance instance) {
- PP_Bool result = PP_FALSE;
- dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_HasCursorLock(
- API_ID_PPB_CURSORCONTROL, instance, &result));
- return result;
-}
-
-PP_Bool PPB_CursorControl_Proxy::CanLockCursor(PP_Instance instance) {
- PP_Bool result = PP_FALSE;
- dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_CanLockCursor(
- API_ID_PPB_CURSORCONTROL, instance, &result));
- return result;
-}
-
-bool PPB_CursorControl_Proxy::OnMessageReceived(const IPC::Message& msg) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(PPB_CursorControl_Proxy, msg)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_SetCursor,
- OnMsgSetCursor)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_LockCursor,
- OnMsgLockCursor)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_UnlockCursor,
- OnMsgUnlockCursor)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_HasCursorLock,
- OnMsgHasCursorLock)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_CanLockCursor,
- OnMsgCanLockCursor)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- // TODO(brettw): handle bad messages!
- return handled;
-}
-
-void PPB_CursorControl_Proxy::OnMsgSetCursor(PP_Instance instance,
- int32_t type,
- const HostResource& custom_image,
- const PP_Point& hot_spot,
- PP_Bool* result) {
- EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.succeeded()) {
- *result = enter.functions()->SetCursor(
- instance, static_cast<PP_CursorType_Dev>(type),
- custom_image.host_resource(), &hot_spot);
- }
-}
-
-void PPB_CursorControl_Proxy::OnMsgLockCursor(PP_Instance instance,
- PP_Bool* result) {
- EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.succeeded())
- *result = enter.functions()->LockCursor(instance);
-}
-
-void PPB_CursorControl_Proxy::OnMsgUnlockCursor(PP_Instance instance,
- PP_Bool* result) {
- EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.succeeded())
- *result = enter.functions()->UnlockCursor(instance);
-}
-
-void PPB_CursorControl_Proxy::OnMsgHasCursorLock(PP_Instance instance,
- PP_Bool* result) {
- EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.succeeded())
- *result = enter.functions()->HasCursorLock(instance);
-}
-
-void PPB_CursorControl_Proxy::OnMsgCanLockCursor(PP_Instance instance,
- PP_Bool* result) {
- EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.succeeded())
- *result = enter.functions()->CanLockCursor(instance);
-}
-
-} // namespace proxy
-} // namespace ppapi
diff --git a/ppapi/proxy/ppb_cursor_control_proxy.h b/ppapi/proxy/ppb_cursor_control_proxy.h
deleted file mode 100644
index f2d3e2c..0000000
--- a/ppapi/proxy/ppb_cursor_control_proxy.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PPAPI_PROXY_PPB_CURSOR_CONTROL_PROXY_H_
-#define PPAPI_PROXY_PPB_CURSOR_CONTROL_PROXY_H_
-
-#include "ppapi/c/pp_completion_callback.h"
-#include "ppapi/c/pp_bool.h"
-#include "ppapi/c/pp_instance.h"
-#include "ppapi/c/pp_point.h"
-#include "ppapi/c/pp_resource.h"
-#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/shared_impl/function_group_base.h"
-#include "ppapi/shared_impl/host_resource.h"
-#include "ppapi/thunk/ppb_cursor_control_api.h"
-
-namespace ppapi {
-namespace proxy {
-
-class PPB_CursorControl_Proxy
- : public InterfaceProxy,
- public ppapi::thunk::PPB_CursorControl_FunctionAPI {
- public:
- explicit PPB_CursorControl_Proxy(Dispatcher* dispatcher);
- virtual ~PPB_CursorControl_Proxy();
-
- // FunctionGroupBase overrides.
- ppapi::thunk::PPB_CursorControl_FunctionAPI* AsPPB_CursorControl_FunctionAPI()
- OVERRIDE;
-
- // PPB_CursorControl_FunctionAPI implementation.
- virtual PP_Bool SetCursor(PP_Instance instance,
- PP_CursorType_Dev type,
- PP_Resource custom_image_id,
- const PP_Point* hot_spot) OVERRIDE;
- virtual PP_Bool LockCursor(PP_Instance instance) OVERRIDE;
- virtual PP_Bool UnlockCursor(PP_Instance instance) OVERRIDE;
- virtual PP_Bool HasCursorLock(PP_Instance instance) OVERRIDE;
- virtual PP_Bool CanLockCursor(PP_Instance instance) OVERRIDE;
-
- // InterfaceProxy implementation.
- virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
-
- static const ApiID kApiID = API_ID_PPB_CURSORCONTROL;
-
- private:
- // Message handlers.
- void OnMsgSetCursor(PP_Instance instance,
- int32_t type,
- const ppapi::HostResource& custom_image,
- const PP_Point& hot_spot,
- PP_Bool* result);
- void OnMsgLockCursor(PP_Instance instance,
- PP_Bool* result);
- void OnMsgUnlockCursor(PP_Instance instance,
- PP_Bool* result);
- void OnMsgHasCursorLock(PP_Instance instance,
- PP_Bool* result);
- void OnMsgCanLockCursor(PP_Instance instance,
- PP_Bool* result);
-};
-
-} // namespace proxy
-} // namespace ppapi
-
-#endif // PPAPI_PROXY_PPB_CURSOR_CONTROL_PROXY_H_
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc
index 758e67f..d4a2e456 100644
--- a/ppapi/proxy/ppb_instance_proxy.cc
+++ b/ppapi/proxy/ppb_instance_proxy.cc
@@ -124,6 +124,8 @@ bool PPB_Instance_Proxy::OnMessageReceived(const IPC::Message& msg) {
OnHostMsgGetDocumentURL)
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginInstanceURL,
OnHostMsgGetPluginInstanceURL)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SetCursor,
+ OnHostMsgSetCursor)
// Host -> Plugin messages.
IPC_MESSAGE_HANDLER(PpapiMsg_PPBInstance_MouseLockComplete,
@@ -403,6 +405,32 @@ void PPB_Instance_Proxy::PostMessage(PP_Instance instance,
instance, SerializedVarSendInput(dispatcher(), message)));
}
+PP_Bool PPB_Instance_Proxy::SetCursor(PP_Instance instance,
+ PP_MouseCursor_Type type,
+ PP_Resource image,
+ const PP_Point* hot_spot) {
+ // Some of these parameters are important for security. This check is in the
+ // plugin process just for the convenience of the caller (since we don't
+ // bother returning errors from the other process with a sync message). The
+ // parameters will be validated again in the renderer.
+ if (!ValidateSetCursorParams(type, image, hot_spot))
+ return PP_FALSE;
+
+ HostResource image_host_resource;
+ if (image) {
+ Resource* cursor_image =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(image);
+ if (!cursor_image || cursor_image->pp_instance() != instance)
+ return PP_FALSE;
+ image_host_resource = cursor_image->host_resource();
+ }
+
+ dispatcher()->Send(new PpapiHostMsg_PPBInstance_SetCursor(
+ API_ID_PPB_INSTANCE, instance, static_cast<int32_t>(type),
+ image_host_resource, hot_spot ? *hot_spot : PP_MakePoint(0, 0)));
+ return PP_TRUE;
+}
+
int32_t PPB_Instance_Proxy::LockMouse(PP_Instance instance,
PP_CompletionCallback callback) {
if (!callback.func)
@@ -637,6 +665,19 @@ void PPB_Instance_Proxy::OnHostMsgGetPluginInstanceURL(
}
}
+void PPB_Instance_Proxy::OnHostMsgSetCursor(
+ PP_Instance instance,
+ int32_t type,
+ const ppapi::HostResource& custom_image,
+ const PP_Point& hot_spot) {
+ EnterInstanceNoLock enter(instance, true);
+ if (enter.succeeded()) {
+ enter.functions()->SetCursor(
+ instance, static_cast<PP_MouseCursor_Type>(type),
+ custom_image.host_resource(), &hot_spot);
+ }
+}
+
void PPB_Instance_Proxy::OnPluginMsgMouseLockComplete(PP_Instance instance,
int32_t result) {
// Save the mouse callback on the instance data.
diff --git a/ppapi/proxy/ppb_instance_proxy.h b/ppapi/proxy/ppb_instance_proxy.h
index 5b17af1..a6efc50 100644
--- a/ppapi/proxy/ppb_instance_proxy.h
+++ b/ppapi/proxy/ppb_instance_proxy.h
@@ -100,6 +100,10 @@ class PPB_Instance_Proxy : public InterfaceProxy,
PP_Instance instance,
PP_URLComponents_Dev* components) OVERRIDE;
virtual void PostMessage(PP_Instance instance, PP_Var message) OVERRIDE;
+ virtual PP_Bool SetCursor(PP_Instance instance,
+ PP_MouseCursor_Type type,
+ PP_Resource image,
+ const PP_Point* hot_spot) OVERRIDE;
virtual int32_t LockMouse(PP_Instance instance,
PP_CompletionCallback callback) OVERRIDE;
virtual void UnlockMouse(PP_Instance instance) OVERRIDE;
@@ -162,6 +166,10 @@ class PPB_Instance_Proxy : public InterfaceProxy,
SerializedVarReturnValue result);
void OnHostMsgGetPluginInstanceURL(PP_Instance instance,
SerializedVarReturnValue result);
+ void OnHostMsgSetCursor(PP_Instance instance,
+ int32_t type,
+ const ppapi::HostResource& custom_image,
+ const PP_Point& hot_spot);
// Host -> Plugin message handlers.
void OnPluginMsgMouseLockComplete(PP_Instance instance, int32_t result);
diff --git a/ppapi/shared_impl/ppb_instance_shared.cc b/ppapi/shared_impl/ppb_instance_shared.cc
index 7e931c3..255a92e 100644
--- a/ppapi/shared_impl/ppb_instance_shared.cc
+++ b/ppapi/shared_impl/ppb_instance_shared.cc
@@ -9,7 +9,10 @@
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/ppb_image_data_shared.h"
#include "ppapi/shared_impl/var.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_image_data_api.h"
namespace ppapi {
@@ -52,4 +55,44 @@ int32_t PPB_Instance_Shared::ValidateRequestInputEvents(
return PP_OK;
}
+bool PPB_Instance_Shared::ValidateSetCursorParams(PP_MouseCursor_Type type,
+ PP_Resource image,
+ const PP_Point* hot_spot) {
+ if (static_cast<int>(type) < static_cast<int>(PP_MOUSECURSOR_TYPE_CUSTOM) ||
+ static_cast<int>(type) > static_cast<int>(PP_MOUSECURSOR_TYPE_GRABBING))
+ return false; // Cursor type out of range.
+ if (type != PP_MOUSECURSOR_TYPE_CUSTOM) {
+ // The image must not be specified if the type isn't custom. However, we
+ // don't require that the hot spot be null since the C++ wrappers and proxy
+ // pass the point by reference and it will normally be specified.
+ return image == 0;
+ }
+
+ if (!hot_spot)
+ return false; // Hot spot must be specified for custom cursor.
+
+ thunk::EnterResourceNoLock<thunk::PPB_ImageData_API> enter(image, true);
+ if (enter.failed())
+ return false; // Invalid image resource.
+
+ // Validate the image size. A giant cursor can arbitrarily overwrite parts
+ // of the screen resulting in potential spoofing attacks. So we force the
+ // cursor to be a reasonably-sized image.
+ PP_ImageDataDesc desc;
+ if (!PP_ToBool(enter.object()->Describe(&desc)))
+ return false;
+ if (desc.size.width > 32 || desc.size.height > 32)
+ return false;
+
+ // Validate image format.
+ if (desc.format != PPB_ImageData_Shared::GetNativeImageDataFormat())
+ return false;
+
+ // Validate the hot spot location.
+ if (hot_spot->x < 0 || hot_spot->x >= desc.size.width ||
+ hot_spot->y < 0 || hot_spot->y >= desc.size.height)
+ return false;
+ return true;
+}
+
} // namespace ppapi
diff --git a/ppapi/shared_impl/ppb_instance_shared.h b/ppapi/shared_impl/ppb_instance_shared.h
index 2842160..8260a78 100644
--- a/ppapi/shared_impl/ppb_instance_shared.h
+++ b/ppapi/shared_impl/ppb_instance_shared.h
@@ -29,6 +29,10 @@ class PPAPI_SHARED_EXPORT PPB_Instance_Shared
// Error checks the given resquest to Request[Filtering]InputEvents. Returns
// PP_OK if the given classes are all valid, PP_ERROR_NOTSUPPORTED if not.
int32_t ValidateRequestInputEvents(bool is_filtering, uint32_t event_classes);
+
+ bool ValidateSetCursorParams(PP_MouseCursor_Type type,
+ PP_Resource image,
+ const PP_Point* hot_spot);
};
} // namespace ppapi
diff --git a/ppapi/tests/test_mouse_cursor.cc b/ppapi/tests/test_mouse_cursor.cc
new file mode 100644
index 0000000..0f34682
--- /dev/null
+++ b/ppapi/tests/test_mouse_cursor.cc
@@ -0,0 +1,82 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/tests/test_mouse_cursor.h"
+
+#include "ppapi/cpp/image_data.h"
+#include "ppapi/tests/test_case.h"
+#include "ppapi/tests/testing_instance.h"
+
+REGISTER_TEST_CASE(MouseCursor);
+
+TestMouseCursor::TestMouseCursor(TestingInstance* instance)
+ : TestCase(instance) {
+}
+
+bool TestMouseCursor::Init() {
+ mouse_cursor_interface_ = static_cast<const PPB_MouseCursor*>(
+ pp::Module::Get()->GetBrowserInterface(PPB_MOUSECURSOR_INTERFACE));
+ return !!mouse_cursor_interface_;
+}
+
+void TestMouseCursor::RunTests(const std::string& filter) {
+ RUN_TEST(Type, filter);
+ RUN_TEST(Custom, filter);
+ RUN_TEST(Point, filter);
+}
+
+std::string TestMouseCursor::TestType() {
+ ASSERT_TRUE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_POINTER, 0, NULL)));
+ ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), static_cast<PP_MouseCursor_Type>(-2),
+ 0, NULL)));
+ PASS();
+}
+
+std::string TestMouseCursor::TestCustom() {
+ // First test a valid image.
+ pp::ImageData valid_image(instance_,
+ pp::ImageData::GetNativeImageDataFormat(),
+ pp::Size(16, 16), true);
+ PP_Point point = { 0, 0 };
+ ASSERT_TRUE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
+ valid_image.pp_resource(), &point)));
+
+ // 0 image resource ID.
+ ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM, 0, NULL)));
+
+ // Image specified for predefined type.
+ ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_POINTER,
+ valid_image.pp_resource(), &point)));
+
+ // A too-big image.
+ pp::ImageData big_image(instance_, pp::ImageData::GetNativeImageDataFormat(),
+ pp::Size(65, 12), true);
+ ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
+ big_image.pp_resource(), &point)));
+
+ PASS();
+}
+
+std::string TestMouseCursor::TestPoint() {
+ pp::ImageData valid_image(instance_,
+ pp::ImageData::GetNativeImageDataFormat(),
+ pp::Size(16, 16), true);
+ PP_Point point = { -1, 0 };
+ ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
+ valid_image.pp_resource(), &point)));
+
+ point.x = 67;
+ point.y = 5;
+ ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
+ instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
+ valid_image.pp_resource(), &point)));
+ PASS();
+}
diff --git a/ppapi/tests/test_mouse_cursor.h b/ppapi/tests/test_mouse_cursor.h
new file mode 100644
index 0000000..6fb6e77
--- /dev/null
+++ b/ppapi/tests/test_mouse_cursor.h
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PPAPI_TESTS_TEST_MOUSE_CURSOR_H_
+#define PPAPI_TESTS_TEST_MOUSE_CURSOR_H_
+
+#include "ppapi/c/ppb_mouse_cursor.h"
+#include "ppapi/tests/test_case.h"
+
+class TestMouseCursor : public TestCase {
+ public:
+ explicit TestMouseCursor(TestingInstance* instance);
+
+ // TestCase implementation.
+ virtual bool Init();
+ virtual void RunTests(const std::string& filter);
+
+ private:
+ std::string TestType();
+ std::string TestCustom();
+ std::string TestPoint();
+
+ const PPB_MouseCursor* mouse_cursor_interface_;
+};
+
+#endif // PPAPI_TESTS_TEST_MOUSE_CURSOR_H_
diff --git a/ppapi/thunk/interfaces_ppb_public_dev.h b/ppapi/thunk/interfaces_ppb_public_dev.h
index 0296a2d..73006ce 100644
--- a/ppapi/thunk/interfaces_ppb_public_dev.h
+++ b/ppapi/thunk/interfaces_ppb_public_dev.h
@@ -9,7 +9,6 @@
PROXIED_API(PPB_AudioInput)
PROXIED_API(PPB_Buffer)
-PROXIED_API(PPB_CursorControl)
UNPROXIED_API(PPB_DirectoryReader)
PROXIED_API(PPB_FileChooser)
PROXIED_API(PPB_Graphics3D)
@@ -33,7 +32,7 @@ PROXIED_IFACE(PPB_Graphics3D,
PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE_0_1,
PPB_GLESChromiumTextureMapping_Dev_0_1)
PROXIED_IFACE(NoAPIName, PPB_CRYPTO_DEV_INTERFACE_0_1, PPB_Crypto_Dev_0_1)
-PROXIED_IFACE(PPB_CursorControl, PPB_CURSOR_CONTROL_DEV_INTERFACE_0_4,
+PROXIED_IFACE(NoAPIName, PPB_CURSOR_CONTROL_DEV_INTERFACE_0_4,
PPB_CursorControl_Dev_0_4)
PROXIED_IFACE(NoAPIName, PPB_DEVICEREF_DEV_INTERFACE_0_1, PPB_DeviceRef_Dev_0_1)
UNPROXIED_IFACE(PPB_DirectoryReader, PPB_DIRECTORYREADER_DEV_INTERFACE_0_5,
diff --git a/ppapi/thunk/interfaces_ppb_public_stable.h b/ppapi/thunk/interfaces_ppb_public_stable.h
index 556a11f..81a3402 100644
--- a/ppapi/thunk/interfaces_ppb_public_stable.h
+++ b/ppapi/thunk/interfaces_ppb_public_stable.h
@@ -70,6 +70,7 @@ PROXIED_IFACE(NoAPIName, PPB_WHEEL_INPUT_EVENT_INTERFACE_1_0,
PPB_WheelInputEvent_1_0)
PROXIED_IFACE(PPB_Instance, PPB_FULLSCREEN_INTERFACE_1_0, PPB_Fullscreen_1_0)
PROXIED_IFACE(PPB_Instance, PPB_MESSAGING_INTERFACE_1_0, PPB_Messaging_1_0)
+PROXIED_IFACE(PPB_Instance, PPB_MOUSECURSOR_INTERFACE_1_0, PPB_MouseCursor_1_0)
PROXIED_IFACE(PPB_Instance, PPB_MOUSELOCK_INTERFACE_1_0, PPB_MouseLock_1_0)
PROXIED_IFACE(PPB_URLLoader, PPB_URLLOADER_INTERFACE_1_0, PPB_URLLoader_1_0)
PROXIED_IFACE(NoAPIName, PPB_URLREQUESTINFO_INTERFACE_1_0,
diff --git a/ppapi/thunk/ppb_cursor_control_api.h b/ppapi/thunk/ppb_cursor_control_api.h
deleted file mode 100644
index e4882c6..0000000
--- a/ppapi/thunk/ppb_cursor_control_api.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PPAPI_THUNK_CURSOR_CONTROL_API_H_
-#define PPAPI_THUNK_CURSOR_CONTROL_API_H_
-
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-#include "ppapi/shared_impl/api_id.h"
-
-namespace ppapi {
-namespace thunk {
-
-class PPB_CursorControl_FunctionAPI {
- public:
- virtual ~PPB_CursorControl_FunctionAPI() {}
-
- virtual PP_Bool SetCursor(PP_Instance instance,
- PP_CursorType_Dev type,
- PP_Resource custom_image_id,
- const PP_Point* hot_spot) = 0;
- virtual PP_Bool LockCursor(PP_Instance instance) = 0;
- virtual PP_Bool UnlockCursor(PP_Instance instance) = 0;
- virtual PP_Bool HasCursorLock(PP_Instance instance) = 0;
- virtual PP_Bool CanLockCursor(PP_Instance instance) = 0;
-
- static const ApiID kApiID = API_ID_PPB_CURSORCONTROL;
-
-};
-
-} // namespace thunk
-} // namespace ppapi
-
-#endif // PPAPI_THUNK_CURSOR_CONTROL_API_H_
diff --git a/ppapi/thunk/ppb_cursor_control_thunk.cc b/ppapi/thunk/ppb_cursor_control_thunk.cc
index b1b2077..743b3e5 100644
--- a/ppapi/thunk/ppb_cursor_control_thunk.cc
+++ b/ppapi/thunk/ppb_cursor_control_thunk.cc
@@ -2,9 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "ppapi/c/dev/ppb_cursor_control_dev.h"
#include "ppapi/thunk/thunk.h"
#include "ppapi/thunk/enter.h"
-#include "ppapi/thunk/ppb_cursor_control_api.h"
+#include "ppapi/thunk/ppb_instance_api.h"
+
+// This interface is only for temporary backwards compat and currently just
+// forwards to the stable interfaces that implement these features.
namespace ppapi {
namespace thunk {
@@ -15,38 +19,27 @@ PP_Bool SetCursor(PP_Instance instance,
PP_CursorType_Dev type,
PP_Resource custom_image,
const PP_Point* hot_spot) {
- EnterFunction<PPB_CursorControl_FunctionAPI> enter(instance, true);
+ EnterInstance enter(instance);
if (enter.failed())
return PP_FALSE;
- return enter.functions()->SetCursor(instance, type, custom_image, hot_spot);
+ return enter.functions()->SetCursor(instance,
+ static_cast<PP_MouseCursor_Type>(type), custom_image, hot_spot);
}
PP_Bool LockCursor(PP_Instance instance) {
- EnterFunction<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.failed())
- return PP_FALSE;
- return enter.functions()->LockCursor(instance);
+ return PP_FALSE;
}
PP_Bool UnlockCursor(PP_Instance instance) {
- EnterFunction<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.failed())
- return PP_FALSE;
- return enter.functions()->UnlockCursor(instance);
+ return PP_FALSE;
}
PP_Bool HasCursorLock(PP_Instance instance) {
- EnterFunction<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.failed())
- return PP_FALSE;
- return enter.functions()->HasCursorLock(instance);
+ return PP_FALSE;
}
PP_Bool CanLockCursor(PP_Instance instance) {
- EnterFunction<PPB_CursorControl_FunctionAPI> enter(instance, true);
- if (enter.failed())
- return PP_FALSE;
- return enter.functions()->CanLockCursor(instance);
+ return PP_FALSE;
}
const PPB_CursorControl_Dev g_ppb_cursor_control_thunk = {
diff --git a/ppapi/thunk/ppb_instance_api.h b/ppapi/thunk/ppb_instance_api.h
index 3a357af..58f119f 100644
--- a/ppapi/thunk/ppb_instance_api.h
+++ b/ppapi/thunk/ppb_instance_api.h
@@ -14,6 +14,7 @@
#include "ppapi/c/ppb_audio_config.h"
#include "ppapi/c/ppb_gamepad.h"
#include "ppapi/c/ppb_instance.h"
+#include "ppapi/c/ppb_mouse_cursor.h"
#include "ppapi/c/private/ppb_instance_private.h"
#include "ppapi/shared_impl/api_id.h"
@@ -99,6 +100,12 @@ class PPB_Instance_FunctionAPI {
// Messaging.
virtual void PostMessage(PP_Instance instance, PP_Var message) = 0;
+ // Mouse cursor.
+ virtual PP_Bool SetCursor(PP_Instance instance,
+ PP_MouseCursor_Type type,
+ PP_Resource image,
+ const PP_Point* hot_spot) = 0;
+
// MouseLock.
virtual int32_t LockMouse(PP_Instance instance,
PP_CompletionCallback callback) = 0;
diff --git a/ppapi/thunk/ppb_mouse_cursor_thunk.cc b/ppapi/thunk/ppb_mouse_cursor_thunk.cc
new file mode 100644
index 0000000..f2c6f41
--- /dev/null
+++ b/ppapi/thunk/ppb_mouse_cursor_thunk.cc
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/c/ppb_mouse_cursor.h"
+#include "ppapi/thunk/thunk.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_instance_api.h"
+
+namespace ppapi {
+namespace thunk {
+
+namespace {
+
+PP_Bool SetCursor(PP_Instance instance,
+ PP_MouseCursor_Type type,
+ PP_Resource image,
+ const PP_Point* hot_spot) {
+ EnterInstance enter(instance);
+ if (enter.failed())
+ return PP_FALSE;
+ return enter.functions()->SetCursor(instance, type, image, hot_spot);
+}
+
+const PPB_MouseCursor_1_0 g_ppb_mouse_cursor_thunk = {
+ &SetCursor
+};
+
+} // namespace
+
+const PPB_MouseCursor_1_0* GetPPB_MouseCursor_1_0_Thunk() {
+ return &g_ppb_mouse_cursor_thunk;
+}
+
+} // namespace thunk
+} // namespace ppapi
diff --git a/ppapi/thunk/ppb_mouse_lock_thunk.cc b/ppapi/thunk/ppb_mouse_lock_thunk.cc
index 11d2012..d884ab0 100644
--- a/ppapi/thunk/ppb_mouse_lock_thunk.cc
+++ b/ppapi/thunk/ppb_mouse_lock_thunk.cc
@@ -14,14 +14,14 @@ namespace thunk {
namespace {
int32_t LockMouse(PP_Instance instance, PP_CompletionCallback callback) {
- EnterFunction<PPB_Instance_FunctionAPI> enter(instance, callback, true);
+ EnterInstance enter(instance, callback);
if (enter.failed())
return enter.retval();
return enter.SetResult(enter.functions()->LockMouse(instance, callback));
}
void UnlockMouse(PP_Instance instance) {
- EnterFunction<PPB_Instance_FunctionAPI> enter(instance, true);
+ EnterInstance enter(instance);
if (enter.failed())
return;
enter.functions()->UnlockMouse(instance);