Re-subimission of https://codereview.chromium.org/1041213003/
[chromium-blink-merge.git] / content / child / npapi / plugin_lib_unittest.cc
blob1469828019cc1419de8a49bd4ba9b282cc91a02a
1 // Copyright (c) 2012 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.
5 #include "content/child/npapi/plugin_lib.h"
7 #include "base/strings/string_util.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "build/build_config.h"
10 #include "testing/gtest/include/gtest/gtest.h"
12 namespace content {
14 // Test the unloading of plugin libs. Bug http://crbug.com/46526 showed that
15 // if UnloadAllPlugins() simply iterates through the g_loaded_libs global
16 // variable, we can get a crash if no plugin libs were marked as always loaded.
17 class PluginLibTest : public PluginLib {
18 public:
19 PluginLibTest() : PluginLib(WebPluginInfo()) {}
20 using PluginLib::Unload;
22 protected:
23 ~PluginLibTest() override {}
26 TEST(PluginLibLoading, UnloadAllPlugins) {
27 // For the creation of the g_loaded_libs global variable.
28 ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
29 PluginLibTest::CreatePluginLib(base::FilePath()));
31 // Try with a single plugin lib.
32 scoped_refptr<PluginLibTest> plugin_lib1(new PluginLibTest());
33 PluginLib::UnloadAllPlugins();
35 // Need to create it again, it should have been destroyed above.
36 ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
37 PluginLibTest::CreatePluginLib(base::FilePath()));
39 // Try with two plugin libs.
40 plugin_lib1 = new PluginLibTest();
41 scoped_refptr<PluginLibTest> plugin_lib2(new PluginLibTest());
42 PluginLib::UnloadAllPlugins();
44 // Need to create it again, it should have been destroyed above.
45 ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
46 PluginLibTest::CreatePluginLib(base::FilePath()));
48 // Now try to manually Unload one and then UnloadAll.
49 plugin_lib1 = new PluginLibTest();
50 plugin_lib2 = new PluginLibTest();
51 plugin_lib1->Unload();
52 PluginLib::UnloadAllPlugins();
54 // Need to create it again, it should have been destroyed above.
55 ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
56 PluginLibTest::CreatePluginLib(base::FilePath()));
58 // Now try to manually Unload the only one and then UnloadAll.
59 plugin_lib1 = new PluginLibTest();
60 plugin_lib1->Unload();
61 PluginLib::UnloadAllPlugins();
64 } // namespace content