Index: content/browser/web_contents/web_contents_impl_unittest.cc |
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc |
index 2d9259f383c703634b6a9aaf2b4550c05948e09c..05d5111889826972122cc2147c75dde444a40c54 100644 |
--- a/content/browser/web_contents/web_contents_impl_unittest.cc |
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "content/browser/site_instance_impl.h" |
#include "content/browser/webui/web_ui_controller_factory_registry.h" |
#include "content/common/frame_messages.h" |
+#include "content/common/input/synthetic_web_input_event_builders.h" |
#include "content/common/view_messages.h" |
#include "content/public/browser/global_request_id.h" |
#include "content/public/browser/interstitial_page_delegate.h" |
@@ -18,6 +19,7 @@ |
#include "content/public/browser/notification_details.h" |
#include "content/public/browser/notification_source.h" |
#include "content/public/browser/render_widget_host_view.h" |
+#include "content/public/browser/web_contents_delegate.h" |
#include "content/public/browser/web_contents_observer.h" |
#include "content/public/browser/web_ui_controller.h" |
#include "content/public/common/bindings_policy.h" |
@@ -2230,4 +2232,92 @@ TEST_F(WebContentsImplTest, GetLastActiveTime) { |
EXPECT_FALSE(contents()->GetLastActiveTime().is_null()); |
} |
+class ContentsZoomChangedDelegate : public WebContentsDelegate { |
+ public: |
+ ContentsZoomChangedDelegate() : |
+ contents_zoom_changed_call_count_(0), |
+ last_zoom_in_(false) |
sadrul
2014/03/03 12:37:56
brace here
Rick Byers
2014/03/03 14:52:53
Done.
|
+ { |
+ } |
+ |
+ int GetAndResetContentsZoomChangedCallCount() { |
+ int count = contents_zoom_changed_call_count_; |
+ contents_zoom_changed_call_count_ = 0; |
+ return count; |
+ } |
+ |
+ bool last_zoom_in() const { |
+ return last_zoom_in_; |
+ } |
+ |
+ // WebContentsDelegate: |
+ virtual void ContentsZoomChange(bool zoom_in) OVERRIDE { |
+ contents_zoom_changed_call_count_++; |
+ last_zoom_in_ = zoom_in; |
+ } |
+ |
+ private: |
+ int contents_zoom_changed_call_count_; |
+ bool last_zoom_in_; |
sadrul
2014/03/03 12:37:56
DISALLOW_COPY_..
Rick Byers
2014/03/03 14:52:53
Done.
|
+}; |
+ |
+// Tests that some mouseehweel events get turned into browser zoom requests. |
+TEST_F(WebContentsImplTest, HandleWheelEvent) { |
+ using blink::WebInputEvent; |
+ |
+ scoped_ptr<ContentsZoomChangedDelegate> delegate( |
+ new ContentsZoomChangedDelegate()); |
+ contents()->SetDelegate(delegate.get()); |
+ |
+ int modifiers = 0; |
+ float dy = 1; |
+ // Verify that normal mouse wheel events do nothing to change the zoom level. |
+ blink::WebMouseWheelEvent event = |
+ SyntheticWebMouseWheelEventBuilder::Build(0, dy, modifiers, false); |
+ EXPECT_FALSE(contents()->HandleWheelEvent(event)); |
+ EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount()); |
+ |
+ modifiers = WebInputEvent::ShiftKey | WebInputEvent::AltKey; |
+ event = SyntheticWebMouseWheelEventBuilder::Build(0, dy, modifiers, false); |
+ EXPECT_FALSE(contents()->HandleWheelEvent(event)); |
+ EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount()); |
+ |
+ // But whenever the ctrl modifier is applied, they can increase/decrease zoom. |
+ // Except on MacOS where we never want to adjust zoom with mousewheel. |
+ modifiers = WebInputEvent::ControlKey; |
+ event = SyntheticWebMouseWheelEventBuilder::Build(0, dy, modifiers, false); |
+ bool handled = contents()->HandleWheelEvent(event); |
+#if defined(OS_MACOSX) |
+ EXPECT_FALSE(handled); |
+ EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount()); |
+#else |
+ EXPECT_TRUE(handled); |
+ EXPECT_EQ(1, delegate->GetAndResetContentsZoomChangedCallCount()); |
+ EXPECT_TRUE(delegate->last_zoom_in()); |
+#endif |
+ |
+ modifiers = WebInputEvent::ControlKey | WebInputEvent::ShiftKey | |
+ WebInputEvent::AltKey; |
+ dy = -5; |
+ event = SyntheticWebMouseWheelEventBuilder::Build(2, dy, modifiers, false); |
+ handled = contents()->HandleWheelEvent(event); |
+#if defined(OS_MACOSX) |
+ EXPECT_FALSE(handled); |
+ EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount()); |
+#else |
+ EXPECT_TRUE(handled); |
+ EXPECT_EQ(1, delegate->GetAndResetContentsZoomChangedCallCount()); |
+ EXPECT_FALSE(delegate->last_zoom_in()); |
+#endif |
+ |
+ // Unless there is no vertical movement. |
+ dy = 0; |
+ event = SyntheticWebMouseWheelEventBuilder::Build(2, dy, modifiers, false); |
+ EXPECT_FALSE(contents()->HandleWheelEvent(event)); |
+ EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount()); |
+ |
+ // Ensure pointers to the delegate aren't kept beyond it's lifetime. |
+ contents()->SetDelegate(NULL); |
+} |
+ |
} // namespace content |