Index: chrome/browser/policy/policy_browsertest.cc |
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc |
index ff79bcb42760ce046570e893be665489895cb74c..6735006de4eacdca21a5be09e1030fd5162e19f5 100644 |
--- a/chrome/browser/policy/policy_browsertest.cc |
+++ b/chrome/browser/policy/policy_browsertest.cc |
@@ -79,10 +79,13 @@ |
#include "content/public/common/url_constants.h" |
#include "content/public/test/browser_test_utils.h" |
#include "content/public/test/download_test_observer.h" |
+#include "content/public/test/test_navigation_observer.h" |
#include "content/public/test/test_utils.h" |
+#include "content/test/net/url_request_failed_job.h" |
#include "content/test/net/url_request_mock_http_job.h" |
#include "googleurl/src/gurl.h" |
#include "grit/generated_resources.h" |
+#include "net/base/net_errors.h" |
#include "net/base/net_util.h" |
#include "net/http/http_stream_factory.h" |
#include "net/url_request/url_request.h" |
@@ -148,6 +151,31 @@ void RedirectHostsToTestDataOnIOThread(const GURL* const urls[], size_t size) { |
} |
} |
+// Fails requests using ERR_CONNECTION_RESET. |
+net::URLRequestJob* FailedJobFactory( |
+ net::URLRequest* request, |
+ net::NetworkDelegate* network_delegate, |
+ const std::string& scheme) { |
+ return new content::URLRequestFailedJob( |
+ request, network_delegate, net::ERR_CONNECTION_RESET); |
+} |
+ |
+// Filters requests to the |host| such that they fail. Run on IO thread. |
+void MakeRequestFailOnIO(const std::string& host) { |
+ net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance(); |
+ filter->AddHostnameHandler("http", host, &FailedJobFactory); |
+ filter->AddHostnameHandler("https", host, &FailedJobFactory); |
+} |
+ |
+// Sets up the filter on IO thread such that requests to |host| fail. |
+void MakeRequestFail(const std::string& host) { |
+ BrowserThread::PostTaskAndReply( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(MakeRequestFailOnIO, host), |
+ MessageLoop::QuitClosure()); |
+ content::RunMessageLoop(); |
+} |
+ |
// Verifies that the given |url| can be opened. This assumes that |url| points |
// at empty.html in the test data dir. |
void CheckCanOpenURL(Browser* browser, const GURL& url) { |
@@ -583,6 +611,8 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, ClearSiteDataOnExit) { |
} |
IN_PROC_BROWSER_TEST_F(PolicyTest, DefaultSearchProvider) { |
+ MakeRequestFail("search.example"); |
+ |
// Verifies that a default search is made using the provider configured via |
// policy. Also checks that default search can be completely disabled. |
const string16 kKeyword(ASCIIToUTF16("testsearch")); |
@@ -648,7 +678,64 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, DefaultSearchProvider) { |
EXPECT_EQ(GURL(chrome::kAboutBlankURL), web_contents->GetURL()); |
} |
+IN_PROC_BROWSER_TEST_F(PolicyTest, ForceSafeSearch) { |
+ // Makes the requests fail since all we want to check is that the redirection |
+ // is done properly. |
+ MakeRequestFail("google.com"); |
+ |
+ // Verifies that requests to Google Search engine with the SafeSearch |
+ // enabled set the safe=active&ssui=on parameters at the end of the query. |
+ TemplateURLService* service = TemplateURLServiceFactory::GetForProfile( |
+ browser()->profile()); |
+ ui_test_utils::WaitForTemplateURLServiceToLoad(service); |
+ |
+ // First check that nothing happens. |
+ content::TestNavigationObserver no_safesearch_observer( |
+ content::NotificationService::AllSources()); |
+ chrome::FocusLocationBar(browser()); |
+ LocationBar* location_bar = browser()->window()->GetLocationBar(); |
+ ui_test_utils::SendToOmniboxAndSubmit(location_bar, "http://google.com/"); |
+ OmniboxEditModel* model = location_bar->GetLocationEntry()->model(); |
+ no_safesearch_observer.Wait(); |
+ EXPECT_TRUE(model->CurrentMatch().destination_url.is_valid()); |
+ content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
+ GURL expected_without("http://google.com/"); |
+ EXPECT_EQ(expected_without, web_contents->GetURL()); |
+ |
+ PrefService* prefs = browser()->profile()->GetPrefs(); |
+ EXPECT_FALSE(prefs->IsManagedPreference(prefs::kForceSafeSearch)); |
+ EXPECT_FALSE(prefs->GetBoolean(prefs::kForceSafeSearch)); |
+ |
+ // Override the default SafeSearch setting using policies. |
+ PolicyMap policies; |
+ policies.Set(key::kForceSafeSearch, POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true)); |
+ provider_.UpdateChromePolicy(policies); |
+ |
+ EXPECT_TRUE(prefs->IsManagedPreference(prefs::kForceSafeSearch)); |
+ EXPECT_TRUE(prefs->GetBoolean(prefs::kForceSafeSearch)); |
+ |
+ content::TestNavigationObserver safesearch_observer( |
+ content::NotificationService::AllSources()); |
+ |
+ // Verify that searching from google.com works. |
+ chrome::FocusLocationBar(browser()); |
+ location_bar = browser()->window()->GetLocationBar(); |
+ ui_test_utils::SendToOmniboxAndSubmit(location_bar, "http://google.com/"); |
+ safesearch_observer.Wait(); |
+ model = location_bar->GetLocationEntry()->model(); |
+ EXPECT_TRUE(model->CurrentMatch().destination_url.is_valid()); |
+ web_contents = chrome::GetActiveWebContents(browser()); |
+ std::string expected_url("http://google.com/?"); |
+ expected_url += std::string(chrome::kSafeSearchSafeParameter) + "&" + |
+ chrome::kSafeSearchSsuiParameter; |
+ GURL expected_with_parameters(expected_url); |
+ EXPECT_EQ(expected_with_parameters, web_contents->GetURL()); |
+} |
+ |
IN_PROC_BROWSER_TEST_F(PolicyTest, ReplaceSearchTerms) { |
+ MakeRequestFail("search.example"); |
+ |
CommandLine::ForCurrentProcess()->AppendSwitch( |
switches::kEnableInstantExtendedAPI); |