plugin_prefs_unittest.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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 "chrome/browser/plugins/plugin_prefs.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/at_exit.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/plugin_service.h"
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/browser/render_process_host.h"
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/common/webplugininfo.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h"
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/test/test_utils.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PluginService;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CanEnablePluginCallback(const base::Closure& quit_closure,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             bool expected_can_change,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             bool did_change) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_can_change, did_change);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  quit_closure.Run();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetComponentUpdatedPepperFlashPath(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::FilePath::StringType& version) {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(PathService::Get(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN, &path));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  path = path.Append(version);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  path = path.Append(chrome::kPepperFlashPluginFilename);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return path;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetBundledPepperFlashPath() {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(PathService::Get(chrome::FILE_PEPPER_FLASH_PLUGIN, &path));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return path;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid GotPlugins(const base::Closure& quit_closure,
51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                const std::vector<content::WebPluginInfo>& plugins) {
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  quit_closure.Run();
53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginPrefsTest : public ::testing::Test {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    plugin_prefs_ = new PluginPrefs();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetPolicyEnforcedPluginPatterns(
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::set<string16>& disabled,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::set<string16>& disabled_exceptions,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::set<string16>& enabled) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    plugin_prefs_->SetPolicyEnforcedPluginPatterns(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        disabled, disabled_exceptions, enabled);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void EnablePluginSynchronously(bool enabled,
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const base::FilePath& path,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool expected_can_change) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::RunLoop run_loop;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    plugin_prefs_->EnablePlugin(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        enabled, path,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&CanEnablePluginCallback, run_loop.QuitClosure(),
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   expected_can_change));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run_loop.Run();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<PluginPrefs> plugin_prefs_;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, DisabledByPolicy) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<string16> disabled_plugins;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(ASCIIToUTF16("Disable this!"));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(ASCIIToUTF16("*Google*"));
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPolicyEnforcedPluginPatterns(disabled_plugins,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  std::set<string16>(),
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  std::set<string16>());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::NO_POLICY,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("42")));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_DISABLED,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                ASCIIToUTF16("Disable this!")));
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_DISABLED,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("Google Earth")));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, EnabledByPolicy) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<string16> enabled_plugins;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.insert(ASCIIToUTF16("Enable that!"));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.insert(ASCIIToUTF16("PDF*"));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPolicyEnforcedPluginPatterns(std::set<string16>(),
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  std::set<string16>(),
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  enabled_plugins);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::NO_POLICY,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("42")));
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_ENABLED,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("Enable that!")));
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_ENABLED,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("PDF Reader")));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, EnabledAndDisabledByPolicy) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 k42(ASCIIToUTF16("42"));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kEnabled(ASCIIToUTF16("Enabled"));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kEnabled2(ASCIIToUTF16("Enabled 2"));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kEnabled3(ASCIIToUTF16("Enabled 3"));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kException(ASCIIToUTF16("Exception"));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kException2(ASCIIToUTF16("Exception 2"));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kGoogleMars(ASCIIToUTF16("Google Mars"));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 kGoogleEarth(ASCIIToUTF16("Google Earth"));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<string16> disabled_plugins;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<string16> disabled_plugins_exceptions;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<string16> enabled_plugins;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(kEnabled);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins_exceptions.insert(kEnabled);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.insert(kEnabled);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins_exceptions.insert(kException);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(kEnabled2);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.insert(kEnabled2);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(kException2);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins_exceptions.insert(kException2);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins_exceptions.insert(kEnabled3);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.insert(kEnabled3);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPolicyEnforcedPluginPatterns(disabled_plugins,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  disabled_plugins_exceptions,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  enabled_plugins);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::NO_POLICY, plugin_prefs_->PolicyStatusForPlugin(k42));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_ENABLED,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kEnabled));
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_ENABLED,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kEnabled2));
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_ENABLED,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kEnabled3));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::NO_POLICY,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kException));
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::NO_POLICY,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kException2));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.clear();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins_exceptions.clear();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.clear();
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(ASCIIToUTF16("*"));
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins_exceptions.insert(ASCIIToUTF16("*Google*"));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enabled_plugins.insert(kGoogleEarth);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPolicyEnforcedPluginPatterns(disabled_plugins,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  disabled_plugins_exceptions,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  enabled_plugins);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_ENABLED,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kGoogleEarth));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::NO_POLICY,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(kGoogleMars));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(PluginPrefs::POLICY_DISABLED,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            plugin_prefs_->PolicyStatusForPlugin(k42));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Linux Aura doesn't support NPAPI.
187ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if !(defined(OS_LINUX) && defined(USE_AURA))
188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, UnifiedPepperFlashState) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ShadowingAtExitManager at_exit_manager_;  // Destroys the PluginService.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop message_loop;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginService::GetInstance()->Init();
195ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  PluginService::GetInstance()->DisablePluginsDiscoveryForTesting();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 component_updated_plugin_name(
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("Component-updated Pepper Flash"));
199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  content::WebPluginInfo component_updated_plugin_1(
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      component_updated_plugin_name,
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetComponentUpdatedPepperFlashPath(FILE_PATH_LITERAL("11.3.31.227")),
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("11.3.31.227"),
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16(""));
204ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  content::WebPluginInfo component_updated_plugin_2(
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      component_updated_plugin_name,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetComponentUpdatedPepperFlashPath(FILE_PATH_LITERAL("11.3.31.228")),
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("11.3.31.228"),
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16(""));
209ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  content::WebPluginInfo bundled_plugin(ASCIIToUTF16("Pepper Flash"),
210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                        GetBundledPepperFlashPath(),
211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                        ASCIIToUTF16("11.3.31.229"),
212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                        ASCIIToUTF16(""));
213ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
214ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  PluginService::GetInstance()->RegisterInternalPlugin(
215ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      component_updated_plugin_1, false);
216ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  PluginService::GetInstance()->RegisterInternalPlugin(
217ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      component_updated_plugin_2, false);
218ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  PluginService::GetInstance()->RegisterInternalPlugin(bundled_plugin, false);
219ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
220ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if !defined(OS_WIN)
221ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    // Can't go out of process in unit tests.
222ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    content::RenderProcessHost::SetRunRendererInProcess(true);
223ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif
224ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  scoped_refptr<content::MessageLoopRunner> runner =
225ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      new content::MessageLoopRunner;
226ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  PluginService::GetInstance()->GetPlugins(
227ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      base::Bind(&GotPlugins, runner->QuitClosure()));
228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  runner->Run();
229ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if !defined(OS_WIN)
230ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    content::RenderProcessHost::SetRunRendererInProcess(false);
231ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the state of any of the three plugins will affect the others.
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnablePluginSynchronously(true, component_updated_plugin_1.path, true);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1));
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2));
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnablePluginSynchronously(false, bundled_plugin.path, true);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1));
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2));
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnablePluginSynchronously(true, component_updated_plugin_2.path, true);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1));
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2));
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<string16> disabled_plugins;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  disabled_plugins.insert(component_updated_plugin_name);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPolicyEnforcedPluginPatterns(disabled_plugins,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  std::set<string16>(),
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  std::set<string16>());
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Policy settings should be respected.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1));
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2));
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnablePluginSynchronously(false, bundled_plugin.path, true);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Trying to change the state of a policy-enforced plugin should not take
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // effect. And it shouldn't change the state of other plugins either, even if
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // they are not restricted by any policy.
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnablePluginSynchronously(true, component_updated_plugin_1.path, false);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1));
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2));
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnablePluginSynchronously(true, bundled_plugin.path, true);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1));
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2));
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin));
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
276ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
277ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif
278