OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 28 matching lines...) Expand all Loading... |
39 #include "platform/testing/UnitTestHelpers.h" | 39 #include "platform/testing/UnitTestHelpers.h" |
40 #include "public/platform/Platform.h" | 40 #include "public/platform/Platform.h" |
41 #include "public/platform/WebClipboard.h" | 41 #include "public/platform/WebClipboard.h" |
42 #include "public/platform/WebThread.h" | 42 #include "public/platform/WebThread.h" |
43 #include "public/platform/WebUnitTestSupport.h" | 43 #include "public/platform/WebUnitTestSupport.h" |
44 #include "public/web/WebDocument.h" | 44 #include "public/web/WebDocument.h" |
45 #include "public/web/WebElement.h" | 45 #include "public/web/WebElement.h" |
46 #include "public/web/WebFrame.h" | 46 #include "public/web/WebFrame.h" |
47 #include "public/web/WebFrameClient.h" | 47 #include "public/web/WebFrameClient.h" |
48 #include "public/web/WebPluginParams.h" | 48 #include "public/web/WebPluginParams.h" |
| 49 #include "public/web/WebPrintParams.h" |
49 #include "public/web/WebSettings.h" | 50 #include "public/web/WebSettings.h" |
50 #include "public/web/WebView.h" | 51 #include "public/web/WebView.h" |
| 52 #include "third_party/skia/include/core/SkPictureRecorder.h" |
51 #include "web/WebLocalFrameImpl.h" | 53 #include "web/WebLocalFrameImpl.h" |
52 #include "web/WebPluginContainerImpl.h" | 54 #include "web/WebPluginContainerImpl.h" |
53 #include "web/WebViewImpl.h" | 55 #include "web/WebViewImpl.h" |
54 #include "web/tests/FakeWebPlugin.h" | 56 #include "web/tests/FakeWebPlugin.h" |
55 #include "web/tests/FrameTestHelpers.h" | 57 #include "web/tests/FrameTestHelpers.h" |
56 #include <gtest/gtest.h> | 58 #include <gtest/gtest.h> |
57 | 59 |
58 using blink::testing::runPendingTasks; | 60 using blink::testing::runPendingTasks; |
59 using namespace blink; | 61 using namespace blink; |
60 | 62 |
61 namespace { | 63 namespace { |
62 | 64 |
63 class WebPluginContainerTest : public ::testing::Test { | 65 class WebPluginContainerTest : public ::testing::Test { |
64 public: | 66 public: |
65 WebPluginContainerTest() | 67 WebPluginContainerTest() |
66 : m_baseURL("http://www.test.com/") | 68 : m_baseURL("http://www.test.com/") |
67 { | 69 { |
68 } | 70 } |
69 | 71 |
70 virtual void TearDown() | 72 virtual void TearDown() |
71 { | 73 { |
72 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); | 74 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); |
73 } | 75 } |
74 | 76 |
75 protected: | 77 protected: |
76 std::string m_baseURL; | 78 std::string m_baseURL; |
77 }; | 79 }; |
78 | 80 |
| 81 class TestPluginWebFrameClient; |
| 82 |
79 // Subclass of FakeWebPlugin that has a selection of 'x' as plain text and 'y' a
s markup text. | 83 // Subclass of FakeWebPlugin that has a selection of 'x' as plain text and 'y' a
s markup text. |
80 class TestPlugin : public FakeWebPlugin { | 84 class TestPlugin : public FakeWebPlugin { |
81 public: | 85 public: |
82 TestPlugin(WebFrame* frame, const WebPluginParams& params) | 86 TestPlugin(WebFrame* frame, const WebPluginParams& params, TestPluginWebFram
eClient* testClient) |
83 : FakeWebPlugin(frame, params) | 87 : FakeWebPlugin(frame, params) |
84 { | 88 { |
| 89 m_testClient = testClient; |
85 } | 90 } |
86 | 91 |
87 virtual bool hasSelection() const { return true; } | 92 virtual bool hasSelection() const { return true; } |
88 virtual WebString selectionAsText() const { return WebString("x"); } | 93 virtual WebString selectionAsText() const { return WebString("x"); } |
89 virtual WebString selectionAsMarkup() const { return WebString("y"); } | 94 virtual WebString selectionAsMarkup() const { return WebString("y"); } |
| 95 virtual bool supportsPaginatedPrint() { return true; } |
| 96 virtual int printBegin(const WebPrintParams& printParams) { return 1; } |
| 97 virtual bool printPage(int pageNumber, WebCanvas*); |
| 98 private: |
| 99 TestPluginWebFrameClient* m_testClient; |
90 }; | 100 }; |
91 | 101 |
92 class TestPluginWebFrameClient : public FrameTestHelpers::TestWebFrameClient { | 102 class TestPluginWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
93 virtual WebPlugin* createPlugin(WebLocalFrame* frame, const WebPluginParams&
params) override | 103 virtual WebPlugin* createPlugin(WebLocalFrame* frame, const WebPluginParams&
params) override |
94 { | 104 { |
95 if (params.mimeType == WebString::fromUTF8("application/x-webkit-test-we
bplugin")) | 105 if (params.mimeType == WebString::fromUTF8("application/x-webkit-test-we
bplugin")) |
96 return new TestPlugin(frame, params); | 106 return new TestPlugin(frame, params, this); |
| 107 if (params.mimeType == WebString::fromUTF8("application/pdf")) |
| 108 return new TestPlugin(frame, params, this); |
97 return WebFrameClient::createPlugin(frame, params); | 109 return WebFrameClient::createPlugin(frame, params); |
98 } | 110 } |
| 111 |
| 112 public: |
| 113 void onPrintPage() { m_printedPage = true; } |
| 114 bool printedAtLeastOnePage() { return m_printedPage; } |
| 115 |
| 116 private: |
| 117 bool m_printedPage = false; |
99 }; | 118 }; |
100 | 119 |
| 120 bool TestPlugin::printPage(int pageNumber, WebCanvas* canvas) |
| 121 { |
| 122 ASSERT(m_testClient); |
| 123 m_testClient->onPrintPage(); |
| 124 return true; |
| 125 } |
| 126 |
| 127 |
101 WebPluginContainer* getWebPluginContainer(WebView* webView, const WebString& id) | 128 WebPluginContainer* getWebPluginContainer(WebView* webView, const WebString& id) |
102 { | 129 { |
103 WebElement element = webView->mainFrame()->document().getElementById(id); | 130 WebElement element = webView->mainFrame()->document().getElementById(id); |
104 return element.pluginContainer(); | 131 return element.pluginContainer(); |
105 } | 132 } |
106 | 133 |
107 TEST_F(WebPluginContainerTest, WindowToLocalPointTest) | 134 TEST_F(WebPluginContainerTest, WindowToLocalPointTest) |
108 { | 135 { |
109 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("plugin_container.html")); | 136 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("plugin_container.html")); |
110 FrameTestHelpers::WebViewHelper webViewHelper; | 137 FrameTestHelpers::WebViewHelper webViewHelper; |
(...skipping 16 matching lines...) Expand all Loading... |
127 WebPluginContainer* pluginContainerTwo = getWebPluginContainer(webView, WebS
tring::fromUTF8("rotated-plugin")); | 154 WebPluginContainer* pluginContainerTwo = getWebPluginContainer(webView, WebS
tring::fromUTF8("rotated-plugin")); |
128 ASSERT(pluginContainerTwo); | 155 ASSERT(pluginContainerTwo); |
129 WebPoint point3 = pluginContainerTwo->rootFrameToLocalPoint(WebPoint(0, 10))
; | 156 WebPoint point3 = pluginContainerTwo->rootFrameToLocalPoint(WebPoint(0, 10))
; |
130 ASSERT_EQ(10, point3.x); | 157 ASSERT_EQ(10, point3.x); |
131 ASSERT_EQ(0, point3.y); | 158 ASSERT_EQ(0, point3.y); |
132 WebPoint point4 = pluginContainerTwo->rootFrameToLocalPoint(WebPoint(-10, 10
)); | 159 WebPoint point4 = pluginContainerTwo->rootFrameToLocalPoint(WebPoint(-10, 10
)); |
133 ASSERT_EQ(10, point4.x); | 160 ASSERT_EQ(10, point4.x); |
134 ASSERT_EQ(10, point4.y); | 161 ASSERT_EQ(10, point4.y); |
135 } | 162 } |
136 | 163 |
| 164 TEST_F(WebPluginContainerTest, PrintOnePage) |
| 165 { |
| 166 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("test.pdf"), WebString::fromUTF8("application/pdf")
); |
| 167 |
| 168 FrameTestHelpers::WebViewHelper webViewHelper; |
| 169 TestPluginWebFrameClient* testClient = new TestPluginWebFrameClient(); |
| 170 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "test.pdf", t
rue, testClient); |
| 171 ASSERT(webView); |
| 172 webView->layout(); |
| 173 runPendingTasks(); |
| 174 WebFrame* frame = webView->mainFrame(); |
| 175 |
| 176 WebPrintParams printParams; |
| 177 printParams.printContentArea.width = 500; |
| 178 printParams.printContentArea.height = 500; |
| 179 |
| 180 frame->printBegin(printParams); |
| 181 SkPictureRecorder recorder; |
| 182 frame->printPage(0, recorder.beginRecording(IntRect())); |
| 183 frame->printEnd(); |
| 184 ASSERT(testClient->printedAtLeastOnePage()); |
| 185 } |
| 186 |
| 187 TEST_F(WebPluginContainerTest, PrintAllPages) |
| 188 { |
| 189 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("test.pdf"), WebString::fromUTF8("application/pdf")
); |
| 190 |
| 191 FrameTestHelpers::WebViewHelper webViewHelper; |
| 192 TestPluginWebFrameClient* testClient = new TestPluginWebFrameClient(); |
| 193 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "test.pdf", t
rue, testClient); |
| 194 ASSERT(webView); |
| 195 webView->layout(); |
| 196 runPendingTasks(); |
| 197 WebFrame* frame = webView->mainFrame(); |
| 198 |
| 199 WebPrintParams printParams; |
| 200 printParams.printContentArea.width = 500; |
| 201 printParams.printContentArea.height = 500; |
| 202 |
| 203 frame->printBegin(printParams); |
| 204 SkPictureRecorder recorder; |
| 205 frame->printPagesWithBoundaries(recorder.beginRecording(IntRect()), WebSize(
)); |
| 206 frame->printEnd(); |
| 207 ASSERT(testClient->printedAtLeastOnePage()); |
| 208 } |
| 209 |
137 TEST_F(WebPluginContainerTest, LocalToWindowPointTest) | 210 TEST_F(WebPluginContainerTest, LocalToWindowPointTest) |
138 { | 211 { |
139 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("plugin_container.html")); | 212 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("plugin_container.html")); |
140 FrameTestHelpers::WebViewHelper webViewHelper; | 213 FrameTestHelpers::WebViewHelper webViewHelper; |
141 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "plugin_conta
iner.html", true, new TestPluginWebFrameClient()); | 214 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "plugin_conta
iner.html", true, new TestPluginWebFrameClient()); |
142 ASSERT(webView); | 215 ASSERT(webView); |
143 webView->settings()->setPluginsEnabled(true); | 216 webView->settings()->setPluginsEnabled(true); |
144 webView->resize(WebSize(300, 300)); | 217 webView->resize(WebSize(300, 300)); |
145 webView->layout(); | 218 webView->layout(); |
146 runPendingTasks(); | 219 runPendingTasks(); |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 | 377 |
305 WebRect rect = pluginContainerImpl->element().boundsInViewportSpace(); | 378 WebRect rect = pluginContainerImpl->element().boundsInViewportSpace(); |
306 EXPECT_TRUE(pluginContainerImpl->isRectTopmost(rect)); | 379 EXPECT_TRUE(pluginContainerImpl->isRectTopmost(rect)); |
307 | 380 |
308 // Cause the plugin's frame to be detached. | 381 // Cause the plugin's frame to be detached. |
309 webViewHelper.reset(); | 382 webViewHelper.reset(); |
310 | 383 |
311 EXPECT_FALSE(pluginContainerImpl->isRectTopmost(rect)); | 384 EXPECT_FALSE(pluginContainerImpl->isRectTopmost(rect)); |
312 } | 385 } |
313 } | 386 } |
OLD | NEW |