1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/plugins/plugin_info_message_filter.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/at_exit.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/bind.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/bind_helpers.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/message_loop/message_loop.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/run_loop.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/pref_names.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/render_messages.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/plugin_service.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/plugin_service_filter.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using content::PluginService; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PluginsLoaded(const base::Closure& callback, 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<content::WebPluginInfo>& plugins) { 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class FakePluginServiceFilter : public content::PluginServiceFilter { 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FakePluginServiceFilter() {} 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~FakePluginServiceFilter() {} 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool IsPluginAvailable(int render_process_id, 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_view_id, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const void* context, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& url, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& policy_url, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo* plugin) OVERRIDE; 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool CanLoadPlugin(int render_process_id, 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& path) OVERRIDE; 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void set_plugin_enabled(const base::FilePath& plugin_path, bool enabled) { 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) plugin_state_[plugin_path] = enabled; 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::map<base::FilePath, bool> plugin_state_; 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool FakePluginServiceFilter::IsPluginAvailable( 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_process_id, 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_view_id, 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const void* context, 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& url, 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& policy_url, 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo* plugin) { 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::map<base::FilePath, bool>::iterator it = 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) plugin_state_.find(plugin->path); 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (it == plugin_state_.end()) { 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ADD_FAILURE() << "No plug-in state for '" << plugin->path.value() << "'"; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return it->second; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool FakePluginServiceFilter::CanLoadPlugin(int render_process_id, 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& path) { 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PluginInfoMessageFilterTest : public ::testing::Test { 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginInfoMessageFilterTest() : 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) foo_plugin_path_(FILE_PATH_LITERAL("/path/to/foo")), 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bar_plugin_path_(FILE_PATH_LITERAL("/path/to/bar")), 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_(0, &profile_) { 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo foo_plugin(base::ASCIIToUTF16("Foo Plug-in"), 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) foo_plugin_path_, 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ASCIIToUTF16("1"), 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ASCIIToUTF16("The Foo plug-in.")); 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginMimeType mime_type; 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mime_type.mime_type = "foo/bar"; 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) foo_plugin.mime_types.push_back(mime_type); 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) foo_plugin.type = content::WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS; 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginService::GetInstance()->Init(); 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginService::GetInstance()->RegisterInternalPlugin(foo_plugin, false); 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo bar_plugin(base::ASCIIToUTF16("Bar Plug-in"), 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bar_plugin_path_, 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ASCIIToUTF16("1"), 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ASCIIToUTF16("The Bar plug-in.")); 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mime_type.mime_type = "foo/bar"; 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bar_plugin.mime_types.push_back(mime_type); 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bar_plugin.type = content::WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS; 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginService::GetInstance()->RegisterInternalPlugin(bar_plugin, false); 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginService::GetInstance()->SetFilter(&filter_); 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_WIN) 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Can't go out of process in unit tests. 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderProcessHost::SetRunRendererInProcess(true); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginService::GetInstance()->GetPlugins( 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind(&PluginsLoaded, run_loop.QuitClosure())); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_WIN) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderProcessHost::SetRunRendererInProcess(false); 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestingProfile* profile() { 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return &profile_; 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginInfoMessageFilter::Context* context() { 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return &context_; 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void VerifyPluginContentSetting(const GURL& url, 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& plugin, 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ContentSetting expected_setting, 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool expected_is_default, 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool expected_is_managed) { 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ContentSetting setting = expected_setting == CONTENT_SETTING_DEFAULT ? 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CONTENT_SETTING_BLOCK : CONTENT_SETTING_DEFAULT; 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_default = !expected_is_default; 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_managed = !expected_is_managed; 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context()->GetPluginContentSetting( 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo(), url, url, plugin, 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &setting, &is_default, &is_managed); 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected_setting, setting); 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected_is_default, is_default); 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected_is_managed, is_managed); 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath foo_plugin_path_; 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath bar_plugin_path_; 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FakePluginServiceFilter filter_; 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ShadowingAtExitManager at_exit_manager_; // Destroys the PluginService. 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::TestBrowserThreadBundle test_thread_bundle; 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestingProfile profile_; 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PluginInfoMessageFilter::Context context_; 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(PluginInfoMessageFilterTest, FindEnabledPlugin) { 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filter_.set_plugin_enabled(foo_plugin_path_, true); 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filter_.set_plugin_enabled(bar_plugin_path_, true); 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ChromeViewHostMsg_GetPluginInfo_Status status; 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo plugin; 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string actual_mime_type; 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(context()->FindEnabledPlugin( 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, GURL(), GURL(), "foo/bar", &status, &plugin, &actual_mime_type, 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NULL)); 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kAllowed, status.value); 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(foo_plugin_path_.value(), plugin.path.value()); 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filter_.set_plugin_enabled(foo_plugin_path_, false); 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ChromeViewHostMsg_GetPluginInfo_Status status; 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo plugin; 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string actual_mime_type; 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(context()->FindEnabledPlugin( 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, GURL(), GURL(), "foo/bar", &status, &plugin, &actual_mime_type, 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NULL)); 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kAllowed, status.value); 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(bar_plugin_path_.value(), plugin.path.value()); 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filter_.set_plugin_enabled(bar_plugin_path_, false); 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ChromeViewHostMsg_GetPluginInfo_Status status; 190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo plugin; 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string actual_mime_type; 192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string identifier; 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::string16 plugin_name; 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(context()->FindEnabledPlugin( 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, GURL(), GURL(), "foo/bar", &status, &plugin, &actual_mime_type, 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NULL)); 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kDisabled, status.value); 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(foo_plugin_path_.value(), plugin.path.value()); 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ChromeViewHostMsg_GetPluginInfo_Status status; 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebPluginInfo plugin; 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string actual_mime_type; 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(context()->FindEnabledPlugin( 205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, GURL(), GURL(), "baz/blurp", &status, &plugin, &actual_mime_type, 206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NULL)); 207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kNotFound, status.value); 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(FILE_PATH_LITERAL(""), plugin.path.value()); 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(PluginInfoMessageFilterTest, GetPluginContentSetting) { 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Block plugins by default. 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) map->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PLUGINS, 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CONTENT_SETTING_BLOCK); 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Set plugins to click-to-play on example.com and subdomains. 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ContentSettingsPattern pattern = 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ContentSettingsPattern::FromString("[*.]example.com"); 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) map->SetContentSetting(pattern, 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string(), 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CONTENT_SETTING_ASK); 227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Allow plugin "foo" on all sites. 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) map->SetContentSetting(ContentSettingsPattern::Wildcard(), 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "foo", 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CONTENT_SETTING_ALLOW); 234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL unmatched_host("https://www.google.com"); 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL host("http://example.com/"); 237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(CONTENT_SETTING_BLOCK, map->GetContentSetting( 238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unmatched_host, unmatched_host, CONTENT_SETTINGS_TYPE_PLUGINS, 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string())); 240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting( 241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host, host, CONTENT_SETTINGS_TYPE_PLUGINS, std::string())); 242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(CONTENT_SETTING_ALLOW, map->GetContentSetting( 243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host, host, CONTENT_SETTINGS_TYPE_PLUGINS, "foo")); 244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(CONTENT_SETTING_DEFAULT, map->GetContentSetting( 245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host, host, CONTENT_SETTINGS_TYPE_PLUGINS, "bar")); 246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // "foo" is allowed everywhere. 248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPluginContentSetting(host, "foo", CONTENT_SETTING_ALLOW, false, false); 249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // There is no specific content setting for "bar", so the general setting 251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // for example.com applies. 252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPluginContentSetting(host, "bar", CONTENT_SETTING_ASK, false, false); 253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Otherwise, use the default. 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPluginContentSetting(unmatched_host, "bar", CONTENT_SETTING_BLOCK, 256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true, false); 257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Block plugins via policy. 259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestingPrefServiceSyncable* prefs = profile()->GetTestingPrefService(); 260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prefs->SetManagedPref(prefs::kManagedDefaultPluginsSetting, 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::FundamentalValue(CONTENT_SETTING_BLOCK)); 262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // All plugins should be blocked now. 264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPluginContentSetting(host, "foo", CONTENT_SETTING_BLOCK, true, true); 265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPluginContentSetting(host, "bar", CONTENT_SETTING_BLOCK, true, true); 266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPluginContentSetting(unmatched_host, "bar", CONTENT_SETTING_BLOCK, 267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true, true); 268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 269