| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/content_settings/host_content_settings_map.h" | 5 #include "chrome/browser/content_settings/host_content_settings_map.h" |
| 6 #include "chrome/browser/extensions/extension_browsertest.h" | 6 #include "chrome/browser/extensions/extension_browsertest.h" |
| 7 #include "chrome/browser/extensions/extension_service.h" | 7 #include "chrome/browser/extensions/extension_service.h" |
| 8 #include "chrome/browser/extensions/extension_system.h" | 8 #include "chrome/browser/extensions/extension_system.h" |
| 9 #include "chrome/browser/prefs/pref_service.h" | 9 #include "chrome/browser/prefs/pref_service.h" |
| 10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 FilePath extension_dir = | 41 FilePath extension_dir = |
| 42 test_data_dir_.AppendASCII("uitest").AppendASCII("plugins"); | 42 test_data_dir_.AppendASCII("uitest").AppendASCII("plugins"); |
| 43 | 43 |
| 44 ui_test_utils::NavigateToURL(browser(), | 44 ui_test_utils::NavigateToURL(browser(), |
| 45 net::FilePathToFileURL(extension_dir.AppendASCII("test.html"))); | 45 net::FilePathToFileURL(extension_dir.AppendASCII("test.html"))); |
| 46 WebContents* tab = chrome::GetActiveWebContents(browser()); | 46 WebContents* tab = chrome::GetActiveWebContents(browser()); |
| 47 | 47 |
| 48 // With no extensions, the plugin should not be loaded. | 48 // With no extensions, the plugin should not be loaded. |
| 49 bool result = false; | 49 bool result = false; |
| 50 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 50 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 51 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 51 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 52 EXPECT_FALSE(result); | 52 EXPECT_FALSE(result); |
| 53 | 53 |
| 54 ExtensionService* service = extensions::ExtensionSystem::Get( | 54 ExtensionService* service = extensions::ExtensionSystem::Get( |
| 55 browser()->profile())->extension_service(); | 55 browser()->profile())->extension_service(); |
| 56 service->set_show_extensions_prompts(false); | 56 service->set_show_extensions_prompts(false); |
| 57 const size_t size_before = service->extensions()->size(); | 57 const size_t size_before = service->extensions()->size(); |
| 58 const Extension* extension = LoadExtension(extension_dir); | 58 const Extension* extension = LoadExtension(extension_dir); |
| 59 ASSERT_TRUE(extension); | 59 ASSERT_TRUE(extension); |
| 60 EXPECT_EQ(size_before + 1, service->extensions()->size()); | 60 EXPECT_EQ(size_before + 1, service->extensions()->size()); |
| 61 // Now the plugin should be in the cache. | 61 // Now the plugin should be in the cache. |
| 62 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 62 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 63 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 63 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 64 // We don't allow extension plugins to run on ChromeOS. | 64 // We don't allow extension plugins to run on ChromeOS. |
| 65 #if defined(OS_CHROMEOS) | 65 #if defined(OS_CHROMEOS) |
| 66 EXPECT_FALSE(result); | 66 EXPECT_FALSE(result); |
| 67 #else | 67 #else |
| 68 EXPECT_TRUE(result); | 68 EXPECT_TRUE(result); |
| 69 #endif | 69 #endif |
| 70 | 70 |
| 71 EXPECT_EQ(size_before + 1, service->extensions()->size()); | 71 EXPECT_EQ(size_before + 1, service->extensions()->size()); |
| 72 UnloadExtension(extension->id()); | 72 UnloadExtension(extension->id()); |
| 73 EXPECT_EQ(size_before, service->extensions()->size()); | 73 EXPECT_EQ(size_before, service->extensions()->size()); |
| 74 | 74 |
| 75 // Now the plugin should be unloaded, and the page should be broken. | 75 // Now the plugin should be unloaded, and the page should be broken. |
| 76 | 76 |
| 77 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 77 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 78 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 78 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 79 EXPECT_FALSE(result); | 79 EXPECT_FALSE(result); |
| 80 | 80 |
| 81 // If we reload the extension and page, it should work again. | 81 // If we reload the extension and page, it should work again. |
| 82 | 82 |
| 83 ASSERT_TRUE(LoadExtension(extension_dir)); | 83 ASSERT_TRUE(LoadExtension(extension_dir)); |
| 84 EXPECT_EQ(size_before + 1, service->extensions()->size()); | 84 EXPECT_EQ(size_before + 1, service->extensions()->size()); |
| 85 { | 85 { |
| 86 content::WindowedNotificationObserver observer( | 86 content::WindowedNotificationObserver observer( |
| 87 content::NOTIFICATION_LOAD_STOP, | 87 content::NOTIFICATION_LOAD_STOP, |
| 88 content::Source<NavigationController>( | 88 content::Source<NavigationController>( |
| 89 &chrome::GetActiveWebContents(browser())->GetController())); | 89 &chrome::GetActiveWebContents(browser())->GetController())); |
| 90 chrome::Reload(browser(), CURRENT_TAB); | 90 chrome::Reload(browser(), CURRENT_TAB); |
| 91 observer.Wait(); | 91 observer.Wait(); |
| 92 } | 92 } |
| 93 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 93 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 94 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 94 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 95 // We don't allow extension plugins to run on ChromeOS. | 95 // We don't allow extension plugins to run on ChromeOS. |
| 96 #if defined(OS_CHROMEOS) | 96 #if defined(OS_CHROMEOS) |
| 97 EXPECT_FALSE(result); | 97 EXPECT_FALSE(result); |
| 98 #else | 98 #else |
| 99 EXPECT_TRUE(result); | 99 EXPECT_TRUE(result); |
| 100 #endif | 100 #endif |
| 101 } | 101 } |
| 102 | 102 |
| 103 // Tests that private extension plugins are only visible to the extension. | 103 // Tests that private extension plugins are only visible to the extension. |
| 104 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, PluginPrivate) { | 104 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, PluginPrivate) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 118 const Extension* extension = LoadExtension(extension_dir); | 118 const Extension* extension = LoadExtension(extension_dir); |
| 119 ASSERT_TRUE(extension); | 119 ASSERT_TRUE(extension); |
| 120 EXPECT_EQ(size_before + 1, service->extensions()->size()); | 120 EXPECT_EQ(size_before + 1, service->extensions()->size()); |
| 121 | 121 |
| 122 // Load the test page through the extension URL, and the plugin should work. | 122 // Load the test page through the extension URL, and the plugin should work. |
| 123 ui_test_utils::NavigateToURL(browser(), | 123 ui_test_utils::NavigateToURL(browser(), |
| 124 extension->GetResourceURL("test.html")); | 124 extension->GetResourceURL("test.html")); |
| 125 WebContents* tab = chrome::GetActiveWebContents(browser()); | 125 WebContents* tab = chrome::GetActiveWebContents(browser()); |
| 126 bool result = false; | 126 bool result = false; |
| 127 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 127 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 128 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 128 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 129 // We don't allow extension plugins to run on ChromeOS. | 129 // We don't allow extension plugins to run on ChromeOS. |
| 130 #if defined(OS_CHROMEOS) | 130 #if defined(OS_CHROMEOS) |
| 131 EXPECT_FALSE(result); | 131 EXPECT_FALSE(result); |
| 132 #else | 132 #else |
| 133 // TODO(bauerb): This might wrongly fail if the plug-in takes too long | 133 // TODO(bauerb): This might wrongly fail if the plug-in takes too long |
| 134 // to load. Extension-private plug-ins don't appear in navigator.plugins, so | 134 // to load. Extension-private plug-ins don't appear in navigator.plugins, so |
| 135 // we can't check for the plug-in in Javascript. | 135 // we can't check for the plug-in in Javascript. |
| 136 EXPECT_TRUE(result); | 136 EXPECT_TRUE(result); |
| 137 #endif | 137 #endif |
| 138 | 138 |
| 139 // Regression test for http://crbug.com/131811: The plug-in should be | 139 // Regression test for http://crbug.com/131811: The plug-in should be |
| 140 // whitelisted for the extension (and only for the extension), so it should be | 140 // whitelisted for the extension (and only for the extension), so it should be |
| 141 // loaded even if content settings are set to block plug-ins. | 141 // loaded even if content settings are set to block plug-ins. |
| 142 browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( | 142 browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( |
| 143 CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); | 143 CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); |
| 144 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 144 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 145 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 145 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 146 // We don't allow extension plugins to run on ChromeOS. | 146 // We don't allow extension plugins to run on ChromeOS. |
| 147 #if defined(OS_CHROMEOS) | 147 #if defined(OS_CHROMEOS) |
| 148 EXPECT_FALSE(result); | 148 EXPECT_FALSE(result); |
| 149 #else | 149 #else |
| 150 EXPECT_TRUE(result); | 150 EXPECT_TRUE(result); |
| 151 #endif | 151 #endif |
| 152 | 152 |
| 153 // Now load it through a file URL. The plugin should not load. | 153 // Now load it through a file URL. The plugin should not load. |
| 154 ui_test_utils::NavigateToURL(browser(), | 154 ui_test_utils::NavigateToURL(browser(), |
| 155 net::FilePathToFileURL(extension_dir.AppendASCII("test.html"))); | 155 net::FilePathToFileURL(extension_dir.AppendASCII("test.html"))); |
| 156 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 156 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 157 tab->GetRenderViewHost(), "", "testPluginWorks()", &result)); | 157 tab->GetRenderViewHost(), L"", L"testPluginWorks()", &result)); |
| 158 EXPECT_FALSE(result); | 158 EXPECT_FALSE(result); |
| 159 } | 159 } |
| OLD | NEW |