• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "config.h"
6 #include "public/web/WebHelperPlugin.h"
7 
8 #include "public/web/WebFrameClient.h"
9 #include "public/web/WebLocalFrame.h"
10 #include "web/tests/FakeWebPlugin.h"
11 #include "web/tests/FrameTestHelpers.h"
12 #include <gtest/gtest.h>
13 
14 namespace blink {
15 
16 namespace {
17 
18 class FakePlaceholderWebPlugin : public FakeWebPlugin {
19 public:
FakePlaceholderWebPlugin(blink::WebFrame * frame,const blink::WebPluginParams & params)20     FakePlaceholderWebPlugin(blink::WebFrame* frame, const blink::WebPluginParams& params)
21         : FakeWebPlugin(frame, params)
22     {
23     }
~FakePlaceholderWebPlugin()24     virtual ~FakePlaceholderWebPlugin() { }
25 
isPlaceholder()26     virtual bool isPlaceholder() OVERRIDE { return true; }
27 };
28 
29 class WebHelperPluginFrameClient : public FrameTestHelpers::TestWebFrameClient {
30 public:
WebHelperPluginFrameClient()31     WebHelperPluginFrameClient() : m_createPlaceholder(false) { }
~WebHelperPluginFrameClient()32     virtual ~WebHelperPluginFrameClient() { }
33 
createPlugin(WebLocalFrame * frame,const WebPluginParams & params)34     virtual WebPlugin* createPlugin(WebLocalFrame* frame, const WebPluginParams& params) OVERRIDE
35     {
36         return m_createPlaceholder ? new FakePlaceholderWebPlugin(frame, params) : new FakeWebPlugin(frame, params);
37     }
38 
setCreatePlaceholder(bool createPlaceholder)39     void setCreatePlaceholder(bool createPlaceholder) { m_createPlaceholder = createPlaceholder; }
40 
41 private:
42     bool m_createPlaceholder;
43 };
44 
45 class WebHelperPluginTest : public testing::Test {
46 protected:
SetUp()47     virtual void SetUp() OVERRIDE
48     {
49         m_helper.initializeAndLoad("about:blank", false, &m_frameClient);
50     }
51 
52 
destroyHelperPlugin()53     void destroyHelperPlugin()
54     {
55         m_plugin.clear();
56         // WebHelperPlugin is destroyed by a task posted to the message loop.
57         FrameTestHelpers::runPendingTasks();
58     }
59 
60     FrameTestHelpers::WebViewHelper m_helper;
61     WebHelperPluginFrameClient m_frameClient;
62     OwnPtr<WebHelperPlugin> m_plugin;
63 };
64 
TEST_F(WebHelperPluginTest,CreateAndDestroyAfterWebViewDestruction)65 TEST_F(WebHelperPluginTest, CreateAndDestroyAfterWebViewDestruction)
66 {
67     m_plugin = adoptPtr(WebHelperPlugin::create("hello", m_helper.webView()->mainFrame()->toWebLocalFrame()));
68     EXPECT_TRUE(m_plugin);
69     EXPECT_TRUE(m_plugin->getPlugin());
70 
71     m_helper.reset();
72     destroyHelperPlugin();
73 }
74 
TEST_F(WebHelperPluginTest,CreateAndDestroyBeforeWebViewDestruction)75 TEST_F(WebHelperPluginTest, CreateAndDestroyBeforeWebViewDestruction)
76 {
77     m_plugin = adoptPtr(WebHelperPlugin::create("hello", m_helper.webView()->mainFrame()->toWebLocalFrame()));
78     EXPECT_TRUE(m_plugin);
79     EXPECT_TRUE(m_plugin->getPlugin());
80 
81     destroyHelperPlugin();
82     m_helper.reset();
83 }
84 
TEST_F(WebHelperPluginTest,CreateFailsWithPlaceholder)85 TEST_F(WebHelperPluginTest, CreateFailsWithPlaceholder)
86 {
87     m_frameClient.setCreatePlaceholder(true);
88 
89     m_plugin = adoptPtr(WebHelperPlugin::create("hello", m_helper.webView()->mainFrame()->toWebLocalFrame()));
90     EXPECT_EQ(0, m_plugin.get());
91 }
92 
93 } // namespace
94 
95 } // namespace
96