WinCairo build fails to link.
[WebKit-https.git] / Source / WebKit / chromium / tests / WebPluginContainerTest.cpp
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "WebPluginContainer.h"
33
34 #include "Element.h"
35 #include "FakeWebPlugin.h"
36 #include "FrameTestHelpers.h"
37 #include "URLTestHelpers.h"
38 #include "WebDocument.h"
39 #include "WebElement.h"
40 #include "WebFrame.h"
41 #include "WebFrameClient.h"
42 #include "WebFrameImpl.h"
43 #include "WebPluginContainerImpl.h"
44 #include "WebPluginParams.h"
45 #include "WebSettings.h"
46 #include "WebView.h"
47 #include "WebViewImpl.h"
48 #include <gtest/gtest.h>
49 #include <public/Platform.h>
50 #include <public/WebThread.h>
51 #include <public/WebUnitTestSupport.h>
52
53 using namespace WebKit;
54
55 namespace {
56
57 class WebPluginContainerTest : public testing::Test {
58 public:
59     WebPluginContainerTest()
60         : m_baseURL("http://www.test.com/")
61     {
62     }
63
64     virtual void TearDown()
65     {
66         Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
67     }
68
69 protected:
70     std::string m_baseURL;
71 };
72
73 class TestPluginWebFrameClient : public WebFrameClient {
74     virtual WebPlugin* createPlugin(WebFrame* frame, const WebPluginParams& params) OVERRIDE
75     {
76         if (params.mimeType == WebString::fromUTF8("application/x-webkit-test-webplugin"))
77             return new FakeWebPlugin(frame, params);
78         return WebFrameClient::createPlugin(frame, params);
79     }
80 };
81
82 WebPluginContainer* getWebPluginContainer(WebView* webView, const WebString& id)
83 {
84     WebElement element = webView->mainFrame()->document().getElementById(id);
85     return element.pluginContainer();
86 }
87
88 TEST_F(WebPluginContainerTest, WindowToLocalPointTest)
89 {
90     URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("plugin_container.html"));
91     WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "plugin_container.html", true, new TestPluginWebFrameClient());
92     ASSERT(webView);
93     webView->settings()->setPluginsEnabled(true);
94     webView->resize(WebSize(300, 300));
95     webView->layout();
96     FrameTestHelpers::runPendingTasks();
97
98     WebPluginContainer* pluginContainerOne = getWebPluginContainer(webView, WebString::fromUTF8("translated-plugin"));
99     ASSERT(pluginContainerOne);
100     WebPoint point1 = pluginContainerOne->windowToLocalPoint(WebPoint(10, 10));
101     ASSERT_EQ(0, point1.x);
102     ASSERT_EQ(0, point1.y);
103     WebPoint point2 = pluginContainerOne->windowToLocalPoint(WebPoint(100, 100));
104     ASSERT_EQ(90, point2.x);
105     ASSERT_EQ(90, point2.y);
106
107     WebPluginContainer* pluginContainerTwo = getWebPluginContainer(webView, WebString::fromUTF8("rotated-plugin"));
108     ASSERT(pluginContainerTwo);
109     WebPoint point3 = pluginContainerTwo->windowToLocalPoint(WebPoint(0, 10));
110     ASSERT_EQ(10, point3.x);
111     ASSERT_EQ(0, point3.y);
112     WebPoint point4 = pluginContainerTwo->windowToLocalPoint(WebPoint(-10, 10));
113     ASSERT_EQ(10, point4.x);
114     ASSERT_EQ(10, point4.y);
115
116     webView->close();
117 }
118
119 }