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)
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/test_switches.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/browser/plugin_service.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h"
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "net/base/filename_util.h"
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/123851 : test flakily fails on win.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PluginLoadUnload DISABLED_PluginLoadUnload
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#elif defined(OS_MACOSX) && defined(ADDRESS_SANITIZER)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// ExtensionBrowserTest.PluginLoadUnload started failing after the switch to
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// dynamic ASan runtime library on Mac. See http://crbug.com/234591.
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_PluginLoadUnload DISABLED_PluginLoadUnload
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Timing out on ARM linux http://crbug.com/238460
38b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#define MAYBE_PluginLoadUnload DISABLED_PluginLoadUnload
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PluginLoadUnload PluginLoadUnload
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that a renderer's plugin list is properly updated when we load and
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unload an extension that contains a plugin.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, MAYBE_PluginLoadUnload) {
46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  if (!content::PluginService::GetInstance()->NPAPIPluginsSupported())
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(prefs::kPluginsAlwaysAuthorize,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               true);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath extension_dir =
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test_data_dir_.AppendASCII("uitest").AppendASCII("plugins");
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(),
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::FilePathToFileURL(extension_dir.AppendASCII("test.html")));
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // With no extensions, the plugin should not be loaded.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool result = false;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ExtensionService* service = extensions::ExtensionSystem::Get(
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->profile())->extension_service();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  service->set_show_extensions_prompts(false);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t size_before = service->extensions()->size();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension = LoadExtension(extension_dir);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(extension);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(size_before + 1, service->extensions()->size());
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now the plugin should be in the cache.
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't allow extension plugins to run on ChromeOS.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(size_before + 1, service->extensions()->size());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnloadExtension(extension->id());
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(size_before, service->extensions()->size());
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now the plugin should be unloaded, and the page should be broken.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If we reload the extension and page, it should work again.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(LoadExtension(extension_dir));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(size_before + 1, service->extensions()->size());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::WindowedNotificationObserver observer(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        content::NOTIFICATION_LOAD_STOP,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        content::Source<NavigationController>(
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            &browser()->tab_strip_model()->GetActiveWebContents()->
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                GetController()));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome::Reload(browser(), CURRENT_TAB);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    observer.Wait();
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't allow extension plugins to run on ChromeOS.
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_MACOSX) && defined(ADDRESS_SANITIZER)
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// ExtensionBrowserTest.PluginPrivate started failing after the switch to
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// dynamic ASan runtime library on Mac. See http://crbug.com/234591.
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_PluginPrivate DISABLED_PluginPrivate
118b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
119b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Timing out on ARM linux http://crbug.com/238467
120b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#define MAYBE_PluginPrivate DISABLED_PluginPrivate
121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#elif defined(OS_WIN) && defined(ARCH_CPU_X86_64)
122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// TODO(jschuh): Failing plugin tests. crbug.com/244653
123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_PluginPrivate DISABLED_PluginPrivate
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_PluginPrivate PluginPrivate
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that private extension plugins are only visible to the extension.
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, MAYBE_PluginPrivate) {
129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH)
130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Disable this test in Metro+Ash for now (http://crbug.com/262796).
131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    return;
133ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif
134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
135ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  if (!content::PluginService::GetInstance()->NPAPIPluginsSupported())
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
137b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(prefs::kPluginsAlwaysAuthorize,
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               true);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath extension_dir =
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test_data_dir_.AppendASCII("uitest").AppendASCII("plugins_private");
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ExtensionService* service = extensions::ExtensionSystem::Get(
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->profile())->extension_service();
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  service->set_show_extensions_prompts(false);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t size_before = service->extensions()->size();
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension = LoadExtension(extension_dir);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(extension);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(size_before + 1, service->extensions()->size());
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load the test page through the extension URL, and the plugin should work.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(),
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extension->GetResourceURL("test.html"));
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool result = false;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't allow extension plugins to run on ChromeOS.
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(bauerb): This might wrongly fail if the plug-in takes too long
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to load. Extension-private plug-ins don't appear in navigator.plugins, so
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we can't check for the plug-in in Javascript.
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Regression test for http://crbug.com/131811: The plug-in should be
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // whitelisted for the extension (and only for the extension), so it should be
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // loaded even if content settings are set to block plug-ins.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting(
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't allow extension plugins to run on ChromeOS.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now load it through a file URL. The plugin should not load.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(),
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::FilePathToFileURL(extension_dir.AppendASCII("test.html")));
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab, "testPluginWorks()", &result));
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
190