12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 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_internal_extension_provider.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/chrome_content_client.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/api/plugins/plugins_handler.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_rule.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings_pattern.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/notification_types.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h"
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h"
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/features/simple_feature.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::UnloadedExtensionInfo;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content_settings {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InternalExtensionProvider::InternalExtensionProvider(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionService* extension_service)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : registrar_(new content::NotificationRegistrar) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whitelist all extensions loaded so far.
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const extensions::ExtensionSet* extensions = extension_service->extensions();
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (extensions::ExtensionSet::const_iterator it = extensions->begin();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       it != extensions->end(); ++it) {
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    if (extensions::PluginInfo::HasPlugins(it->get()))
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      SetContentSettingForExtension(it->get(), CONTENT_SETTING_ALLOW);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = extension_service->profile();
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  registrar_->Add(this,
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                  extensions::NOTIFICATION_EXTENSION_HOST_CREATED,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  content::Source<Profile>(profile));
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  registrar_->Add(this,
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                  extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  content::Source<Profile>(profile));
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  registrar_->Add(this,
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                  extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  content::Source<Profile>(profile));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InternalExtensionProvider::~InternalExtensionProvider() {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!registrar_.get());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RuleIterator* InternalExtensionProvider::GetRuleIterator(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsType content_type,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ResourceIdentifier& resource_identifier,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool incognito) const {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value_map_.GetRuleIterator(content_type, resource_identifier, &lock_);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InternalExtensionProvider::SetWebsiteSetting(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ContentSettingsPattern& primary_pattern,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ContentSettingsPattern& secondary_pattern,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsType content_type,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ResourceIdentifier& resource_identifier,
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::Value* value) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternalExtensionProvider::ClearAllContentSettingsRules(
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsType content_type) {}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternalExtensionProvider::Observe(int type,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const content::NotificationSource& source,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const content::NotificationDetails& details) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (type) {
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case extensions::NOTIFICATION_EXTENSION_HOST_CREATED: {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const extensions::ExtensionHost* host =
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          content::Details<extensions::ExtensionHost>(details).ptr();
794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      if (host->extension()->is_platform_app()) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SetContentSettingForExtension(host->extension(), CONTENT_SETTING_BLOCK);
814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        // White-list CRD's v2 app, until crbug.com/134216 is complete.
834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        const char* kAppWhitelist[] = {
844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          "2775E568AC98F9578791F1EAB65A1BF5F8CEF414",
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          "4AA3C5D69A4AECBD236CAD7884502209F0F5C169",
864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          "97B23E01B2AA064E8332EE43A7A85C628AADC3F2",
874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          "9E930B2B5EABA6243AE6C710F126E54688E8FAF6",
884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          "C449A798C495E6CF7D6AF10162113D564E67AD12",
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          "E410CDAB2C6E6DD408D731016CECF2444000A912",
9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "EBA908206905323CECE6DC4B276A58A0F4AC573F",
9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          // http://crbug.com/327507
9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "FAFE8EFDD2D6AE2EEB277AFEB91C870C79064D9E",
9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "3B52D273A271D4E2348233E322426DBAE854B567",
9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "5DF6ADC8708DF59FCFDDBF16AFBFB451380C2059",
9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "1037DEF5F6B06EA46153AD87B6C5C37440E3F2D1",
9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "F5815DAFEB8C53B078DD1853B2059E087C42F139",
9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "6A08EFFF9C16E090D6DCC7EC55A01CADAE840513",
9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          // http://crbug.com/354258
10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "C32D6D93E12F5401DAA3A723E0C3CC5F25429BA4",
10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "9099782647D39C778E15C8C6E0D23C88F5CDE170",
10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "B7D5B52D1E5B106288BD7F278CAFA5E8D76108B0",
10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "89349DBAA2C4022FB244AA50182AB60934EB41EE",
10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "CB593E510640572A995CB1B6D41BD85ED51E63F8",
10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "1AD1AC86C87969CD3434FA08D99DBA6840AEA612",
10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "9C2EA21D7975BDF2B3C01C3A454EE44854067A6D",
10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "D2C488C80C3C90C3E01A991112A05E37831E17D0",
10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "6EEC061C0E74B46C7B5BE2EEFA49436368F4988F",
11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)          "8B344D9E8A4C505EF82A0DBBC25B8BD1F984E777",
1116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "E06AFCB1EB0EFD237824CC4AC8FDD3D43E8BC868",
1126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
1136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          // http://crbug.com/386324
1146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "F76F43EFFF56BF17A9868A5243F339BA28746632",
1156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "C6EA52B92F80878515F94137020F01519357E5B5",
1166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "E466389F058ABD73FF6FDD06F768A351FCBF8532",
1176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "40063F1CF7B68BA847A26FA6620DDF156171D23C",
1186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "A6FD8E15353CF1F5C3D0A7B20E1D10AEA4DD3E6A",
1196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "57AC4D9E6BD8A2D0A70056B5FAC2378CAA588912",
1206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "02037314DA4D913640DCF0E296A7D01F4FD793EC",
1216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "B6EC0809BC63E10B431C5E4AA3645232CA86B2A5",
1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "48CA541313139786F056DBCB504A1025CFF5D2E3",
1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          "05106136AE7F08A3C181D4648E5438350B1D2B4F"
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        };
125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        if (extensions::SimpleFeature::IsIdInList(
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                host->extension()->id(),
1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                std::set<std::string>(
1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                    kAppWhitelist, kAppWhitelist + arraysize(kAppWhitelist)))) {
1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          SetContentSettingForExtensionAndResource(
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)              host->extension(),
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              ChromeContentClient::kRemotingViewerPluginPath,
1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)              CONTENT_SETTING_ALLOW);
1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      }
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const extensions::Extension* extension =
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          content::Details<extensions::Extension>(details).ptr();
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (extensions::PluginInfo::HasPlugins(extension))
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SetContentSettingForExtension(extension, CONTENT_SETTING_ALLOW);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const UnloadedExtensionInfo& info =
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          *(content::Details<UnloadedExtensionInfo>(details).ptr());
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (extensions::PluginInfo::HasPlugins(info.extension))
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SetContentSettingForExtension(info.extension, CONTENT_SETTING_DEFAULT);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternalExtensionProvider::ShutdownOnUIThread() {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveAllObservers();
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.reset();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternalExtensionProvider::SetContentSettingForExtension(
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const extensions::Extension* extension,
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSetting setting) {
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SetContentSettingForExtensionAndResource(
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      extension, ResourceIdentifier(), setting);
1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void InternalExtensionProvider::SetContentSettingForExtensionAndResource(
1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const extensions::Extension* extension,
1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const ResourceIdentifier& resource,
1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ContentSetting setting) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ContentSettingsPattern::BuilderInterface> pattern_builder(
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ContentSettingsPattern::CreateBuilder(false));
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pattern_builder->WithScheme(extensions::kExtensionScheme);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pattern_builder->WithHost(extension->id());
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pattern_builder->WithPathWildcard();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsPattern primary_pattern = pattern_builder->Build();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsPattern secondary_pattern = ContentSettingsPattern::Wildcard();
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::AutoLock lock(lock_);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (setting == CONTENT_SETTING_DEFAULT) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      value_map_.DeleteValue(primary_pattern,
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             secondary_pattern,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             CONTENT_SETTINGS_TYPE_PLUGINS,
1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             resource);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      value_map_.SetValue(primary_pattern,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          secondary_pattern,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          CONTENT_SETTINGS_TYPE_PLUGINS,
1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                          resource,
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                          new base::FundamentalValue(setting));
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyObservers(primary_pattern,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  secondary_pattern,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  CONTENT_SETTINGS_TYPE_PLUGINS,
2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                  resource);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content_settings
204