// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/command_line.h" #include "base/path_service.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/content_settings/cookie_settings.h" #include "chrome/browser/content_settings/host_content_settings_map.h" #include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/net/url_request_mock_util.h" #include "chrome/browser/plugins/chrome_plugin_service_filter.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/render_messages.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/test_switches.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/plugin_service.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_utils.h" #include "content/test/net/url_request_mock_http_job.h" #include "net/test/spawned_test_server/spawned_test_server.h" #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. #if defined(OS_MACOSX) #include "base/mac/scoped_nsautorelease_pool.h" #endif using content::BrowserThread; using content::URLRequestMockHTTPJob; class ContentSettingsTest : public InProcessBrowserTest { public: ContentSettingsTest() : https_server_(net::SpawnedTestServer::TYPE_HTTPS, net::SpawnedTestServer::SSLOptions( net::SpawnedTestServer::SSLOptions::CERT_OK), base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { } virtual void SetUpOnMainThread() OVERRIDE { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); } // Check the cookie for the given URL in an incognito window. void CookieCheckIncognitoWindow(const GURL& url, bool cookies_enabled) { ASSERT_TRUE(content::GetCookies(browser()->profile(), url).empty()); Browser* incognito = CreateIncognitoBrowser(); ASSERT_TRUE(content::GetCookies(incognito->profile(), url).empty()); ui_test_utils::NavigateToURL(incognito, url); ASSERT_EQ(cookies_enabled, !content::GetCookies(incognito->profile(), url).empty()); // Ensure incognito cookies don't leak to regular profile. ASSERT_TRUE(content::GetCookies(browser()->profile(), url).empty()); // Ensure cookies get wiped after last incognito window closes. content::WindowedNotificationObserver signal( chrome::NOTIFICATION_BROWSER_CLOSED, content::Source(incognito)); chrome::CloseWindow(incognito); #if defined(OS_MACOSX) // BrowserWindowController depends on the auto release pool being recycled // in the message loop to delete itself, which frees the Browser object // which fires this event. AutoreleasePool()->Recycle(); #endif signal.Wait(); incognito = CreateIncognitoBrowser(); ASSERT_TRUE(content::GetCookies(incognito->profile(), url).empty()); chrome::CloseWindow(incognito); } void PreBasic(const GURL& url) { ASSERT_TRUE(GetCookies(browser()->profile(), url).empty()); CookieCheckIncognitoWindow(url, true); ui_test_utils::NavigateToURL(browser(), url); ASSERT_FALSE(GetCookies(browser()->profile(), url).empty()); } void Basic(const GURL& url) { ASSERT_FALSE(GetCookies(browser()->profile(), url).empty()); } net::SpawnedTestServer https_server_; }; // Sanity check on cookies before we do other tests. While these can be written // in content_browsertests, we want to verify Chrome's cookie storage and how it // handles incognito windows. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, PRE_BasicCookies) { ASSERT_TRUE(test_server()->Start()); GURL http_url = test_server()->GetURL("files/setcookie.html"); PreBasic(http_url); } IN_PROC_BROWSER_TEST_F(ContentSettingsTest, BasicCookies) { ASSERT_TRUE(test_server()->Start()); GURL http_url = test_server()->GetURL("files/setcookie.html"); Basic(http_url); } IN_PROC_BROWSER_TEST_F(ContentSettingsTest, PRE_BasicCookiesHttps) { ASSERT_TRUE(https_server_.Start()); GURL https_url = https_server_.GetURL("files/setcookie.html"); PreBasic(https_url); } IN_PROC_BROWSER_TEST_F(ContentSettingsTest, BasicCookiesHttps) { ASSERT_TRUE(https_server_.Start()); GURL https_url = https_server_.GetURL("files/setcookie.html"); Basic(https_url); } // Verify that cookies are being blocked. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, PRE_BlockCookies) { ASSERT_TRUE(test_server()->Start()); CookieSettings::Factory::GetForProfile(browser()->profile())-> SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); GURL url = test_server()->GetURL("files/setcookie.html"); ui_test_utils::NavigateToURL(browser(), url); ASSERT_TRUE(GetCookies(browser()->profile(), url).empty()); CookieCheckIncognitoWindow(url, false); } // Ensure that the setting persists. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, BlockCookies) { ASSERT_EQ( CONTENT_SETTING_BLOCK, CookieSettings::Factory::GetForProfile(browser()->profile())-> GetDefaultCookieSetting(NULL)); } // Verify that cookies can be allowed and set using exceptions for particular // website(s) when all others are blocked. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, AllowCookiesUsingExceptions) { ASSERT_TRUE(test_server()->Start()); GURL url = test_server()->GetURL("files/setcookie.html"); CookieSettings* settings = CookieSettings::Factory::GetForProfile(browser()->profile()).get(); settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), url); ASSERT_TRUE(GetCookies(browser()->profile(), url).empty()); settings->SetCookieSetting( ContentSettingsPattern::FromURL(url), ContentSettingsPattern::Wildcard(), CONTENT_SETTING_ALLOW); ui_test_utils::NavigateToURL(browser(), url); ASSERT_FALSE(GetCookies(browser()->profile(), url).empty()); } // Verify that cookies can be blocked for a specific website using exceptions. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, BlockCookiesUsingExceptions) { ASSERT_TRUE(test_server()->Start()); GURL url = test_server()->GetURL("files/setcookie.html"); CookieSettings* settings = CookieSettings::Factory::GetForProfile(browser()->profile()).get(); settings->SetCookieSetting(ContentSettingsPattern::FromURL(url), ContentSettingsPattern::Wildcard(), CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), url); ASSERT_TRUE(GetCookies(browser()->profile(), url).empty()); ASSERT_TRUE(https_server_.Start()); GURL unblocked_url = https_server_.GetURL("files/cookie1.html"); ui_test_utils::NavigateToURL(browser(), unblocked_url); ASSERT_FALSE(GetCookies(browser()->profile(), unblocked_url).empty()); } // This fails on ChromeOS because kRestoreOnStartup is ignored and the startup // preference is always "continue where I left off. #if !defined(OS_CHROMEOS) // Verify that cookies can be allowed and set using exceptions for particular // website(s) only for a session when all others are blocked. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, PRE_AllowCookiesForASessionUsingExceptions) { // NOTE: don't use test_server here, since we need the port to be the same // across the restart. GURL url = URLRequestMockHTTPJob::GetMockUrl( base::FilePath(FILE_PATH_LITERAL("setcookie.html"))); CookieSettings* settings = CookieSettings::Factory::GetForProfile(browser()->profile()).get(); settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), url); ASSERT_TRUE(GetCookies(browser()->profile(), url).empty()); settings->SetCookieSetting( ContentSettingsPattern::FromURL(url), ContentSettingsPattern::Wildcard(), CONTENT_SETTING_SESSION_ONLY); ui_test_utils::NavigateToURL(browser(), url); ASSERT_FALSE(GetCookies(browser()->profile(), url).empty()); } IN_PROC_BROWSER_TEST_F(ContentSettingsTest, AllowCookiesForASessionUsingExceptions) { GURL url = URLRequestMockHTTPJob::GetMockUrl( base::FilePath(FILE_PATH_LITERAL("setcookie.html"))); ASSERT_TRUE(GetCookies(browser()->profile(), url).empty()); } #endif // !CHROME_OS // Regression test for http://crbug.com/63649. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, RedirectLoopCookies) { ASSERT_TRUE(test_server()->Start()); GURL test_url = test_server()->GetURL("files/redirect-loop.html"); CookieSettings::Factory::GetForProfile(browser()->profile())-> SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), test_url); content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); ASSERT_EQ(base::UTF8ToUTF16(test_url.spec() + " failed to load"), web_contents->GetTitle()); EXPECT_TRUE(TabSpecificContentSettings::FromWebContents(web_contents)-> IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } IN_PROC_BROWSER_TEST_F(ContentSettingsTest, ContentSettingsBlockDataURLs) { GURL url("data:text/html,Data URL"); browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), url); content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); ASSERT_EQ(base::UTF8ToUTF16("Data URL"), web_contents->GetTitle()); EXPECT_TRUE(TabSpecificContentSettings::FromWebContents(web_contents)-> IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); } // Tests that if redirect across origins occurs, the new process still gets the // content settings before the resource headers. IN_PROC_BROWSER_TEST_F(ContentSettingsTest, RedirectCrossOrigin) { ASSERT_TRUE(test_server()->Start()); net::HostPortPair host_port = test_server()->host_port_pair(); DCHECK_EQ(host_port.host(), std::string("127.0.0.1")); std::string redirect(base::StringPrintf( "http://localhost:%d/files/redirect-cross-origin.html", host_port.port())); GURL test_url = test_server()->GetURL("server-redirect?" + redirect); CookieSettings::Factory::GetForProfile(browser()->profile())-> SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), test_url); content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); EXPECT_TRUE(TabSpecificContentSettings::FromWebContents(web_contents)-> IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } // On Aura NPAPI only works on Windows. #if !defined(USE_AURA) || defined(OS_WIN) class ClickToPlayPluginTest : public ContentSettingsTest { public: ClickToPlayPluginTest() {} #if defined(OS_MACOSX) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { base::FilePath plugin_dir; PathService::Get(base::DIR_MODULE, &plugin_dir); plugin_dir = plugin_dir.AppendASCII("plugins"); // The plugins directory isn't read by default on the Mac, so it needs to be // explicitly registered. command_line->AppendSwitchPath(switches::kExtraPluginDir, plugin_dir); } #endif }; IN_PROC_BROWSER_TEST_F(ClickToPlayPluginTest, Basic) { browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); GURL url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII("clicktoplay.html")); ui_test_utils::NavigateToURL(browser(), url); base::string16 expected_title(base::ASCIIToUTF16("OK")); content::TitleWatcher title_watcher( browser()->tab_strip_model()->GetActiveWebContents(), expected_title); content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); ChromePluginServiceFilter* filter = ChromePluginServiceFilter::GetInstance(); int process_id = web_contents->GetMainFrame()->GetProcess()->GetID(); base::FilePath path(FILE_PATH_LITERAL("blah")); EXPECT_FALSE(filter->CanLoadPlugin(process_id, path)); filter->AuthorizeAllPlugins(web_contents, true, std::string()); EXPECT_TRUE(filter->CanLoadPlugin(process_id, path)); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); } // Verify that plugins can be allowed on a domain by adding an exception IN_PROC_BROWSER_TEST_F(ClickToPlayPluginTest, AllowException) { GURL url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII("clicktoplay.html")); browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); browser()->profile()->GetHostContentSettingsMap() ->SetContentSetting(ContentSettingsPattern::FromURL(url), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, std::string(), CONTENT_SETTING_ALLOW); base::string16 expected_title(base::ASCIIToUTF16("OK")); content::TitleWatcher title_watcher( browser()->tab_strip_model()->GetActiveWebContents(), expected_title); ui_test_utils::NavigateToURL(browser(), url); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); } // Verify that plugins can be blocked on a domain by adding an exception. IN_PROC_BROWSER_TEST_F(ClickToPlayPluginTest, BlockException) { GURL url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII("clicktoplay.html")); browser()->profile()->GetHostContentSettingsMap() ->SetContentSetting(ContentSettingsPattern::FromURL(url), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, std::string(), CONTENT_SETTING_BLOCK); base::string16 expected_title(base::ASCIIToUTF16("Click To Play")); content::TitleWatcher title_watcher( browser()->tab_strip_model()->GetActiveWebContents(), expected_title); ui_test_utils::NavigateToURL(browser(), url); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); } // Crashes on Mac Asan. http://crbug.com/239169 #if defined(OS_MACOSX) #define MAYBE_LoadAllBlockedPlugins DISABLED_LoadAllBlockedPlugins // TODO(jschuh): Flaky plugin tests. crbug.com/244653 #elif defined(OS_WIN) && defined(ARCH_CPU_X86_64) #define MAYBE_LoadAllBlockedPlugins DISABLED_LoadAllBlockedPlugins #else #define MAYBE_LoadAllBlockedPlugins LoadAllBlockedPlugins #endif IN_PROC_BROWSER_TEST_F(ClickToPlayPluginTest, MAYBE_LoadAllBlockedPlugins) { browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); GURL url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII("load_all_blocked_plugins.html")); ui_test_utils::NavigateToURL(browser(), url); base::string16 expected_title1(base::ASCIIToUTF16("1")); content::TitleWatcher title_watcher1( browser()->tab_strip_model()->GetActiveWebContents(), expected_title1); ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( browser()->tab_strip_model()->GetActiveWebContents(), true, std::string()); EXPECT_EQ(expected_title1, title_watcher1.WaitAndGetTitle()); base::string16 expected_title2(base::ASCIIToUTF16("2")); content::TitleWatcher title_watcher2( browser()->tab_strip_model()->GetActiveWebContents(), expected_title2); ASSERT_TRUE(content::ExecuteScript( browser()->tab_strip_model()->GetActiveWebContents(), "window.inject()")); EXPECT_EQ(expected_title2, title_watcher2.WaitAndGetTitle()); } // If this flakes, use http://crbug.com/113057. // TODO(jschuh): Hanging plugin tests. crbug.com/244653 #if !defined(OS_WIN) && !defined(ARCH_CPU_X86_64) IN_PROC_BROWSER_TEST_F(ClickToPlayPluginTest, NoCallbackAtLoad) { browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); GURL url("data:application/vnd.npapi-test,CallOnStartup();"); ui_test_utils::NavigateToURL(browser(), url); // Inject the callback function into the HTML page generated by the browser. ASSERT_TRUE(content::ExecuteScript( browser()->tab_strip_model()->GetActiveWebContents(), "CallOnStartup = function() { document.title = \"OK\"; }")); base::string16 expected_title(base::ASCIIToUTF16("OK")); content::TitleWatcher title_watcher( browser()->tab_strip_model()->GetActiveWebContents(), expected_title); ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( browser()->tab_strip_model()->GetActiveWebContents(), true, std::string()); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); } #endif IN_PROC_BROWSER_TEST_F(ClickToPlayPluginTest, DeleteSelfAtLoad) { browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); GURL url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII("plugin_delete_self_at_load.html")); ui_test_utils::NavigateToURL(browser(), url); base::string16 expected_title(base::ASCIIToUTF16("OK")); content::TitleWatcher title_watcher( browser()->tab_strip_model()->GetActiveWebContents(), expected_title); ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( browser()->tab_strip_model()->GetActiveWebContents(), true, std::string()); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); } #endif // !defined(USE_AURA) || defined(OS_WIN) #if defined(ENABLE_PLUGINS) class PepperContentSettingsTest : public ContentSettingsTest { public: PepperContentSettingsTest() {} protected: static const char* const kExternalClearKeyMimeType; // Registers any CDM plugins not registered by default. virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { #if defined(ENABLE_PEPPER_CDMS) // Platform-specific filename relative to the chrome executable. #if defined(OS_WIN) const std::wstring external_clear_key_mime_type = base::ASCIIToWide(kExternalClearKeyMimeType); const char kLibraryName[] = "clearkeycdmadapter.dll"; #else // !defined(OS_WIN) const char* external_clear_key_mime_type = kExternalClearKeyMimeType; #if defined(OS_MACOSX) const char kLibraryName[] = "clearkeycdmadapter.plugin"; #elif defined(OS_POSIX) const char kLibraryName[] = "libclearkeycdmadapter.so"; #endif // defined(OS_MACOSX) #endif // defined(OS_WIN) // Append the switch to register the External Clear Key CDM. base::FilePath plugin_dir; EXPECT_TRUE(PathService::Get(base::DIR_MODULE, &plugin_dir)); base::FilePath plugin_lib = plugin_dir.AppendASCII(kLibraryName); EXPECT_TRUE(base::PathExists(plugin_lib)); base::FilePath::StringType pepper_plugin = plugin_lib.value(); pepper_plugin.append(FILE_PATH_LITERAL( "#Clear Key CDM#Clear Key CDM 0.1.0.0#0.1.0.0;")); pepper_plugin.append(external_clear_key_mime_type); command_line->AppendSwitchNative(switches::kRegisterPepperPlugins, pepper_plugin); #endif // defined(ENABLE_PEPPER_CDMS) #if !defined(DISABLE_NACL) // Ensure NaCl can run. command_line->AppendSwitch(switches::kEnableNaCl); #endif } void RunLoadPepperPluginTest(const char* mime_type, bool expect_loaded) { const char* expected_result = expect_loaded ? "Loaded" : "Not Loaded"; content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); base::string16 expected_title(base::ASCIIToUTF16(expected_result)); content::TitleWatcher title_watcher(web_contents, expected_title); // GetTestUrl assumes paths, so we must append query parameters to result. GURL file_url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII("load_pepper_plugin.html")); GURL url(file_url.spec() + base::StringPrintf("?mimetype=%s", mime_type)); ui_test_utils::NavigateToURL(browser(), url); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); EXPECT_EQ(!expect_loaded, TabSpecificContentSettings::FromWebContents(web_contents)-> IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); } void RunJavaScriptBlockedTest(const char* html_file, bool expect_is_javascript_content_blocked) { // Because JavaScript is disabled, will be the only title set. // Checking for it ensures that the page loaded. const char* const kExpectedTitle = "Initial Title"; content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); TabSpecificContentSettings* tab_settings = TabSpecificContentSettings::FromWebContents(web_contents); base::string16 expected_title(base::ASCIIToUTF16(kExpectedTitle)); content::TitleWatcher title_watcher(web_contents, expected_title); GURL url = ui_test_utils::GetTestUrl( base::FilePath(), base::FilePath().AppendASCII(html_file)); ui_test_utils::NavigateToURL(browser(), url); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); EXPECT_EQ(expect_is_javascript_content_blocked, tab_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); EXPECT_FALSE(tab_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); } }; const char* const PepperContentSettingsTest::kExternalClearKeyMimeType = "application/x-ppapi-clearkey-cdm"; // Tests Pepper plugins that use JavaScript instead of Plug-ins settings. IN_PROC_BROWSER_TEST_F(PepperContentSettingsTest, DISABLED_PluginSpecialCases) { #if defined(OS_WIN) && defined(USE_ASH) // Disable this test in Metro+Ash for now (http://crbug.com/262796). if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) return; #endif HostContentSettingsMap* content_settings = browser()->profile()->GetHostContentSettingsMap(); // First, verify that this plugin can be loaded. content_settings->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_ALLOW); #if defined(ENABLE_PEPPER_CDMS) RunLoadPepperPluginTest(kExternalClearKeyMimeType, true); #endif // defined(ENABLE_PEPPER_CDMS) // Next, test behavior when plug-ins are blocked. content_settings->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK); #if defined(ENABLE_PEPPER_CDMS) // The plugin we loaded above does not load now. RunLoadPepperPluginTest(kExternalClearKeyMimeType, false); #if defined(WIDEVINE_CDM_AVAILABLE) RunLoadPepperPluginTest(kWidevineCdmPluginMimeType, true); #endif // defined(WIDEVINE_CDM_AVAILABLE) #endif // defined(ENABLE_PEPPER_CDMS) #if !defined(DISABLE_NACL) RunLoadPepperPluginTest("application/x-nacl", true); #endif // !defined(DISABLE_NACL) // Finally, test behavior when (just) JavaScript is blocked. content_settings->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_ALLOW); content_settings->SetDefaultContentSetting( CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK); #if defined(ENABLE_PEPPER_CDMS) // This plugin has no special behavior and does not require JavaScript. RunJavaScriptBlockedTest("load_clearkey_no_js.html", false); #if defined(WIDEVINE_CDM_AVAILABLE) RunJavaScriptBlockedTest("load_widevine_no_js.html", true); #endif // defined(WIDEVINE_CDM_AVAILABLE) #endif // defined(ENABLE_PEPPER_CDMS) #if !defined(DISABLE_NACL) RunJavaScriptBlockedTest("load_nacl_no_js.html", true); #endif // !defined(DISABLE_NACL) } #endif // defined(ENABLE_PLUGINS)