15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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/content_settings/content_settings_policy_provider.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/auto_reset.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_mock_observer.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_rule.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content_settings {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<Rule> Rules;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PolicyProviderTest : public testing::Test {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProviderTest()
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : ui_thread_(BrowserThread::UI, &message_loop_) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(markusheintz): Check if it's possible to derive the provider class
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // from NonThreadSafe and to use native thread identifiers instead of
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // BrowserThread IDs. Then we could get rid of the message_loop and ui_thread
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // fields.
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop message_loop_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread ui_thread_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyProviderTest, DefaultGeolocationContentSetting) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProvider provider(prefs);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Rules rules;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<RuleIterator> rule_iterator(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      provider.GetRuleIterator(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          CONTENT_SETTINGS_TYPE_GEOLOCATION,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          std::string(),
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          false));
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rule_iterator->HasNext());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Change the managed value of the default geolocation setting
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetManagedPref(prefs::kManagedDefaultGeolocationSetting,
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        new base::FundamentalValue(CONTENT_SETTING_BLOCK));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rule_iterator.reset(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      provider.GetRuleIterator(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          CONTENT_SETTINGS_TYPE_GEOLOCATION,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          std::string(),
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          false));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rule_iterator->HasNext());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Rule rule = rule_iterator->Next();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rule_iterator->HasNext());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ContentSettingsPattern::Wildcard(), rule.primary_pattern);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ContentSettingsPattern::Wildcard(), rule.secondary_pattern);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_BLOCK, ValueToContentSetting(rule.value.get()));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.ShutdownOnUIThread();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyProviderTest, ManagedDefaultContentSettings) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProvider provider(prefs);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetManagedPref(prefs::kManagedDefaultPluginsSetting,
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        new base::FundamentalValue(CONTENT_SETTING_BLOCK));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<RuleIterator> rule_iterator(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      provider.GetRuleIterator(
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          CONTENT_SETTINGS_TYPE_PLUGINS,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          std::string(),
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          false));
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rule_iterator->HasNext());
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Rule rule = rule_iterator->Next();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rule_iterator->HasNext());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ContentSettingsPattern::Wildcard(), rule.primary_pattern);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ContentSettingsPattern::Wildcard(), rule.secondary_pattern);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_BLOCK, ValueToContentSetting(rule.value.get()));
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.ShutdownOnUIThread();
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When a default-content-setting is set to a managed setting a
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CONTENT_SETTINGS_CHANGED notification should be fired. The same should happen
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// if the managed setting is removed.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyProviderTest, ObserveManagedSettingsChange) {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProvider provider(prefs);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockObserver mock_observer;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(mock_observer,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              OnContentSettingChanged(_,
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      _,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      CONTENT_SETTINGS_TYPE_DEFAULT,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      ""));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.AddObserver(&mock_observer);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the managed default-content-setting.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetManagedPref(prefs::kManagedDefaultImagesSetting,
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        new base::FundamentalValue(CONTENT_SETTING_BLOCK));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClearExpectations(&mock_observer);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(mock_observer,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              OnContentSettingChanged(_,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      _,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      CONTENT_SETTINGS_TYPE_DEFAULT,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      ""));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove the managed default-content-setting.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->RemoveManagedPref(prefs::kManagedDefaultImagesSetting);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.ShutdownOnUIThread();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyProviderTest, GettingManagedContentSettings) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* value = new base::ListValue();
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->Append(new base::StringValue("[*.]google.com"));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetManagedPref(prefs::kManagedImagesBlockedForUrls,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        value);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProvider provider(prefs);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsPattern yt_url_pattern =
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ContentSettingsPattern::FromString("www.youtube.com");
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL youtube_url("http://www.youtube.com");
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL google_url("http://mail.google.com");
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            GetContentSetting(&provider,
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              youtube_url,
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              youtube_url,
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              CONTENT_SETTINGS_TYPE_COOKIES,
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              std::string(),
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              false));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(NULL,
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            GetContentSettingValue(&provider,
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   youtube_url,
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   youtube_url,
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   CONTENT_SETTINGS_TYPE_COOKIES,
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   std::string(),
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   false));
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_BLOCK,
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            GetContentSetting(&provider,
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              google_url,
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              google_url,
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              CONTENT_SETTINGS_TYPE_IMAGES,
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              std::string(),
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              false));
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::Value> value_ptr(
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      GetContentSettingValue(&provider,
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             google_url,
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             google_url,
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             CONTENT_SETTINGS_TYPE_IMAGES,
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             std::string(),
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             false));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int int_value = -1;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value_ptr->GetAsInteger(&int_value);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_BLOCK, IntToContentSetting(int_value));
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The PolicyProvider does not allow setting content settings as they are
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enforced via policies and not set by the user or extension. So a call to
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SetWebsiteSetting does nothing.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<base::Value> value_block(
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      new base::FundamentalValue(CONTENT_SETTING_BLOCK));
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool owned = provider.SetWebsiteSetting(yt_url_pattern,
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                          yt_url_pattern,
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                          CONTENT_SETTINGS_TYPE_COOKIES,
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                          std::string(),
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                          value_block.get());
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(owned);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            GetContentSetting(&provider,
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              youtube_url,
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              youtube_url,
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              CONTENT_SETTINGS_TYPE_COOKIES,
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              std::string(),
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              false));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.ShutdownOnUIThread();
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyProviderTest, ResourceIdentifier) {
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* value = new base::ListValue();
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->Append(new base::StringValue("[*.]google.com"));
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetManagedPref(prefs::kManagedPluginsAllowedForUrls,
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        value);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProvider provider(prefs);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL youtube_url("http://www.youtube.com");
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL google_url("http://mail.google.com");
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetContentSetting(
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                &provider, youtube_url, youtube_url,
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                CONTENT_SETTINGS_TYPE_PLUGINS, "someplugin", false));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // There is currently no policy support for resource content settings.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resource identifiers are simply ignored by the PolicyProvider.
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_ALLOW,
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            GetContentSetting(&provider,
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              google_url,
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              google_url,
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              CONTENT_SETTINGS_TYPE_PLUGINS,
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              std::string(),
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              false));
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetContentSetting(
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                &provider, google_url, google_url,
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                CONTENT_SETTINGS_TYPE_PLUGINS, "someplugin", false));
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.ShutdownOnUIThread();
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyProviderTest, AutoSelectCertificateList) {
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyProvider provider(prefs);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL google_url("https://mail.google.com");
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tests the default setting for auto selecting certificates
252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(
253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL,
254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      GetContentSettingValue(&provider,
255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             google_url,
256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             google_url,
257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE,
258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             std::string(),
259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             false));
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the content settings pattern list for origins to auto select
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // certificates.
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string pattern_str("\"pattern\":\"[*.]google.com\"");
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string filter_str("\"filter\":{\"ISSUER\":{\"CN\":\"issuer name\"}}");
2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* value = new base::ListValue();
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->Append(
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      new base::StringValue("{" + pattern_str + "," + filter_str + "}"));
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetManagedPref(prefs::kManagedAutoSelectCertificateForUrls,
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        value);
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL youtube_url("https://www.youtube.com");
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(
272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL,
273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      GetContentSettingValue(&provider,
274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             youtube_url,
275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             youtube_url,
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE,
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             std::string(),
278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             false));
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::Value> cert_filter(
280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      GetContentSettingValue(&provider,
281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             google_url,
282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             google_url,
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE,
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             std::string(),
285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             false));
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_EQ(base::Value::TYPE_DICTIONARY, cert_filter->GetType());
2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* dict_value =
2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      static_cast<base::DictionaryValue*>(cert_filter.get());
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string actual_common_name;
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict_value->GetString("ISSUER.CN", &actual_common_name));
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("issuer name", actual_common_name);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider.ShutdownOnUIThread();
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content_settings
297