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" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/plugin_service.h" 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/browser/render_process_host.h" 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/common/webplugininfo.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/test/test_utils.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 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) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !(defined(OS_LINUX) && defined(USE_AURA)) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetComponentUpdatedPepperFlashPath( 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::StringType& version) { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN, &path)); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.Append(version); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.Append(chrome::kPepperFlashPluginFilename); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return path; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetBundledPepperFlashPath() { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get(chrome::FILE_PEPPER_FLASH_PLUGIN, &path)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return path; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // !(defined(OS_LINUX) && defined(USE_AURA)) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid GotPlugins(const base::Closure& quit_closure, 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::vector<content::WebPluginInfo>& plugins) { 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch quit_closure.Run(); 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginPrefsTest : public ::testing::Test { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_ = new PluginPrefs(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPolicyEnforcedPluginPatterns( 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::set<base::string16>& disabled, 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::set<base::string16>& disabled_exceptions, 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::set<base::string16>& enabled) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->SetPolicyEnforcedPluginPatterns( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled, disabled_exceptions, enabled); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnablePluginSynchronously(bool enabled, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expected_can_change) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop run_loop; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->EnablePlugin( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled, path, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CanEnablePluginCallback, run_loop.QuitClosure(), 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_can_change)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_loop.Run(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RefreshPluginsSynchronously() { 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PluginService::GetInstance()->RefreshPlugins(); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_WIN) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Can't go out of process in unit tests. 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::RenderProcessHost::SetRunRendererInProcess(true); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> runner = 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new content::MessageLoopRunner; 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PluginService::GetInstance()->GetPlugins( 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&GotPlugins, runner->QuitClosure())); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runner->Run(); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_WIN) 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::RenderProcessHost::SetRunRendererInProcess(false); 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<PluginPrefs> plugin_prefs_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, DisabledByPolicy) { 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16> disabled_plugins; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(ASCIIToUTF16("Disable this!")); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(ASCIIToUTF16("*Google*")); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPolicyEnforcedPluginPatterns(disabled_plugins, 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16>(), 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16>()); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::NO_POLICY, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("42"))); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_DISABLED, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Disable this!"))); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_DISABLED, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("Google Earth"))); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, EnabledByPolicy) { 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16> enabled_plugins; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.insert(ASCIIToUTF16("Enable that!")); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.insert(ASCIIToUTF16("PDF*")); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetPolicyEnforcedPluginPatterns(std::set<base::string16>(), 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16>(), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::NO_POLICY, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("42"))); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_ENABLED, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("Enable that!"))); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_ENABLED, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(ASCIIToUTF16("PDF Reader"))); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, EnabledAndDisabledByPolicy) { 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 k42(ASCIIToUTF16("42")); 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kEnabled(ASCIIToUTF16("Enabled")); 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kEnabled2(ASCIIToUTF16("Enabled 2")); 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kEnabled3(ASCIIToUTF16("Enabled 3")); 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kException(ASCIIToUTF16("Exception")); 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kException2(ASCIIToUTF16("Exception 2")); 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kGoogleMars(ASCIIToUTF16("Google Mars")); 145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 kGoogleEarth(ASCIIToUTF16("Google Earth")); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16> disabled_plugins; 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16> disabled_plugins_exceptions; 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16> enabled_plugins; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(kEnabled); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions.insert(kEnabled); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.insert(kEnabled); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions.insert(kException); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(kEnabled2); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.insert(kEnabled2); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(kException2); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions.insert(kException2); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions.insert(kEnabled3); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.insert(kEnabled3); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPolicyEnforcedPluginPatterns(disabled_plugins, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::NO_POLICY, plugin_prefs_->PolicyStatusForPlugin(k42)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_ENABLED, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kEnabled)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_ENABLED, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kEnabled2)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_ENABLED, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kEnabled3)); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::NO_POLICY, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kException)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::NO_POLICY, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kException2)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.clear(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions.clear(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.clear(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(ASCIIToUTF16("*")); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions.insert(ASCIIToUTF16("*Google*")); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins.insert(kGoogleEarth); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPolicyEnforcedPluginPatterns(disabled_plugins, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins_exceptions, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_plugins); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_ENABLED, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kGoogleEarth)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::NO_POLICY, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(kGoogleMars)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PluginPrefs::POLICY_DISABLED, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_->PolicyStatusForPlugin(k42)); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 204ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Linux Aura doesn't support NPAPI. 205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if !(defined(OS_LINUX) && defined(USE_AURA)) 206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PluginPrefsTest, UnifiedPepperFlashState) { 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TestBrowserThreadBundle browser_threads; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ShadowingAtExitManager at_exit_manager_; // Destroys the PluginService. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginService::GetInstance()->Init(); 212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PluginService::GetInstance()->DisablePluginsDiscoveryForTesting(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 component_updated_plugin_name( 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Component-updated Pepper Flash")); 216ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::WebPluginInfo component_updated_plugin_1( 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) component_updated_plugin_name, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetComponentUpdatedPepperFlashPath(FILE_PATH_LITERAL("11.3.31.227")), 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("11.3.31.227"), 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("")); 221ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::WebPluginInfo component_updated_plugin_2( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) component_updated_plugin_name, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetComponentUpdatedPepperFlashPath(FILE_PATH_LITERAL("11.3.31.228")), 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("11.3.31.228"), 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("")); 226ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::WebPluginInfo bundled_plugin(ASCIIToUTF16("Pepper Flash"), 227ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetBundledPepperFlashPath(), 228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASCIIToUTF16("11.3.31.229"), 229ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASCIIToUTF16("")); 230ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 231ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PluginService::GetInstance()->RegisterInternalPlugin( 232ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch component_updated_plugin_1, false); 233ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PluginService::GetInstance()->RegisterInternalPlugin( 234ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch component_updated_plugin_2, false); 235ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PluginService::GetInstance()->RegisterInternalPlugin(bundled_plugin, false); 236ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RefreshPluginsSynchronously(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the state of any of the three plugins will affect the others. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnablePluginSynchronously(true, component_updated_plugin_1.path, true); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1)); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2)); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnablePluginSynchronously(false, bundled_plugin.path, true); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2)); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnablePluginSynchronously(true, component_updated_plugin_2.path, true); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1)); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16> disabled_plugins; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_plugins.insert(component_updated_plugin_name); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPolicyEnforcedPluginPatterns(disabled_plugins, 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16>(), 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<base::string16>()); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Policy settings should be respected. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1)); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2)); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnablePluginSynchronously(false, bundled_plugin.path, true); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trying to change the state of a policy-enforced plugin should not take 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // effect. And it shouldn't change the state of other plugins either, even if 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // they are not restricted by any policy. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnablePluginSynchronously(true, component_updated_plugin_1.path, false); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2)); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnablePluginSynchronously(true, bundled_plugin.path, true); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_1)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(plugin_prefs_->IsPluginEnabled(component_updated_plugin_2)); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(plugin_prefs_->IsPluginEnabled(bundled_plugin)); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 282ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 283ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 284