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