Index: content/browser/plugin_browsertest.cc |
=================================================================== |
--- content/browser/plugin_browsertest.cc (revision 136820) |
+++ content/browser/plugin_browsertest.cc (working copy) |
@@ -11,7 +11,12 @@ |
#include "content/public/browser/browser_thread.h" |
#include "content/public/common/content_switches.h" |
#include "content/test/net/url_request_mock_http_job.h" |
+#include "webkit/plugins/plugin_switches.h" |
+#if defined(OS_WIN) |
+#include "base/win/registry.h" |
+#endif |
+ |
using content::BrowserThread; |
namespace { |
@@ -31,7 +36,27 @@ |
command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose_gc"); |
// For OpenPopupWindowWithPlugin. |
command_line->AppendSwitch(switches::kDisablePopupBlocking); |
-#if defined(OS_MACOSX) |
+#if defined(OS_WIN) |
+ const testing::TestInfo* const test_info = |
+ testing::UnitTest::GetInstance()->current_test_info(); |
+ if (strcmp(test_info->name(), "MediaPlayerNew") == 0) { |
+ // The installer adds our process names to the registry key below. Since |
+ // the installer might not have run on this machine, add it manually. |
+ base::win::RegKey regkey; |
+ if (regkey.Open(HKEY_LOCAL_MACHINE, |
+ L"Software\\Microsoft\\MediaPlayer\\ShimInclusionList", |
+ KEY_WRITE) == ERROR_SUCCESS) { |
+ regkey.CreateKey(L"BROWSER_TESTS.EXE", KEY_READ); |
+ } |
+ } else if (strcmp(test_info->name(), "MediaPlayerOld") == 0) { |
+ // When testing the old WMP plugin, we need to force Chrome to not load |
+ // the new plugin. |
+ command_line->AppendSwitch(switches::kUseOldWMPPlugin); |
+ } else if (strcmp(test_info->name(), "FlashSecurity") == 0) { |
+ command_line->AppendSwitchASCII(switches::kTestSandbox, |
+ "security_tests.dll"); |
+ } |
+#elif defined(OS_MACOSX) |
FilePath plugin_dir; |
PathService::Get(base::DIR_MODULE, &plugin_dir); |
plugin_dir = plugin_dir.AppendASCII("plugins"); |
@@ -39,6 +64,15 @@ |
// explicitly registered. |
command_line->AppendSwitchPath(switches::kExtraPluginDir, plugin_dir); |
#endif |
+ |
+ // TODO(jam): since these plugin tests are running under Chrome, we need to |
+ // tell it to disable its security features for old plugins. Once this is |
+ // running under content_browsertests, these flags won't be needed. |
+ // http://crbug.com/90448 |
+ // switches::kAllowOutdatedPlugins |
+ command_line->AppendSwitch("allow-outdated-plugins"); |
+ // switches::kAlwaysAuthorizePlugins |
+ command_line->AppendSwitch("always-authorize-plugins"); |
} |
virtual void SetUpOnMainThread() OVERRIDE { |
@@ -47,31 +81,56 @@ |
BrowserThread::IO, FROM_HERE, base::Bind(&SetUrlRequestMock, path)); |
} |
- void LoadAndWait(const GURL& url, const char* title) { |
- string16 expected_title(ASCIIToUTF16(title)); |
+ void LoadAndWait(const GURL& url) { |
+ string16 expected_title(ASCIIToUTF16("OK")); |
ui_test_utils::TitleWatcher title_watcher( |
browser()->GetSelectedWebContents(), expected_title); |
title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
+ title_watcher.AlsoWaitForTitle(ASCIIToUTF16("plugin_not_found")); |
ui_test_utils::NavigateToURL(browser(), url); |
- EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
+ string16 title = title_watcher.WaitAndGetTitle(); |
+ if (title == ASCIIToUTF16("plugin_not_found")) { |
+ const testing::TestInfo* const test_info = |
+ testing::UnitTest::GetInstance()->current_test_info(); |
+ LOG(INFO) << "PluginTest." << test_info->name() << |
+ " not running because plugin not installed."; |
+ } else { |
+ EXPECT_EQ(expected_title, title); |
+ } |
} |
GURL GetURL(const char* filename) { |
return ui_test_utils::GetTestUrl( |
- FilePath().AppendASCII("npapi"), FilePath().AppendASCII(filename)); |
+ FilePath().AppendASCII("npapi"), FilePath().AppendASCII(filename)); |
} |
void NavigateAway() { |
GURL url = ui_test_utils::GetTestUrl( |
FilePath(), FilePath().AppendASCII("simple.html")); |
- LoadAndWait(url, "simple.html"); |
+ LoadAndWait(url); |
} |
+ |
+ void TestPlugin(const char* filename) { |
+ FilePath path = ui_test_utils::GetTestFilePath( |
+ FilePath().AppendASCII("plugin"), FilePath().AppendASCII(filename)); |
+ if (!file_util::PathExists(path)) { |
+ const testing::TestInfo* const test_info = |
+ testing::UnitTest::GetInstance()->current_test_info(); |
+ LOG(INFO) << "PluginTest." << test_info->name() << |
+ " not running because test data wasn't found."; |
+ return; |
+ } |
+ |
+ GURL url = ui_test_utils::GetTestUrl( |
+ FilePath().AppendASCII("plugin"), FilePath().AppendASCII(filename)); |
+ LoadAndWait(url); |
+ } |
}; |
// Make sure that navigating away from a plugin referenced by JS doesn't |
// crash. |
IN_PROC_BROWSER_TEST_F(PluginTest, UnloadNoCrash) { |
- LoadAndWait(GetURL("layout_test_plugin.html"), "Layout Test Plugin Test"); |
+ LoadAndWait(GetURL("layout_test_plugin.html")); |
NavigateAway(); |
} |
@@ -79,14 +138,14 @@ |
// works without crashing or hanging |
// Flaky: http://crbug.com/59327 |
IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginGetUrl) { |
- LoadAndWait(GetURL("self_delete_plugin_geturl.html"), "OK"); |
+ LoadAndWait(GetURL("self_delete_plugin_geturl.html")); |
} |
// Tests if a plugin executing a self deleting script using Invoke |
// works without crashing or hanging |
// Flaky. See http://crbug.com/30702 |
IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvoke) { |
- LoadAndWait(GetURL("self_delete_plugin_invoke.html"), "OK"); |
+ LoadAndWait(GetURL("self_delete_plugin_invoke.html")); |
} |
IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectReleasedOnDestruction) { |
@@ -100,7 +159,7 @@ |
// the more interesting case is out of process, where we must route |
// the exception to the correct renderer. |
IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectSetException) { |
- LoadAndWait(GetURL("npobject_set_exception.html"), "OK"); |
+ LoadAndWait(GetURL("npobject_set_exception.html")); |
} |
#if defined(OS_WIN) |
@@ -128,7 +187,7 @@ |
GURL url(URLRequestMockHTTPJob::GetMockUrl( |
FilePath().AppendASCII("npapi"). |
AppendASCII("plugin_url_request_404.html"))); |
- LoadAndWait(url, "OK"); |
+ LoadAndWait(url); |
} |
// Tests if a plugin executing a self deleting script using Invoke with |
@@ -153,47 +212,47 @@ |
// Test passing arguments to a plugin. |
IN_PROC_BROWSER_TEST_F(PluginTest, Arguments) { |
- LoadAndWait(GetURL("arguments.html"), "OK"); |
+ LoadAndWait(GetURL("arguments.html")); |
} |
// Test invoking many plugins within a single page. |
IN_PROC_BROWSER_TEST_F(PluginTest, ManyPlugins) { |
- LoadAndWait(GetURL("many_plugins.html"), "OK"); |
+ LoadAndWait(GetURL("many_plugins.html")); |
} |
// Test various calls to GetURL from a plugin. |
IN_PROC_BROWSER_TEST_F(PluginTest, GetURL) { |
- LoadAndWait(GetURL("geturl.html"), "OK"); |
+ LoadAndWait(GetURL("geturl.html")); |
} |
// Test various calls to GetURL for javascript URLs with |
// non NULL targets from a plugin. |
IN_PROC_BROWSER_TEST_F(PluginTest, GetJavaScriptURL) { |
- LoadAndWait(GetURL("get_javascript_url.html"), "OK"); |
+ LoadAndWait(GetURL("get_javascript_url.html")); |
} |
// Test that calling GetURL with a javascript URL and target=_self |
// works properly when the plugin is embedded in a subframe. |
IN_PROC_BROWSER_TEST_F(PluginTest, GetJavaScriptURL2) { |
- LoadAndWait(GetURL("get_javascript_url2.html"), "OK"); |
+ LoadAndWait(GetURL("get_javascript_url2.html")); |
} |
// Test is flaky on linux/cros/win builders. http://crbug.com/71904 |
IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRedirectNotification) { |
- LoadAndWait(GetURL("geturl_redirect_notify.html"), "OK"); |
+ LoadAndWait(GetURL("geturl_redirect_notify.html")); |
} |
// Tests that identity is preserved for NPObjects passed from a plugin |
// into JavaScript. |
IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectIdentity) { |
- LoadAndWait(GetURL("npobject_identity.html"), "OK"); |
+ LoadAndWait(GetURL("npobject_identity.html")); |
} |
// Tests that if an NPObject is proxies back to its original process, the |
// original pointer is returned and not a proxy. If this fails the plugin |
// will crash. |
IN_PROC_BROWSER_TEST_F(PluginTest, NPObjectProxy) { |
- LoadAndWait(GetURL("npobject_proxy.html"), "OK"); |
+ LoadAndWait(GetURL("npobject_proxy.html")); |
} |
#if defined(OS_WIN) || defined(OS_MACOSX) |
@@ -201,32 +260,32 @@ |
// a synchronous paint event works correctly |
// http://crbug.com/44960 |
IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInvokeInSynchronousPaint) { |
- LoadAndWait(GetURL("execute_script_delete_in_paint.html"), "OK"); |
+ LoadAndWait(GetURL("execute_script_delete_in_paint.html")); |
} |
#endif |
IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInNewStream) { |
- LoadAndWait(GetURL("self_delete_plugin_stream.html"), "OK"); |
+ LoadAndWait(GetURL("self_delete_plugin_stream.html")); |
} |
// This test asserts on Mac in plugin_host in the NPNVWindowNPObject case. |
#if !(defined(OS_MACOSX) && !defined(NDEBUG)) |
// If this test flakes use http://crbug.com/95558. |
IN_PROC_BROWSER_TEST_F(PluginTest, DeletePluginInDeallocate) { |
- LoadAndWait(GetURL("plugin_delete_in_deallocate.html"), "OK"); |
+ LoadAndWait(GetURL("plugin_delete_in_deallocate.html")); |
} |
#endif |
#if defined(OS_WIN) |
IN_PROC_BROWSER_TEST_F(PluginTest, VerifyPluginWindowRect) { |
- LoadAndWait(GetURL("verify_plugin_window_rect.html"), "OK"); |
+ LoadAndWait(GetURL("verify_plugin_window_rect.html")); |
} |
// Tests that creating a new instance of a plugin while another one is handling |
// a paint message doesn't cause deadlock. |
IN_PROC_BROWSER_TEST_F(PluginTest, CreateInstanceInPaint) { |
- LoadAndWait(GetURL("create_instance_in_paint.html"), "OK"); |
+ LoadAndWait(GetURL("create_instance_in_paint.html")); |
} |
// Tests that putting up an alert in response to a paint doesn't deadlock. |
@@ -239,20 +298,20 @@ |
} |
IN_PROC_BROWSER_TEST_F(PluginTest, VerifyNPObjectLifetimeTest) { |
- LoadAndWait(GetURL("npobject_lifetime_test.html"), "OK"); |
+ LoadAndWait(GetURL("npobject_lifetime_test.html")); |
} |
// Tests that we don't crash or assert if NPP_New fails |
IN_PROC_BROWSER_TEST_F(PluginTest, NewFails) { |
- LoadAndWait(GetURL("new_fails.html"), "OK"); |
+ LoadAndWait(GetURL("new_fails.html")); |
} |
IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeletePluginInNPNEvaluate) { |
- LoadAndWait(GetURL("execute_script_delete_in_npn_evaluate.html"), "OK"); |
+ LoadAndWait(GetURL("execute_script_delete_in_npn_evaluate.html")); |
} |
IN_PROC_BROWSER_TEST_F(PluginTest, SelfDeleteCreatePluginInNPNEvaluate) { |
- LoadAndWait(GetURL("npn_plugin_delete_create_in_evaluate.html"), "OK"); |
+ LoadAndWait(GetURL("npn_plugin_delete_create_in_evaluate.html")); |
} |
#endif // OS_WIN |
@@ -263,34 +322,34 @@ |
// Disabled on Mac because the plugin side isn't implemented yet, see |
// "TODO(port)" in plugin_javascript_open_popup.cc. |
IN_PROC_BROWSER_TEST_F(PluginTest, OpenPopupWindowWithPlugin) { |
- LoadAndWait(GetURL("get_javascript_open_popup_with_plugin.html"), "OK"); |
+ LoadAndWait(GetURL("get_javascript_open_popup_with_plugin.html")); |
} |
#endif |
// Test checking the privacy mode is off. |
IN_PROC_BROWSER_TEST_F(PluginTest, PrivateDisabled) { |
- LoadAndWait(GetURL("private.html"), "OK"); |
+ LoadAndWait(GetURL("private.html")); |
} |
IN_PROC_BROWSER_TEST_F(PluginTest, ScheduleTimer) { |
- LoadAndWait(GetURL("schedule_timer.html"), "OK"); |
+ LoadAndWait(GetURL("schedule_timer.html")); |
} |
IN_PROC_BROWSER_TEST_F(PluginTest, PluginThreadAsyncCall) { |
- LoadAndWait(GetURL("plugin_thread_async_call.html"), "OK"); |
+ LoadAndWait(GetURL("plugin_thread_async_call.html")); |
} |
// Test checking the privacy mode is on. |
// If this flakes on Linux, use http://crbug.com/104380 |
IN_PROC_BROWSER_TEST_F(PluginTest, PrivateEnabled) { |
- LoadAndWait(GetURL("private.html"), "OK"); |
+ LoadAndWait(GetURL("private.html")); |
} |
#if defined(OS_WIN) || defined(OS_MACOSX) |
// Test a browser hang due to special case of multiple |
// plugin instances indulged in sync calls across renderer. |
IN_PROC_BROWSER_TEST_F(PluginTest, MultipleInstancesSyncCalls) { |
- LoadAndWait(GetURL("multiple_instances_sync_calls.html"), "OK"); |
+ LoadAndWait(GetURL("multiple_instances_sync_calls.html")); |
} |
#endif |
@@ -298,12 +357,12 @@ |
GURL url(URLRequestMockHTTPJob::GetMockUrl( |
FilePath().AppendASCII("npapi"). |
AppendASCII("plugin_url_request_fail_write.html"))); |
- LoadAndWait(url, "OK"); |
+ LoadAndWait(url); |
} |
#if defined(OS_WIN) |
IN_PROC_BROWSER_TEST_F(PluginTest, EnsureScriptingWorksInDestroy) { |
- LoadAndWait(GetURL("ensure_scripting_works_in_destroy.html"), "OK"); |
+ LoadAndWait(GetURL("ensure_scripting_works_in_destroy.html")); |
} |
// This test uses a Windows Event to signal to the plugin that it should crash |
@@ -311,7 +370,7 @@ |
IN_PROC_BROWSER_TEST_F(PluginTest, NoHangIfInitCrashes) { |
HANDLE crash_event = CreateEvent(NULL, TRUE, FALSE, L"TestPluginCrashOnInit"); |
SetEvent(crash_event); |
- LoadAndWait(GetURL("no_hang_if_init_crashes.html"), "OK"); |
+ LoadAndWait(GetURL("no_hang_if_init_crashes.html")); |
CloseHandle(crash_event); |
} |
#endif |
@@ -321,7 +380,7 @@ |
GURL url(URLRequestMockHTTPJob::GetMockUrl( |
FilePath().AppendASCII("npapi"). |
AppendASCII("plugin_url_request_referrer_test.html"))); |
- LoadAndWait(url, "OK"); |
+ LoadAndWait(url); |
} |
#if defined(OS_MACOSX) |
@@ -344,3 +403,60 @@ |
EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
} |
#endif |
+ |
+IN_PROC_BROWSER_TEST_F(PluginTest, Flash) { |
+ TestPlugin("flash.html"); |
+} |
+ |
+#if defined(OS_WIN) |
+// Windows only test |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashSecurity) { |
+ TestPlugin("flash.html"); |
+} |
+#endif // defined(OS_WIN) |
+ |
+#if defined(OS_WIN) |
+// TODO(port) Port the following tests to platforms that have the required |
+// plugins. |
+// Flaky: http://crbug.com/55915 |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Quicktime) { |
+ TestPlugin("quicktime.html"); |
+} |
+ |
+// Disabled - http://crbug.com/44662 |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_MediaPlayerNew) { |
+ TestPlugin("wmp_new.html"); |
+} |
+ |
+// http://crbug.com/4809 |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_MediaPlayerOld) { |
+ TestPlugin("wmp_old.html"); |
+} |
+ |
+// Disabled - http://crbug.com/44673 |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Real) { |
+ TestPlugin("real.html"); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PluginTest, FlashOctetStream) { |
+ TestPlugin("flash-octet-stream.html"); |
+} |
+ |
+#if defined(OS_WIN) |
+// http://crbug.com/53926 |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashLayoutWhilePainting) { |
+#else |
+IN_PROC_BROWSER_TEST_F(PluginTest, FlashLayoutWhilePainting) { |
+#endif |
+ TestPlugin("flash-layout-while-painting.html"); |
+} |
+ |
+// http://crbug.com/8690 |
+IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Java) { |
+ TestPlugin("Java.html"); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PluginTest, Silverlight) { |
+ TestPlugin("silverlight.html"); |
+} |
+#endif // defined(OS_WIN) |