Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: chrome/browser/extensions/plugin_apitest.cc

Issue 1862513003: Remove NPAPI from browser and utility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 <stddef.h>
6
7 #include "base/command_line.h"
8 #include "build/build_config.h"
9 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
10 #include "chrome/browser/extensions/extension_browsertest.h"
11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/browser_commands.h"
15 #include "chrome/browser/ui/tabs/tab_strip_model.h"
16 #include "chrome/common/pref_names.h"
17 #include "chrome/test/base/test_switches.h"
18 #include "chrome/test/base/ui_test_utils.h"
19 #include "components/content_settings/core/browser/host_content_settings_map.h"
20 #include "components/prefs/pref_service.h"
21 #include "content/public/browser/navigation_controller.h"
22 #include "content/public/browser/plugin_service.h"
23 #include "content/public/browser/web_contents.h"
24 #include "content/public/test/browser_test_utils.h"
25 #include "extensions/browser/extension_registry.h"
26 #include "extensions/browser/extension_system.h"
27 #include "extensions/common/extension.h"
28 #include "net/base/filename_util.h"
29
30 using content::NavigationController;
31 using content::WebContents;
32 using extensions::Extension;
33
34 #if defined(OS_WIN)
35 // http://crbug.com/123851 : test flakily fails on win.
36 #define MAYBE_PluginLoadUnload DISABLED_PluginLoadUnload
37 #elif defined(OS_MACOSX) && defined(ADDRESS_SANITIZER)
38 // ExtensionBrowserTest.PluginLoadUnload started failing after the switch to
39 // dynamic ASan runtime library on Mac. See http://crbug.com/234591.
40 #define MAYBE_PluginLoadUnload DISABLED_PluginLoadUnload
41 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
42 // Timing out on ARM linux http://crbug.com/238460
43 #define MAYBE_PluginLoadUnload DISABLED_PluginLoadUnload
44 #else
45 #define MAYBE_PluginLoadUnload PluginLoadUnload
46 #endif
47
48 // Tests that a renderer's plugin list is properly updated when we load and
49 // unload an extension that contains a plugin.
50 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, MAYBE_PluginLoadUnload) {
51 if (!content::PluginService::GetInstance()->NPAPIPluginsSupported())
52 return;
53 browser()->profile()->GetPrefs()->SetBoolean(prefs::kPluginsAlwaysAuthorize,
54 true);
55
56 base::FilePath extension_dir =
57 test_data_dir_.AppendASCII("uitest").AppendASCII("plugins");
58
59 ui_test_utils::NavigateToURL(browser(),
60 net::FilePathToFileURL(extension_dir.AppendASCII("test.html")));
61 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
62
63 // With no extensions, the plugin should not be loaded.
64 bool result = false;
65 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
66 tab, "testPluginWorks()", &result));
67 EXPECT_FALSE(result);
68
69 ExtensionService* service = extensions::ExtensionSystem::Get(
70 browser()->profile())->extension_service();
71 extensions::ExtensionRegistry* registry =
72 extensions::ExtensionRegistry::Get(browser()->profile());
73 service->set_show_extensions_prompts(false);
74 const size_t size_before = registry->enabled_extensions().size();
75 const Extension* extension = LoadExtension(extension_dir);
76 ASSERT_TRUE(extension);
77 EXPECT_EQ(size_before + 1, registry->enabled_extensions().size());
78 // Now the plugin should be in the cache.
79 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
80 tab, "testPluginWorks()", &result));
81 // We don't allow extension plugins to run on ChromeOS.
82 #if defined(OS_CHROMEOS)
83 EXPECT_FALSE(result);
84 #else
85 EXPECT_TRUE(result);
86 #endif
87
88 EXPECT_EQ(size_before + 1, registry->enabled_extensions().size());
89 UnloadExtension(extension->id());
90 EXPECT_EQ(size_before, registry->enabled_extensions().size());
91
92 // Now the plugin should be unloaded, and the page should be broken.
93
94 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
95 tab, "testPluginWorks()", &result));
96 EXPECT_FALSE(result);
97
98 // If we reload the extension and page, it should work again.
99
100 ASSERT_TRUE(LoadExtension(extension_dir));
101 EXPECT_EQ(size_before + 1, registry->enabled_extensions().size());
102 {
103 content::WindowedNotificationObserver observer(
104 content::NOTIFICATION_LOAD_STOP,
105 content::Source<NavigationController>(
106 &browser()->tab_strip_model()->GetActiveWebContents()->
107 GetController()));
108 chrome::Reload(browser(), CURRENT_TAB);
109 observer.Wait();
110 }
111 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
112 tab, "testPluginWorks()", &result));
113 // We don't allow extension plugins to run on ChromeOS.
114 #if defined(OS_CHROMEOS)
115 EXPECT_FALSE(result);
116 #else
117 EXPECT_TRUE(result);
118 #endif
119 }
120
121 #if defined(OS_MACOSX) && defined(ADDRESS_SANITIZER)
122 // ExtensionBrowserTest.PluginPrivate started failing after the switch to
123 // dynamic ASan runtime library on Mac. See http://crbug.com/234591.
124 #define MAYBE_PluginPrivate DISABLED_PluginPrivate
125 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
126 // Timing out on ARM linux http://crbug.com/238467
127 #define MAYBE_PluginPrivate DISABLED_PluginPrivate
128 #elif defined(OS_WIN) && defined(ARCH_CPU_X86_64)
129 // TODO(jschuh): Failing plugin tests. crbug.com/244653
130 #define MAYBE_PluginPrivate DISABLED_PluginPrivate
131 #else
132 #define MAYBE_PluginPrivate PluginPrivate
133 #endif
134 // Tests that private extension plugins are only visible to the extension.
135 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, MAYBE_PluginPrivate) {
136 #if defined(OS_WIN) && defined(USE_ASH)
137 // Disable this test in Metro+Ash for now (http://crbug.com/262796).
138 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
139 switches::kAshBrowserTests))
140 return;
141 #endif
142
143 if (!content::PluginService::GetInstance()->NPAPIPluginsSupported())
144 return;
145
146 browser()->profile()->GetPrefs()->SetBoolean(prefs::kPluginsAlwaysAuthorize,
147 true);
148
149 base::FilePath extension_dir =
150 test_data_dir_.AppendASCII("uitest").AppendASCII("plugins_private");
151
152 ExtensionService* service = extensions::ExtensionSystem::Get(
153 browser()->profile())->extension_service();
154 extensions::ExtensionRegistry* registry =
155 extensions::ExtensionRegistry::Get(browser()->profile());
156 service->set_show_extensions_prompts(false);
157 const size_t size_before = registry->enabled_extensions().size();
158 const Extension* extension = LoadExtension(extension_dir);
159 ASSERT_TRUE(extension);
160 EXPECT_EQ(size_before + 1, registry->enabled_extensions().size());
161
162 // Load the test page through the extension URL, and the plugin should work.
163 ui_test_utils::NavigateToURL(browser(),
164 extension->GetResourceURL("test.html"));
165 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
166 bool result = false;
167 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
168 tab, "testPluginWorks()", &result));
169 // We don't allow extension plugins to run on ChromeOS.
170 #if defined(OS_CHROMEOS)
171 EXPECT_FALSE(result);
172 #else
173 // TODO(bauerb): This might wrongly fail if the plugin takes too long
174 // to load. Extension-private plugins don't appear in navigator.plugins, so
175 // we can't check for the plugin in Javascript.
176 EXPECT_TRUE(result);
177 #endif
178
179 // Regression test for http://crbug.com/131811: The plugin should be
180 // whitelisted for the extension (and only for the extension), so it should be
181 // loaded even if content settings are set to block plugins.
182 HostContentSettingsMapFactory::GetForProfile(browser()->profile())
183 ->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PLUGINS,
184 CONTENT_SETTING_BLOCK);
185 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
186 tab, "testPluginWorks()", &result));
187 // We don't allow extension plugins to run on ChromeOS.
188 #if defined(OS_CHROMEOS)
189 EXPECT_FALSE(result);
190 #else
191 EXPECT_TRUE(result);
192 #endif
193
194 // Now load it through a file URL. The plugin should not load.
195 ui_test_utils::NavigateToURL(browser(),
196 net::FilePathToFileURL(extension_dir.AppendASCII("test.html")));
197 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
198 tab, "testPluginWorks()", &result));
199 EXPECT_FALSE(result);
200 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service_unittest.cc ('k') | chrome/browser/extensions/plugin_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698