| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/path_service.h" | 6 #include "base/path_service.h" |
| 7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
| 8 #include "chrome/browser/ui/browser.h" | 8 #include "chrome/browser/ui/browser.h" |
| 9 #include "chrome/test/base/in_process_browser_test.h" | 9 #include "chrome/test/base/in_process_browser_test.h" |
| 10 #include "chrome/test/base/ui_test_utils.h" | 10 #include "chrome/test/base/ui_test_utils.h" |
| 11 #include "content/public/browser/browser_thread.h" | 11 #include "content/public/browser/browser_thread.h" |
| 12 #include "content/public/common/content_switches.h" | 12 #include "content/public/common/content_switches.h" |
| 13 #include "content/test/net/url_request_mock_http_job.h" | 13 #include "content/test/net/url_request_mock_http_job.h" |
| 14 #include "webkit/plugins/plugin_switches.h" |
| 15 |
| 16 #if defined(OS_WIN) |
| 17 #include "base/win/registry.h" |
| 18 #endif |
| 14 | 19 |
| 15 using content::BrowserThread; | 20 using content::BrowserThread; |
| 16 | 21 |
| 17 namespace { | 22 namespace { |
| 18 | 23 |
| 19 void SetUrlRequestMock(const FilePath& path) { | 24 void SetUrlRequestMock(const FilePath& path) { |
| 20 URLRequestMockHTTPJob::AddUrlHandler(path); | 25 URLRequestMockHTTPJob::AddUrlHandler(path); |
| 21 } | 26 } |
| 22 | 27 |
| 23 } | 28 } |
| 24 | 29 |
| 25 class PluginTest : public InProcessBrowserTest { | 30 class PluginTest : public InProcessBrowserTest { |
| 26 protected: | 31 protected: |
| 27 PluginTest() {} | 32 PluginTest() {} |
| 28 | 33 |
| 29 virtual void SetUpCommandLine(CommandLine* command_line) { | 34 virtual void SetUpCommandLine(CommandLine* command_line) { |
| 30 // Some NPAPI tests schedule garbage collection to force object tear-down. | 35 // Some NPAPI tests schedule garbage collection to force object tear-down. |
| 31 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose_gc"); | 36 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose_gc"); |
| 32 // For OpenPopupWindowWithPlugin. | 37 // For OpenPopupWindowWithPlugin. |
| 33 command_line->AppendSwitch(switches::kDisablePopupBlocking); | 38 command_line->AppendSwitch(switches::kDisablePopupBlocking); |
| 34 #if defined(OS_MACOSX) | 39 #if defined(OS_WIN) |
| 40 const testing::TestInfo* const test_info = |
| 41 testing::UnitTest::GetInstance()->current_test_info(); |
| 42 if (strcmp(test_info->name(), "MediaPlayerNew") == 0) { |
| 43 // The installer adds our process names to the registry key below. Since |
| 44 // the installer might not have run on this machine, add it manually. |
| 45 base::win::RegKey regkey; |
| 46 if (regkey.Open(HKEY_LOCAL_MACHINE, |
| 47 L"Software\\Microsoft\\MediaPlayer\\ShimInclusionList", |
| 48 KEY_WRITE) == ERROR_SUCCESS) { |
| 49 regkey.CreateKey(L"BROWSER_TESTS.EXE", KEY_READ); |
| 50 } |
| 51 } else if (strcmp(test_info->name(), "MediaPlayerOld") == 0) { |
| 52 // When testing the old WMP plugin, we need to force Chrome to not load |
| 53 // the new plugin. |
| 54 command_line->AppendSwitch(switches::kUseOldWMPPlugin); |
| 55 } else if (strcmp(test_info->name(), "FlashSecurity") == 0) { |
| 56 command_line->AppendSwitchASCII(switches::kTestSandbox, |
| 57 "security_tests.dll"); |
| 58 } |
| 59 #elif defined(OS_MACOSX) |
| 35 FilePath plugin_dir; | 60 FilePath plugin_dir; |
| 36 PathService::Get(base::DIR_MODULE, &plugin_dir); | 61 PathService::Get(base::DIR_MODULE, &plugin_dir); |
| 37 plugin_dir = plugin_dir.AppendASCII("plugins"); | 62 plugin_dir = plugin_dir.AppendASCII("plugins"); |
| 38 // The plugins directory isn't read by default on the Mac, so it needs to be | 63 // The plugins directory isn't read by default on the Mac, so it needs to be |
| 39 // explicitly registered. | 64 // explicitly registered. |
| 40 command_line->AppendSwitchPath(switches::kExtraPluginDir, plugin_dir); | 65 command_line->AppendSwitchPath(switches::kExtraPluginDir, plugin_dir); |
| 41 #endif | 66 #endif |
| 67 |
| 68 // TODO(jam): since these plugin tests are running under Chrome, we need to |
| 69 // tell it to disable its security features for old plugins. Once this is |
| 70 // running under content_browsertests, these flags won't be needed. |
| 71 // http://crbug.com/90448 |
| 72 // switches::kAllowOutdatedPlugins |
| 73 command_line->AppendSwitch("allow-outdated-plugins"); |
| 74 // switches::kAlwaysAuthorizePlugins |
| 75 command_line->AppendSwitch("always-authorize-plugins"); |
| 42 } | 76 } |
| 43 | 77 |
| 44 virtual void SetUpOnMainThread() OVERRIDE { | 78 virtual void SetUpOnMainThread() OVERRIDE { |
| 45 FilePath path = ui_test_utils::GetTestFilePath(FilePath(), FilePath()); | 79 FilePath path = ui_test_utils::GetTestFilePath(FilePath(), FilePath()); |
| 46 BrowserThread::PostTask( | 80 BrowserThread::PostTask( |
| 47 BrowserThread::IO, FROM_HERE, base::Bind(&SetUrlRequestMock, path)); | 81 BrowserThread::IO, FROM_HERE, base::Bind(&SetUrlRequestMock, path)); |
| 48 } | 82 } |
| 49 | 83 |
| 50 void LoadAndWait(const GURL& url, const char* title) { | 84 void LoadAndWait(const GURL& url) { |
| 51 string16 expected_title(ASCIIToUTF16(title)); | 85 string16 expected_title(ASCIIToUTF16("OK")); |
| 52 ui_test_utils::TitleWatcher title_watcher( | 86 ui_test_utils::TitleWatcher title_watcher( |
| 53 browser()->GetSelectedWebContents(), expected_title); | 87 browser()->GetSelectedWebContents(), expected_title); |
| 54 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); | 88 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
| 89 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("plugin_not_found")); |
| 55 ui_test_utils::NavigateToURL(browser(), url); | 90 ui_test_utils::NavigateToURL(browser(), url); |
| 56 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 91 string16 title = title_watcher.WaitAndGetTitle(); |
| 92 if (title == ASCIIToUTF16("plugin_not_found")) { |
| 93 const testing::TestInfo* const test_info = |
| 94 testing::UnitTest::GetInstance()->current_test_info(); |
| 95 LOG(INFO) << "PluginTest." << test_info->name() << |
| 96 " not running because plugin not installed."; |
| 97 } else { |
| 98 EXPECT_EQ(expected_title, title); |
| 99 } |
| 57 } | 100 } |
| 58 | 101 |
| 59 GURL GetURL(const char* filename) { | 102 GURL GetURL(const char* filename) { |
| 60 return ui_test_utils::GetTestUrl( | 103 return ui_test_utils::GetTestUrl( |
| 61 FilePath().AppendASCII("npapi"), FilePath().AppendASCII(filename)); | 104 FilePath().AppendASCII("npapi"), FilePath().AppendASCII(filename)); |
| 62 } | 105 } |
| 63 | 106 |
| 64 void NavigateAway() { | 107 void NavigateAway() { |
| 65 GURL url = ui_test_utils::GetTestUrl( | 108 GURL url = ui_test_utils::GetTestUrl( |
| 66 FilePath(), FilePath().AppendASCII("simple.html")); | 109 FilePath(), FilePath().AppendASCII("simple.html")); |
| 67 LoadAndWait(url, "simple.html"); | 110 LoadAndWait(url); |
| 111 } |
| 112 |
| 113 void TestPlugin(const char* filename) { |
| 114 FilePath path = ui_test_utils::GetTestFilePath( |
| 115 FilePath().AppendASCII("plugin"), FilePath().AppendASCII(filename)); |
| 116 if (!file_util::PathExists(path)) { |
| 117 const testing::TestInfo* const test_info = |
| 118 testing::UnitTest::GetInstance()->current_test_info(); |
| 119 LOG(INFO) << "PluginTest." << test_info->name() << |
| 120 " not running because test data wasn't found."; |
| 121 return; |
| 122 } |
| 123 |
| 124 GURL url = ui_test_utils::GetTestUrl( |
| 125 FilePath().AppendASCII("plugin"), FilePath().AppendASCII(filename)); |
| 126 LoadAndWait(url); |
| 68 } | 127 } |
| 69 }; | 128 }; |
| 70 | 129 |
| 71 // Make sure that navigating away from a plugin referenced by JS doesn't | 130 // Make sure that navigating away from a plugin referenced by JS doesn't |
| 72 // crash. | 131 // crash. |
| 73 IN_PROC_BROWSER_TEST_F(PluginTest, UnloadNoCrash) { | 132 IN_PROC_BROWSER_TEST_F(PluginTest, UnloadNoCrash) { |
| 74 LoadAndWait(GetURL("layout_test_plugin.html"), "Layout Test Plugin Test"); | 133 LoadAndWait(GetURL("layout_test_plugin.html")); |
| 75 NavigateAway(); | 134 NavigateAway(); |
| 76 } | 135 } |
| 77 | 136 |
| 78 // Tests if a plugin executing a self deleting script using NPN_GetURL | 137 // Tests if a plugin executing a self deleting script using NPN_GetURL |
| 79 // works without crashing or hanging | 138 // works without crashing or hanging |
| 80 // Flaky: http://crbug.com/59327 | 139 // Flaky: http://crbug.com/59327 |
| 81 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginGetUrl) { | 140 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginGetUrl) { |
| 82 LoadAndWait(GetURL("self_delete_plugin_geturl.html"), "OK"); | 141 LoadAndWait(GetURL("self_delete_plugin_geturl.html")); |
| 83 } | 142 } |
| 84 | 143 |
| 85 // Tests if a plugin executing a self deleting script using Invoke | 144 // Tests if a plugin executing a self deleting script using Invoke |
| 86 // works without crashing or hanging | 145 // works without crashing or hanging |
| 87 // Flaky. See http://crbug.com/30702 | 146 // Flaky. See http://crbug.com/30702 |
| 88 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvoke) { | 147 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvoke) { |
| 89 LoadAndWait(GetURL("self_delete_plugin_invoke.html"), "OK"); | 148 LoadAndWait(GetURL("self_delete_plugin_invoke.html")); |
| 90 } | 149 } |
| 91 | 150 |
| 92 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectReleasedOnDestruction) { | 151 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectReleasedOnDestruction) { |
| 93 ui_test_utils::NavigateToURL( | 152 ui_test_utils::NavigateToURL( |
| 94 browser(), GetURL("npobject_released_on_destruction.html")); | 153 browser(), GetURL("npobject_released_on_destruction.html")); |
| 95 NavigateAway(); | 154 NavigateAway(); |
| 96 } | 155 } |
| 97 | 156 |
| 98 // Test that a dialog is properly created when a plugin throws an | 157 // Test that a dialog is properly created when a plugin throws an |
| 99 // exception. Should be run for in and out of process plugins, but | 158 // exception. Should be run for in and out of process plugins, but |
| 100 // the more interesting case is out of process, where we must route | 159 // the more interesting case is out of process, where we must route |
| 101 // the exception to the correct renderer. | 160 // the exception to the correct renderer. |
| 102 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectSetException) { | 161 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectSetException) { |
| 103 LoadAndWait(GetURL("npobject_set_exception.html"), "OK"); | 162 LoadAndWait(GetURL("npobject_set_exception.html")); |
| 104 } | 163 } |
| 105 | 164 |
| 106 #if defined(OS_WIN) | 165 #if defined(OS_WIN) |
| 107 // Tests if a plugin executing a self deleting script in the context of | 166 // Tests if a plugin executing a self deleting script in the context of |
| 108 // a synchronous mouseup works correctly. | 167 // a synchronous mouseup works correctly. |
| 109 // This was never ported to Mac. The only thing remaining is to make | 168 // This was never ported to Mac. The only thing remaining is to make |
| 110 // ui_test_utils::SimulateMouseClick get to Mac plugins, currently it doesn't | 169 // ui_test_utils::SimulateMouseClick get to Mac plugins, currently it doesn't |
| 111 // work. | 170 // work. |
| 112 IN_PROC_BROWSER_TEST_F(PluginTest, | 171 IN_PROC_BROWSER_TEST_F(PluginTest, |
| 113 SelfDeletePluginInvokeInSynchronousMouseUp) { | 172 SelfDeletePluginInvokeInSynchronousMouseUp) { |
| 114 ui_test_utils::NavigateToURL( | 173 ui_test_utils::NavigateToURL( |
| 115 browser(), GetURL("execute_script_delete_in_mouse_up.html")); | 174 browser(), GetURL("execute_script_delete_in_mouse_up.html")); |
| 116 | 175 |
| 117 string16 expected_title(ASCIIToUTF16("OK")); | 176 string16 expected_title(ASCIIToUTF16("OK")); |
| 118 ui_test_utils::TitleWatcher title_watcher( | 177 ui_test_utils::TitleWatcher title_watcher( |
| 119 browser()->GetSelectedWebContents(), expected_title); | 178 browser()->GetSelectedWebContents(), expected_title); |
| 120 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); | 179 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
| 121 ui_test_utils::SimulateMouseClick(browser()->GetSelectedWebContents()); | 180 ui_test_utils::SimulateMouseClick(browser()->GetSelectedWebContents()); |
| 122 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 181 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 123 } | 182 } |
| 124 #endif | 183 #endif |
| 125 | 184 |
| 126 // Flaky, http://crbug.com/60071. | 185 // Flaky, http://crbug.com/60071. |
| 127 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRequest404Response) { | 186 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRequest404Response) { |
| 128 GURL url(URLRequestMockHTTPJob::GetMockUrl( | 187 GURL url(URLRequestMockHTTPJob::GetMockUrl( |
| 129 FilePath().AppendASCII("npapi"). | 188 FilePath().AppendASCII("npapi"). |
| 130 AppendASCII("plugin_url_request_404.html"))); | 189 AppendASCII("plugin_url_request_404.html"))); |
| 131 LoadAndWait(url, "OK"); | 190 LoadAndWait(url); |
| 132 } | 191 } |
| 133 | 192 |
| 134 // Tests if a plugin executing a self deleting script using Invoke with | 193 // Tests if a plugin executing a self deleting script using Invoke with |
| 135 // a modal dialog showing works without crashing or hanging | 194 // a modal dialog showing works without crashing or hanging |
| 136 // Disabled, flakily exceeds timeout, http://crbug.com/46257. | 195 // Disabled, flakily exceeds timeout, http://crbug.com/46257. |
| 137 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvokeAlert) { | 196 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvokeAlert) { |
| 138 // Navigate asynchronously because if we waitd until it completes, there's a | 197 // Navigate asynchronously because if we waitd until it completes, there's a |
| 139 // race condition where the alert can come up before we start watching for it. | 198 // race condition where the alert can come up before we start watching for it. |
| 140 ui_test_utils::NavigateToURLWithDisposition( | 199 ui_test_utils::NavigateToURLWithDisposition( |
| 141 browser(), GetURL("self_delete_plugin_invoke_alert.html"), CURRENT_TAB, | 200 browser(), GetURL("self_delete_plugin_invoke_alert.html"), CURRENT_TAB, |
| 142 0); | 201 0); |
| 143 | 202 |
| 144 string16 expected_title(ASCIIToUTF16("OK")); | 203 string16 expected_title(ASCIIToUTF16("OK")); |
| 145 ui_test_utils::TitleWatcher title_watcher( | 204 ui_test_utils::TitleWatcher title_watcher( |
| 146 browser()->GetSelectedWebContents(), expected_title); | 205 browser()->GetSelectedWebContents(), expected_title); |
| 147 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); | 206 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
| 148 | 207 |
| 149 ui_test_utils::WaitForAppModalDialogAndCloseIt(); | 208 ui_test_utils::WaitForAppModalDialogAndCloseIt(); |
| 150 | 209 |
| 151 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 210 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 152 } | 211 } |
| 153 | 212 |
| 154 // Test passing arguments to a plugin. | 213 // Test passing arguments to a plugin. |
| 155 IN_PROC_BROWSER_TEST_F(PluginTest, Arguments) { | 214 IN_PROC_BROWSER_TEST_F(PluginTest, Arguments) { |
| 156 LoadAndWait(GetURL("arguments.html"), "OK"); | 215 LoadAndWait(GetURL("arguments.html")); |
| 157 } | 216 } |
| 158 | 217 |
| 159 // Test invoking many plugins within a single page. | 218 // Test invoking many plugins within a single page. |
| 160 IN_PROC_BROWSER_TEST_F(PluginTest, ManyPlugins) { | 219 IN_PROC_BROWSER_TEST_F(PluginTest, ManyPlugins) { |
| 161 LoadAndWait(GetURL("many_plugins.html"), "OK"); | 220 LoadAndWait(GetURL("many_plugins.html")); |
| 162 } | 221 } |
| 163 | 222 |
| 164 // Test various calls to GetURL from a plugin. | 223 // Test various calls to GetURL from a plugin. |
| 165 IN_PROC_BROWSER_TEST_F(PluginTest, GetURL) { | 224 IN_PROC_BROWSER_TEST_F(PluginTest, GetURL) { |
| 166 LoadAndWait(GetURL("geturl.html"), "OK"); | 225 LoadAndWait(GetURL("geturl.html")); |
| 167 } | 226 } |
| 168 | 227 |
| 169 // Test various calls to GetURL for javascript URLs with | 228 // Test various calls to GetURL for javascript URLs with |
| 170 // non NULL targets from a plugin. | 229 // non NULL targets from a plugin. |
| 171 IN_PROC_BROWSER_TEST_F(PluginTest, GetJavaScriptURL) { | 230 IN_PROC_BROWSER_TEST_F(PluginTest, GetJavaScriptURL) { |
| 172 LoadAndWait(GetURL("get_javascript_url.html"), "OK"); | 231 LoadAndWait(GetURL("get_javascript_url.html")); |
| 173 } | 232 } |
| 174 | 233 |
| 175 // Test that calling GetURL with a javascript URL and target=_self | 234 // Test that calling GetURL with a javascript URL and target=_self |
| 176 // works properly when the plugin is embedded in a subframe. | 235 // works properly when the plugin is embedded in a subframe. |
| 177 IN_PROC_BROWSER_TEST_F(PluginTest, GetJavaScriptURL2) { | 236 IN_PROC_BROWSER_TEST_F(PluginTest, GetJavaScriptURL2) { |
| 178 LoadAndWait(GetURL("get_javascript_url2.html"), "OK"); | 237 LoadAndWait(GetURL("get_javascript_url2.html")); |
| 179 } | 238 } |
| 180 | 239 |
| 181 // Test is flaky on linux/cros/win builders. http://crbug.com/71904 | 240 // Test is flaky on linux/cros/win builders. http://crbug.com/71904 |
| 182 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRedirectNotification) { | 241 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRedirectNotification) { |
| 183 LoadAndWait(GetURL("geturl_redirect_notify.html"), "OK"); | 242 LoadAndWait(GetURL("geturl_redirect_notify.html")); |
| 184 } | 243 } |
| 185 | 244 |
| 186 // Tests that identity is preserved for NPObjects passed from a plugin | 245 // Tests that identity is preserved for NPObjects passed from a plugin |
| 187 // into JavaScript. | 246 // into JavaScript. |
| 188 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectIdentity) { | 247 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectIdentity) { |
| 189 LoadAndWait(GetURL("npobject_identity.html"), "OK"); | 248 LoadAndWait(GetURL("npobject_identity.html")); |
| 190 } | 249 } |
| 191 | 250 |
| 192 // Tests that if an NPObject is proxies back to its original process, the | 251 // Tests that if an NPObject is proxies back to its original process, the |
| 193 // original pointer is returned and not a proxy. If this fails the plugin | 252 // original pointer is returned and not a proxy. If this fails the plugin |
| 194 // will crash. | 253 // will crash. |
| 195 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectProxy) { | 254 IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectProxy) { |
| 196 LoadAndWait(GetURL("npobject_proxy.html"), "OK"); | 255 LoadAndWait(GetURL("npobject_proxy.html")); |
| 197 } | 256 } |
| 198 | 257 |
| 199 #if defined(OS_WIN) || defined(OS_MACOSX) | 258 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 200 // Tests if a plugin executing a self deleting script in the context of | 259 // Tests if a plugin executing a self deleting script in the context of |
| 201 // a synchronous paint event works correctly | 260 // a synchronous paint event works correctly |
| 202 // http://crbug.com/44960 | 261 // http://crbug.com/44960 |
| 203 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvokeInSynchronousPaint) { | 262 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvokeInSynchronousPaint) { |
| 204 LoadAndWait(GetURL("execute_script_delete_in_paint.html"), "OK"); | 263 LoadAndWait(GetURL("execute_script_delete_in_paint.html")); |
| 205 } | 264 } |
| 206 #endif | 265 #endif |
| 207 | 266 |
| 208 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInNewStream) { | 267 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInNewStream) { |
| 209 LoadAndWait(GetURL("self_delete_plugin_stream.html"), "OK"); | 268 LoadAndWait(GetURL("self_delete_plugin_stream.html")); |
| 210 } | 269 } |
| 211 | 270 |
| 212 // This test asserts on Mac in plugin_host in the NPNVWindowNPObject case. | 271 // This test asserts on Mac in plugin_host in the NPNVWindowNPObject case. |
| 213 #if !(defined(OS_MACOSX) && !defined(NDEBUG)) | 272 #if !(defined(OS_MACOSX) && !defined(NDEBUG)) |
| 214 // If this test flakes use http://crbug.com/95558. | 273 // If this test flakes use http://crbug.com/95558. |
| 215 IN_PROC_BROWSER_TEST_F(PluginTest, DeletePluginInDeallocate) { | 274 IN_PROC_BROWSER_TEST_F(PluginTest, DeletePluginInDeallocate) { |
| 216 LoadAndWait(GetURL("plugin_delete_in_deallocate.html"), "OK"); | 275 LoadAndWait(GetURL("plugin_delete_in_deallocate.html")); |
| 217 } | 276 } |
| 218 #endif | 277 #endif |
| 219 | 278 |
| 220 #if defined(OS_WIN) | 279 #if defined(OS_WIN) |
| 221 | 280 |
| 222 IN_PROC_BROWSER_TEST_F(PluginTest, VerifyPluginWindowRect) { | 281 IN_PROC_BROWSER_TEST_F(PluginTest, VerifyPluginWindowRect) { |
| 223 LoadAndWait(GetURL("verify_plugin_window_rect.html"), "OK"); | 282 LoadAndWait(GetURL("verify_plugin_window_rect.html")); |
| 224 } | 283 } |
| 225 | 284 |
| 226 // Tests that creating a new instance of a plugin while another one is handling | 285 // Tests that creating a new instance of a plugin while another one is handling |
| 227 // a paint message doesn't cause deadlock. | 286 // a paint message doesn't cause deadlock. |
| 228 IN_PROC_BROWSER_TEST_F(PluginTest, CreateInstanceInPaint) { | 287 IN_PROC_BROWSER_TEST_F(PluginTest, CreateInstanceInPaint) { |
| 229 LoadAndWait(GetURL("create_instance_in_paint.html"), "OK"); | 288 LoadAndWait(GetURL("create_instance_in_paint.html")); |
| 230 } | 289 } |
| 231 | 290 |
| 232 // Tests that putting up an alert in response to a paint doesn't deadlock. | 291 // Tests that putting up an alert in response to a paint doesn't deadlock. |
| 233 IN_PROC_BROWSER_TEST_F(PluginTest, AlertInWindowMessage) { | 292 IN_PROC_BROWSER_TEST_F(PluginTest, AlertInWindowMessage) { |
| 234 ui_test_utils::NavigateToURL( | 293 ui_test_utils::NavigateToURL( |
| 235 browser(), GetURL("alert_in_window_message.html")); | 294 browser(), GetURL("alert_in_window_message.html")); |
| 236 | 295 |
| 237 ui_test_utils::WaitForAppModalDialogAndCloseIt(); | 296 ui_test_utils::WaitForAppModalDialogAndCloseIt(); |
| 238 ui_test_utils::WaitForAppModalDialogAndCloseIt(); | 297 ui_test_utils::WaitForAppModalDialogAndCloseIt(); |
| 239 } | 298 } |
| 240 | 299 |
| 241 IN_PROC_BROWSER_TEST_F(PluginTest, VerifyNPObjectLifetimeTest) { | 300 IN_PROC_BROWSER_TEST_F(PluginTest, VerifyNPObjectLifetimeTest) { |
| 242 LoadAndWait(GetURL("npobject_lifetime_test.html"), "OK"); | 301 LoadAndWait(GetURL("npobject_lifetime_test.html")); |
| 243 } | 302 } |
| 244 | 303 |
| 245 // Tests that we don't crash or assert if NPP_New fails | 304 // Tests that we don't crash or assert if NPP_New fails |
| 246 IN_PROC_BROWSER_TEST_F(PluginTest, NewFails) { | 305 IN_PROC_BROWSER_TEST_F(PluginTest, NewFails) { |
| 247 LoadAndWait(GetURL("new_fails.html"), "OK"); | 306 LoadAndWait(GetURL("new_fails.html")); |
| 248 } | 307 } |
| 249 | 308 |
| 250 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInNPNEvaluate) { | 309 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInNPNEvaluate) { |
| 251 LoadAndWait(GetURL("execute_script_delete_in_npn_evaluate.html"), "OK"); | 310 LoadAndWait(GetURL("execute_script_delete_in_npn_evaluate.html")); |
| 252 } | 311 } |
| 253 | 312 |
| 254 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeleteCreatePluginInNPNEvaluate) { | 313 IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeleteCreatePluginInNPNEvaluate) { |
| 255 LoadAndWait(GetURL("npn_plugin_delete_create_in_evaluate.html"), "OK"); | 314 LoadAndWait(GetURL("npn_plugin_delete_create_in_evaluate.html")); |
| 256 } | 315 } |
| 257 | 316 |
| 258 #endif // OS_WIN | 317 #endif // OS_WIN |
| 259 | 318 |
| 260 // If this flakes, reopen http://crbug.com/17645 | 319 // If this flakes, reopen http://crbug.com/17645 |
| 261 // As of 6 July 2011, this test is flaky on Windows (perhaps due to timing out). | 320 // As of 6 July 2011, this test is flaky on Windows (perhaps due to timing out). |
| 262 #if !defined(OS_MACOSX) | 321 #if !defined(OS_MACOSX) |
| 263 // Disabled on Mac because the plugin side isn't implemented yet, see | 322 // Disabled on Mac because the plugin side isn't implemented yet, see |
| 264 // "TODO(port)" in plugin_javascript_open_popup.cc. | 323 // "TODO(port)" in plugin_javascript_open_popup.cc. |
| 265 IN_PROC_BROWSER_TEST_F(PluginTest, OpenPopupWindowWithPlugin) { | 324 IN_PROC_BROWSER_TEST_F(PluginTest, OpenPopupWindowWithPlugin) { |
| 266 LoadAndWait(GetURL("get_javascript_open_popup_with_plugin.html"), "OK"); | 325 LoadAndWait(GetURL("get_javascript_open_popup_with_plugin.html")); |
| 267 } | 326 } |
| 268 #endif | 327 #endif |
| 269 | 328 |
| 270 // Test checking the privacy mode is off. | 329 // Test checking the privacy mode is off. |
| 271 IN_PROC_BROWSER_TEST_F(PluginTest, PrivateDisabled) { | 330 IN_PROC_BROWSER_TEST_F(PluginTest, PrivateDisabled) { |
| 272 LoadAndWait(GetURL("private.html"), "OK"); | 331 LoadAndWait(GetURL("private.html")); |
| 273 } | 332 } |
| 274 | 333 |
| 275 IN_PROC_BROWSER_TEST_F(PluginTest, ScheduleTimer) { | 334 IN_PROC_BROWSER_TEST_F(PluginTest, ScheduleTimer) { |
| 276 LoadAndWait(GetURL("schedule_timer.html"), "OK"); | 335 LoadAndWait(GetURL("schedule_timer.html")); |
| 277 } | 336 } |
| 278 | 337 |
| 279 IN_PROC_BROWSER_TEST_F(PluginTest, PluginThreadAsyncCall) { | 338 IN_PROC_BROWSER_TEST_F(PluginTest, PluginThreadAsyncCall) { |
| 280 LoadAndWait(GetURL("plugin_thread_async_call.html"), "OK"); | 339 LoadAndWait(GetURL("plugin_thread_async_call.html")); |
| 281 } | 340 } |
| 282 | 341 |
| 283 // Test checking the privacy mode is on. | 342 // Test checking the privacy mode is on. |
| 284 // If this flakes on Linux, use http://crbug.com/104380 | 343 // If this flakes on Linux, use http://crbug.com/104380 |
| 285 IN_PROC_BROWSER_TEST_F(PluginTest, PrivateEnabled) { | 344 IN_PROC_BROWSER_TEST_F(PluginTest, PrivateEnabled) { |
| 286 LoadAndWait(GetURL("private.html"), "OK"); | 345 LoadAndWait(GetURL("private.html")); |
| 287 } | 346 } |
| 288 | 347 |
| 289 #if defined(OS_WIN) || defined(OS_MACOSX) | 348 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 290 // Test a browser hang due to special case of multiple | 349 // Test a browser hang due to special case of multiple |
| 291 // plugin instances indulged in sync calls across renderer. | 350 // plugin instances indulged in sync calls across renderer. |
| 292 IN_PROC_BROWSER_TEST_F(PluginTest, MultipleInstancesSyncCalls) { | 351 IN_PROC_BROWSER_TEST_F(PluginTest, MultipleInstancesSyncCalls) { |
| 293 LoadAndWait(GetURL("multiple_instances_sync_calls.html"), "OK"); | 352 LoadAndWait(GetURL("multiple_instances_sync_calls.html")); |
| 294 } | 353 } |
| 295 #endif | 354 #endif |
| 296 | 355 |
| 297 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRequestFailWrite) { | 356 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRequestFailWrite) { |
| 298 GURL url(URLRequestMockHTTPJob::GetMockUrl( | 357 GURL url(URLRequestMockHTTPJob::GetMockUrl( |
| 299 FilePath().AppendASCII("npapi"). | 358 FilePath().AppendASCII("npapi"). |
| 300 AppendASCII("plugin_url_request_fail_write.html"))); | 359 AppendASCII("plugin_url_request_fail_write.html"))); |
| 301 LoadAndWait(url, "OK"); | 360 LoadAndWait(url); |
| 302 } | 361 } |
| 303 | 362 |
| 304 #if defined(OS_WIN) | 363 #if defined(OS_WIN) |
| 305 IN_PROC_BROWSER_TEST_F(PluginTest, EnsureScriptingWorksInDestroy) { | 364 IN_PROC_BROWSER_TEST_F(PluginTest, EnsureScriptingWorksInDestroy) { |
| 306 LoadAndWait(GetURL("ensure_scripting_works_in_destroy.html"), "OK"); | 365 LoadAndWait(GetURL("ensure_scripting_works_in_destroy.html")); |
| 307 } | 366 } |
| 308 | 367 |
| 309 // This test uses a Windows Event to signal to the plugin that it should crash | 368 // This test uses a Windows Event to signal to the plugin that it should crash |
| 310 // on NP_Initialize. | 369 // on NP_Initialize. |
| 311 IN_PROC_BROWSER_TEST_F(PluginTest, NoHangIfInitCrashes) { | 370 IN_PROC_BROWSER_TEST_F(PluginTest, NoHangIfInitCrashes) { |
| 312 HANDLE crash_event = CreateEvent(NULL, TRUE, FALSE, L"TestPluginCrashOnInit"); | 371 HANDLE crash_event = CreateEvent(NULL, TRUE, FALSE, L"TestPluginCrashOnInit"); |
| 313 SetEvent(crash_event); | 372 SetEvent(crash_event); |
| 314 LoadAndWait(GetURL("no_hang_if_init_crashes.html"), "OK"); | 373 LoadAndWait(GetURL("no_hang_if_init_crashes.html")); |
| 315 CloseHandle(crash_event); | 374 CloseHandle(crash_event); |
| 316 } | 375 } |
| 317 #endif | 376 #endif |
| 318 | 377 |
| 319 // If this flakes on Mac, use http://crbug.com/111508 | 378 // If this flakes on Mac, use http://crbug.com/111508 |
| 320 IN_PROC_BROWSER_TEST_F(PluginTest, PluginReferrerTest) { | 379 IN_PROC_BROWSER_TEST_F(PluginTest, PluginReferrerTest) { |
| 321 GURL url(URLRequestMockHTTPJob::GetMockUrl( | 380 GURL url(URLRequestMockHTTPJob::GetMockUrl( |
| 322 FilePath().AppendASCII("npapi"). | 381 FilePath().AppendASCII("npapi"). |
| 323 AppendASCII("plugin_url_request_referrer_test.html"))); | 382 AppendASCII("plugin_url_request_referrer_test.html"))); |
| 324 LoadAndWait(url, "OK"); | 383 LoadAndWait(url); |
| 325 } | 384 } |
| 326 | 385 |
| 327 #if defined(OS_MACOSX) | 386 #if defined(OS_MACOSX) |
| 328 IN_PROC_BROWSER_TEST_F(PluginTest, PluginConvertPointTest) { | 387 IN_PROC_BROWSER_TEST_F(PluginTest, PluginConvertPointTest) { |
| 329 gfx::NativeWindow window = NULL; | 388 gfx::NativeWindow window = NULL; |
| 330 gfx::Rect bounds(50, 50, 400, 400); | 389 gfx::Rect bounds(50, 50, 400, 400); |
| 331 ui_test_utils::GetNativeWindow(browser(), &window); | 390 ui_test_utils::GetNativeWindow(browser(), &window); |
| 332 ui_test_utils::SetWindowBounds(window, bounds); | 391 ui_test_utils::SetWindowBounds(window, bounds); |
| 333 | 392 |
| 334 ui_test_utils::NavigateToURL(browser(), GetURL("convert_point.html")); | 393 ui_test_utils::NavigateToURL(browser(), GetURL("convert_point.html")); |
| 335 | 394 |
| 336 string16 expected_title(ASCIIToUTF16("OK")); | 395 string16 expected_title(ASCIIToUTF16("OK")); |
| 337 ui_test_utils::TitleWatcher title_watcher( | 396 ui_test_utils::TitleWatcher title_watcher( |
| 338 browser()->GetSelectedWebContents(), expected_title); | 397 browser()->GetSelectedWebContents(), expected_title); |
| 339 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); | 398 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
| 340 // TODO(stuartmorgan): When the automation system supports sending clicks, | 399 // TODO(stuartmorgan): When the automation system supports sending clicks, |
| 341 // change the test to trigger on mouse-down rather than window focus. | 400 // change the test to trigger on mouse-down rather than window focus. |
| 342 static_cast<content::WebContentsDelegate*>(browser())-> | 401 static_cast<content::WebContentsDelegate*>(browser())-> |
| 343 ActivateContents(browser()->GetSelectedWebContents()); | 402 ActivateContents(browser()->GetSelectedWebContents()); |
| 344 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 403 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 345 } | 404 } |
| 346 #endif | 405 #endif |
| 406 |
| 407 IN_PROC_BROWSER_TEST_F(PluginTest, Flash) { |
| 408 TestPlugin("flash.html"); |
| 409 } |
| 410 |
| 411 #if defined(OS_WIN) |
| 412 // Windows only test |
| 413 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashSecurity) { |
| 414 TestPlugin("flash.html"); |
| 415 } |
| 416 #endif // defined(OS_WIN) |
| 417 |
| 418 #if defined(OS_WIN) |
| 419 // TODO(port) Port the following tests to platforms that have the required |
| 420 // plugins. |
| 421 // Flaky: http://crbug.com/55915 |
| 422 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Quicktime) { |
| 423 TestPlugin("quicktime.html"); |
| 424 } |
| 425 |
| 426 // Disabled - http://crbug.com/44662 |
| 427 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_MediaPlayerNew) { |
| 428 TestPlugin("wmp_new.html"); |
| 429 } |
| 430 |
| 431 // http://crbug.com/4809 |
| 432 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_MediaPlayerOld) { |
| 433 TestPlugin("wmp_old.html"); |
| 434 } |
| 435 |
| 436 // Disabled - http://crbug.com/44673 |
| 437 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Real) { |
| 438 TestPlugin("real.html"); |
| 439 } |
| 440 |
| 441 IN_PROC_BROWSER_TEST_F(PluginTest, FlashOctetStream) { |
| 442 TestPlugin("flash-octet-stream.html"); |
| 443 } |
| 444 |
| 445 #if defined(OS_WIN) |
| 446 // http://crbug.com/53926 |
| 447 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashLayoutWhilePainting) { |
| 448 #else |
| 449 IN_PROC_BROWSER_TEST_F(PluginTest, FlashLayoutWhilePainting) { |
| 450 #endif |
| 451 TestPlugin("flash-layout-while-painting.html"); |
| 452 } |
| 453 |
| 454 // http://crbug.com/8690 |
| 455 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Java) { |
| 456 TestPlugin("Java.html"); |
| 457 } |
| 458 |
| 459 IN_PROC_BROWSER_TEST_F(PluginTest, Silverlight) { |
| 460 TestPlugin("silverlight.html"); |
| 461 } |
| 462 #endif // defined(OS_WIN) |
| OLD | NEW |