15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string_util.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/loader/resource_dispatcher_host_impl.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/resource_dispatcher_host_delegate.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/test/test_utils.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h" 17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_switches.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/content_browser_test.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/content_browser_test_utils.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/net/url_request_mock_http_job.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/url_request/url_request.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/registry.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(jschuh): Finish plugins on Win64. crbug.com/180861 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) && defined(ARCH_CPU_X86_64) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE(x) DISABLED_##x 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE(x) x 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetUrlRequestMock(const base::FilePath& path) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRequestMockHTTPJob::AddUrlHandler(path); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginTest : public ContentBrowserTest { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginTest() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some NPAPI tests schedule garbage collection to force object tear-down. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose_gc"); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const testing::TestInfo* const test_info = 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::UnitTest::GetInstance()->current_test_info(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (strcmp(test_info->name(), "MediaPlayerNew") == 0) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The installer adds our process names to the registry key below. Since 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the installer might not have run on this machine, add it manually. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::RegKey regkey; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (regkey.Open(HKEY_LOCAL_MACHINE, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"Software\\Microsoft\\MediaPlayer\\ShimInclusionList", 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_WRITE) == ERROR_SUCCESS) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) regkey.CreateKey(L"BROWSER_TESTS.EXE", KEY_READ); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (strcmp(test_info->name(), "FlashSecurity") == 0) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kTestSandbox, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "security_tests.dll"); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath plugin_dir; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::DIR_MODULE, &plugin_dir); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_dir = plugin_dir.AppendASCII("plugins"); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The plugins directory isn't read by default on the Mac, so it needs to be 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // explicitly registered. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchPath(switches::kExtraPluginDir, plugin_dir); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path = GetTestFilePath("", ""); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, base::Bind(&SetUrlRequestMock, path)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void LoadAndWaitInWindow(Shell* window, const GURL& url) { 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(ASCIIToUTF16("OK")); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TitleWatcher title_watcher(window->web_contents(), expected_title); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(ASCIIToUTF16("plugin_not_found")); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(window, url); 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title = title_watcher.WaitAndGetTitle(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title == ASCIIToUTF16("plugin_not_found")) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const testing::TestInfo* const test_info = 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::UnitTest::GetInstance()->current_test_info(); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "PluginTest." << test_info->name() 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << " not running because plugin not installed."; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadAndWait(const GURL& url) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWaitInWindow(shell(), url); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetURL(const char* filename) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetTestUrl("npapi", filename); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NavigateAway() { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = GetTestUrl("", "simple_page.html"); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(url); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestPlugin(const char* filename) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path = GetTestFilePath("plugin", filename); 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!base::PathExists(path)) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const testing::TestInfo* const test_info = 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::UnitTest::GetInstance()->current_test_info(); 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "PluginTest." << test_info->name() 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << " not running because test data wasn't found."; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = GetTestUrl("plugin", filename); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(url); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that navigating away from a plugin referenced by JS doesn't 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// crash. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, UnloadNoCrash) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("layout_test_plugin.html")); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAway(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if a plugin executing a self deleting script using NPN_GetURL 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// works without crashing or hanging 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky: http://crbug.com/59327 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginGetUrl)) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("self_delete_plugin_geturl.html")); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if a plugin executing a self deleting script using Invoke 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// works without crashing or hanging 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky. See http://crbug.com/30702 14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInvoke)) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("self_delete_plugin_invoke.html")); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectReleasedOnDestruction)) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(shell(), GetURL("npobject_released_on_destruction.html")); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAway(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that a dialog is properly created when a plugin throws an 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// exception. Should be run for in and out of process plugins, but 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the more interesting case is out of process, where we must route 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the exception to the correct renderer. 160868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectSetException)) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("npobject_set_exception.html")); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if a plugin executing a self deleting script in the context of 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a synchronous mouseup works correctly. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This was never ported to Mac. The only thing remaining is to make 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SimulateMouseClick get to Mac plugins, currently it doesn't work. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE(SelfDeletePluginInvokeInSynchronousMouseUp)) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(shell(), GetURL("execute_script_delete_in_mouse_up.html")); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(ASCIIToUTF16("OK")); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TitleWatcher title_watcher(shell()->web_contents(), expected_title); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateMouseClick(shell()->web_contents(), 0, 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Flaky, http://crbug.com/302274. 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_MACOSX) 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_GetURLRequest404Response DISABLED_GetURLRequest404Response 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_GetURLRequest404Response MAYBE(GetURLRequest404Response) 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE_GetURLRequest404Response) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(URLRequestMockHTTPJob::GetMockUrl( 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("npapi"). 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendASCII("plugin_url_request_404.html"))); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(url); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if a plugin executing a self deleting script using Invoke with 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a modal dialog showing works without crashing or hanging 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled, flakily exceeds timeout, http://crbug.com/46257. 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInvokeAlert)) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate asynchronously because if we waitd until it completes, there's a 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // race condition where the alert can come up before we start watching for it. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shell()->LoadURL(GetURL("self_delete_plugin_invoke_alert.html")); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(ASCIIToUTF16("OK")); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TitleWatcher title_watcher(shell()->web_contents(), expected_title); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForAppModalDialog(shell()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test passing arguments to a plugin. 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// crbug.com/306318 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if !defined(OS_LINUX) 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Arguments)) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("arguments.html")); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test invoking many plugins within a single page. 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(ManyPlugins)) { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("many_plugins.html")); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test various calls to GetURL from a plugin. 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetURL)) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("geturl.html")); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test various calls to GetURL for javascript URLs with 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// non NULL targets from a plugin. 233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetJavaScriptURL)) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("get_javascript_url.html")); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that calling GetURL with a javascript URL and target=_self 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// works properly when the plugin is embedded in a subframe. 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetJavaScriptURL2)) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("get_javascript_url2.html")); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test is flaky on linux/cros/win builders. http://crbug.com/71904 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRedirectNotification) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("geturl_redirect_notify.html")); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that identity is preserved for NPObjects passed from a plugin 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// into JavaScript. 250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectIdentity)) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("npobject_identity.html")); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that if an NPObject is proxies back to its original process, the 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// original pointer is returned and not a proxy. If this fails the plugin 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// will crash. 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectProxy)) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("npobject_proxy.html")); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if a plugin executing a self deleting script in the context of 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a synchronous paint event works correctly 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/44960 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MAYBE(SelfDeletePluginInvokeInSynchronousPaint)) { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("execute_script_delete_in_paint.html")); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that if a plugin executes a self resizing script in the context of a 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// synchronous paint, the plugin doesn't use deallocated memory. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/139462 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(ResizeDuringPaint)) { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("resize_during_paint.html")); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInNewStream)) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("self_delete_plugin_stream.html")); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// On Mac this test asserts in plugin_host: http://crbug.com/95558 2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// On all platforms it flakes in ~URLRequestContext: http://crbug.com/310336 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(NDEBUG) 2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_DeletePluginInDeallocate) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("plugin_delete_in_deallocate.html")); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(VerifyPluginWindowRect)) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("verify_plugin_window_rect.html")); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that creating a new instance of a plugin while another one is handling 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a paint message doesn't cause deadlock. 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(CreateInstanceInPaint)) { 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("create_instance_in_paint.html")); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that putting up an alert in response to a paint doesn't deadlock. 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_AlertInWindowMessage) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(shell(), GetURL("alert_in_window_message.html")); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForAppModalDialog(shell()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForAppModalDialog(shell()); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(VerifyNPObjectLifetimeTest)) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("npobject_lifetime_test.html")); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that we don't crash or assert if NPP_New fails 315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NewFails)) { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("new_fails.html")); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInNPNEvaluate)) { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("execute_script_delete_in_npn_evaluate.html")); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE(SelfDeleteCreatePluginInNPNEvaluate)) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("npn_plugin_delete_create_in_evaluate.html")); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_WIN 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If this flakes, reopen http://crbug.com/17645 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// As of 6 July 2011, this test is flaky on Windows (perhaps due to timing out). 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled on Mac because the plugin side isn't implemented yet, see 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "TODO(port)" in plugin_javascript_open_popup.cc. 335868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(OpenPopupWindowWithPlugin)) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("get_javascript_open_popup_with_plugin.html")); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test checking the privacy mode is off. 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PrivateDisabled)) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("private.html")); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(ScheduleTimer)) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("schedule_timer.html")); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PluginThreadAsyncCall)) { 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("plugin_thread_async_call.html")); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3537dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochIN_PROC_BROWSER_TEST_F(PluginTest, PluginSingleRangeRequest) { 3547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LoadAndWait(GetURL("plugin_single_range_request.html")); 3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 3567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test checking the privacy mode is on. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If this flakes on Linux, use http://crbug.com/104380 359868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PrivateEnabled)) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = GetURL("private.html"); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL(url.spec() + "?private"); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWaitInWindow(CreateOffTheRecordBrowser(), url); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test a browser hang due to special case of multiple 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// plugin instances indulged in sync calls across renderer. 368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(MultipleInstancesSyncCalls)) { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("multiple_instances_sync_calls.html")); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetURLRequestFailWrite)) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(URLRequestMockHTTPJob::GetMockUrl( 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("npapi"). 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendASCII("plugin_url_request_fail_write.html"))); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(url); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 381868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(EnsureScriptingWorksInDestroy)) { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("ensure_scripting_works_in_destroy.html")); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test uses a Windows Event to signal to the plugin that it should crash 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on NP_Initialize. 387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NoHangIfInitCrashes)) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HANDLE crash_event = CreateEvent(NULL, TRUE, FALSE, L"TestPluginCrashOnInit"); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetEvent(crash_event); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(GetURL("no_hang_if_init_crashes.html")); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseHandle(crash_event); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If this flakes on Mac, use http://crbug.com/111508 396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PluginReferrerTest)) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(URLRequestMockHTTPJob::GetMockUrl( 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("npapi"). 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendASCII("plugin_url_request_referrer_test.html"))); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAndWait(url); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test is flaky, see http://crbug.com/134515. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_PluginConvertPointTest) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds(50, 50, 400, 400); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetWindowBounds(shell()->window(), bounds); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(shell(), GetURL("convert_point.html")); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 411a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(ASCIIToUTF16("OK")); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TitleWatcher title_watcher(shell()->web_contents(), expected_title); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(stuartmorgan): When the automation system supports sending clicks, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change the test to trigger on mouse-down rather than window focus. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO: is this code still needed? It was here when it used to run in 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser_tests. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //static_cast<WebContentsDelegate*>(shell())-> 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ActivateContents(shell()->web_contents()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Flash)) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("flash.html"); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows only test 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashSecurity) { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("flash.html"); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(port) Port the following tests to platforms that have the required 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// plugins. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky: http://crbug.com/55915 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Quicktime)) { 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("quicktime.html"); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled - http://crbug.com/44662 445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(MediaPlayerNew)) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("wmp_new.html"); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled - http://crbug.com/44673 450868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Real)) { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("real.html"); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// http://crbug.com/320041 455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if (defined(OS_WIN) && defined(ARCH_CPU_X86_64)) || \ 456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN)) 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_FlashOctetStream DISABLED_FlashOctetStream 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_FlashOctetStream FlashOctetStream 460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE_FlashOctetStream) { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("flash-octet-stream.html"); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/53926 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashLayoutWhilePainting) { 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, FlashLayoutWhilePainting) { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("flash-layout-while-painting.html"); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/8690 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Java) { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("Java.html"); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 479868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Silverlight)) { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPlugin("silverlight.html"); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TestResourceDispatcherHostDelegate 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : public ResourceDispatcherHostDelegate { 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestResourceDispatcherHostDelegate() : found_cookie_(false) {} 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool found_cookie() { return found_cookie_; } 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void WaitForPluginRequest() { 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (found_cookie_) 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runner_ = new MessageLoopRunner; 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runner_->Run(); 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // ResourceDispatcherHostDelegate implementation: 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnResponseStarted( 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequest* request, 503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResourceContext* resource_context, 504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResourceResponse* response, 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IPC::Sender* sender) OVERRIDE { 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The URL below comes from plugin_geturl_test.cc. 507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!EndsWith(request->url().spec(), 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "npapi/plugin_ref_target_page.html", 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true)) { 510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HttpRequestHeaders headers; 513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool found_cookie = false; 514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (request->GetFullRequestHeaders(&headers) && 515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) headers.ToString().find("Cookie: blah") != std::string::npos) { 516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) found_cookie = true; 517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::PostTask( 519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::UI, 520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&TestResourceDispatcherHostDelegate::GotCookie, 522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this), found_cookie)); 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void GotCookie(bool found_cookie) { 526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) found_cookie_ = found_cookie; 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (runner_) 528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runner_->QuitClosure().Run(); 529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<MessageLoopRunner> runner_; 532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool found_cookie_; 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Ensure that cookies get sent with plugin requests. 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Cookies)) { 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Create a new browser just to ensure that the plugin process' child_id is 540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // not equal to its type (PROCESS_TYPE_PLUGIN), as that was the error which 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // caused this bug. 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NavigateToURL(CreateBrowser(), GURL("about:blank")); 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL url(embedded_test_server()->GetURL("/npapi/cookies.html")); 546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestResourceDispatcherHostDelegate test_delegate; 548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResourceDispatcherHostDelegate* old_delegate = 549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResourceDispatcherHostImpl::Get()->delegate(); 550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResourceDispatcherHostImpl::Get()->SetDelegate(&test_delegate); 551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LoadAndWait(url); 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_delegate.WaitForPluginRequest(); 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(test_delegate.found_cookie()); 554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResourceDispatcherHostImpl::Get()->SetDelegate(old_delegate); 555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 558