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

Unified Diff: ppapi/tests/test_mouse_lock.cc

Issue 10699045: Fix PPB_MouseLock.LockMouse crash and add tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: changes in response to Vincent's suggestions & fix compilation failure. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ppapi/tests/test_mouse_lock.cc
diff --git a/ppapi/tests/test_mouse_lock.cc b/ppapi/tests/test_mouse_lock.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9a657e64bd2da436f660865e38862c27b0f81111
--- /dev/null
+++ b/ppapi/tests/test_mouse_lock.cc
@@ -0,0 +1,84 @@
+// 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_lock.h"
+
+#include "ppapi/cpp/input_event.h"
+#include "ppapi/cpp/view.h"
+#include "ppapi/tests/testing_instance.h"
+
+REGISTER_TEST_CASE(MouseLock);
+
+TestMouseLock::TestMouseLock(TestingInstance* instance)
+ : TestCase(instance),
+ MouseLock(instance),
+ nested_event_(instance->pp_instance()) {
+}
+
+TestMouseLock::~TestMouseLock() {
+}
+
+bool TestMouseLock::Init() {
+ return CheckTestingInterface();
+}
+
+void TestMouseLock::RunTests(const std::string& filter) {
+ RUN_TEST(SucceedWhenAllowed, filter);
+ RUN_TEST(FailWhenBlocked, filter);
+}
+
+void TestMouseLock::DidChangeView(const pp::View& view) {
+ position_ = view.GetRect();
+}
+
+void TestMouseLock::MouseLockLost() {
+ nested_event_.Signal();
+}
+
+std::string TestMouseLock::TestSucceedWhenAllowed() {
+ // Content settings are configured to allow mouse lock for any site.
+ // Please see chrome/test/ppapi/ppapi_interactive_browsertest.cc.
+ TestCompletionCallback callback(instance_->pp_instance());
dmichael (off chromium) 2012/07/02 17:34:16 Optional suggestion: If you also provide the callb
yzshen1 2012/07/02 19:20:20 Done.
+ SimulateUserGesture();
+ int32_t rv = LockMouse(callback);
dmichael (off chromium) 2012/07/02 17:34:16 nit: You could do: callback.WaitForResult(LockMous
+ if (rv == PP_OK_COMPLETIONPENDING)
+ rv = callback.WaitForResult();
+ if (rv != PP_OK)
+ return ReportError("MouseLock::LockMouse", rv);
+
+ UnlockMouse();
+ // Wait for the MouseLockLost() call.
+ nested_event_.Wait();
+
+ PASS();
+}
+
+std::string TestMouseLock::TestFailWhenBlocked() {
+ // Content settings are configured to block mouse lock for any site.
+ // Please see chrome/test/ppapi/ppapi_interactive_browsertest.cc.
+ TestCompletionCallback callback(instance_->pp_instance());
+ SimulateUserGesture();
+ int32_t rv = LockMouse(callback);
+ if (rv == PP_OK_COMPLETIONPENDING)
+ rv = callback.WaitForResult();
+ ASSERT_NE(PP_OK, rv);
+
+ PASS();
+}
+
+void TestMouseLock::SimulateUserGesture() {
+ pp::Point mouse_movement;
+ pp::MouseInputEvent input_event(
+ instance_,
+ PP_INPUTEVENT_TYPE_MOUSEDOWN,
+ 0, // time_stamp
+ 0, // modifiers
+ PP_INPUTEVENT_MOUSEBUTTON_LEFT,
+ position_.CenterPoint(),
+ 1, // click_count
+ mouse_movement);
+
+ testing_interface_->SimulateInputEvent(instance_->pp_instance(),
+ input_event.pp_resource());
+}

Powered by Google App Engine
This is Rietveld 408576698