Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / child / npapi / plugin_lib_unittest.cc
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.
4
5 #include "content/child/npapi/plugin_lib.h"
6
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"
11
12 namespace content {
13
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;
21
22  protected:
23   ~PluginLibTest() override {}
24 };
25
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()));
30
31   // Try with a single plugin lib.
32   scoped_refptr<PluginLibTest> plugin_lib1(new PluginLibTest());
33   PluginLib::UnloadAllPlugins();
34
35   // Need to create it again, it should have been destroyed above.
36   ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
37       PluginLibTest::CreatePluginLib(base::FilePath()));
38
39   // Try with two plugin libs.
40   plugin_lib1 = new PluginLibTest();
41   scoped_refptr<PluginLibTest> plugin_lib2(new PluginLibTest());
42   PluginLib::UnloadAllPlugins();
43
44   // Need to create it again, it should have been destroyed above.
45   ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
46       PluginLibTest::CreatePluginLib(base::FilePath()));
47
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();
53
54   // Need to create it again, it should have been destroyed above.
55   ASSERT_EQ(static_cast<PluginLibTest*>(NULL),
56       PluginLibTest::CreatePluginLib(base::FilePath()));
57
58   // Now try to manually Unload the only one and then UnloadAll.
59   plugin_lib1 = new PluginLibTest();
60   plugin_lib1->Unload();
61   PluginLib::UnloadAllPlugins();
62 }
63
64 }  // namespace content