info_map.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 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) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/info_map.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/browser/content_verifier.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/incognito_info.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace extensions { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid CheckOnValidThread() { DCHECK_CURRENTLY_ON(BrowserThread::IO); } 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct InfoMap::ExtraData { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the extension was installed. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time install_time; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the user has allowed this extension to run in incognito mode. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito_enabled; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // True if the user has disabled notifications for this extension manually. 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool notifications_disabled; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtraData(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ExtraData(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InfoMap::ExtraData::ExtraData() : incognito_enabled(false) {} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InfoMap::ExtraData::~ExtraData() {} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InfoMap::InfoMap() : signin_process_id_(-1) {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const ProcessMap& InfoMap::process_map() const { return process_map_; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const ProcessMap& InfoMap::worker_process_map() const { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return worker_process_map_; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::AddExtension(const Extension* extension, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Time install_time, 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool incognito_enabled, 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool notifications_disabled) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckOnValidThread(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions_.Insert(extension); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_extensions_.Remove(extension->id()); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_data_[extension->id()].install_time = install_time; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_data_[extension->id()].incognito_enabled = incognito_enabled; 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extra_data_[extension->id()].notifications_disabled = notifications_disabled; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::RemoveExtension(const std::string& extension_id, 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnloadedExtensionInfo::Reason reason) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckOnValidThread(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = extensions_.GetByID(extension_id); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_data_.erase(extension_id); // we don't care about disabled extra data 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool was_uninstalled = (reason != UnloadedExtensionInfo::REASON_DISABLE && 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) reason != UnloadedExtensionInfo::REASON_TERMINATE); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!was_uninstalled) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_extensions_.Insert(extension); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions_.Remove(extension_id); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (was_uninstalled) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the extension was uninstalled, make sure it's removed from the map of 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled extensions. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_extensions_.Remove(extension_id); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: This can currently happen if we receive multiple unload 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notifications, e.g. setting incognito-enabled state for a 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled extension (e.g., via sync). See 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://code.google.com/p/chromium/issues/detail?id=50582 . 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << extension_id; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)base::Time InfoMap::GetInstallTime(const std::string& extension_id) const { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtraDataMap::const_iterator iter = extra_data_.find(extension_id); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter != extra_data_.end()) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return iter->second.install_time; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Time(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool InfoMap::IsIncognitoEnabled(const std::string& extension_id) const { 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keep in sync with duplicate in extensions/browser/process_manager.cc. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtraDataMap::const_iterator iter = extra_data_.find(extension_id); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter != extra_data_.end()) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return iter->second.incognito_enabled; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool InfoMap::CanCrossIncognito(const Extension* extension) const { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is duplicated from ExtensionService :(. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsIncognitoEnabled(extension->id()) && 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) !IncognitoInfo::IsSplitMode(extension); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::RegisterExtensionProcess(const std::string& extension_id, 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int process_id, 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int site_instance_id) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!process_map_.Insert(extension_id, process_id, site_instance_id)) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Duplicate extension process registration for: " 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << extension_id << "," << process_id << "."; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::UnregisterExtensionProcess(const std::string& extension_id, 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int process_id, 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int site_instance_id) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!process_map_.Remove(extension_id, process_id, site_instance_id)) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Unknown extension process registration for: " 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << extension_id << "," << process_id << "."; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::UnregisterAllExtensionsInProcess(int process_id) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_map_.RemoveAllFromProcess(process_id); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void InfoMap::RegisterExtensionWorkerProcess(const std::string& extension_id, 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int process_id, 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int site_instance_id) { 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!worker_process_map_.Insert(extension_id, process_id, site_instance_id)) { 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED() << "Duplicate extension worker process registration for: " 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << extension_id << "," << process_id << "."; 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void InfoMap::UnregisterExtensionWorkerProcess(int process_id) { 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) worker_process_map_.RemoveAllFromProcess(process_id); 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::GetExtensionsWithAPIPermissionForSecurityOrigin( 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& origin, 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int process_id, 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) APIPermission::ID permission, 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionSet* extensions) const { 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(extensions); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (origin.SchemeIs(kExtensionScheme)) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id = origin.host(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = extensions_.GetByID(id); 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (extension && 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension->permissions_data()->HasAPIPermission(permission) && 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) process_map_.Contains(id, process_id)) { 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions->Insert(extension); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet::const_iterator i = extensions_.begin(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; i != extensions_.end(); ++i) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*i)->web_extent().MatchesSecurityOrigin(origin) && 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_map_.Contains((*i)->id(), process_id) && 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (*i)->permissions_data()->HasAPIPermission(permission)) { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions->Insert(*i); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool InfoMap::SecurityOriginHasAPIPermission(const GURL& origin, 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int process_id, 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) APIPermission::ID permission) 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const { 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionSet extensions; 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionsWithAPIPermissionForSecurityOrigin( 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) origin, process_id, permission, &extensions); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return !extensions.is_empty(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)QuotaService* InfoMap::GetQuotaService() { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckOnValidThread(); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!quota_service_) 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) quota_service_.reset(new QuotaService()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return quota_service_.get(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::SetSigninProcess(int process_id) { 19090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) signin_process_id_ = process_id; 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool InfoMap::IsSigninProcess(int process_id) const { 19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return process_id == signin_process_id_; 19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InfoMap::SetNotificationsDisabled( 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& extension_id, 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool notifications_disabled) { 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtraDataMap::iterator iter = extra_data_.find(extension_id); 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (iter != extra_data_.end()) 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter->second.notifications_disabled = notifications_disabled; 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool InfoMap::AreNotificationsDisabled( 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& extension_id) const { 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtraDataMap::const_iterator iter = extra_data_.find(extension_id); 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (iter != extra_data_.end()) 209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return iter->second.notifications_disabled; 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void InfoMap::SetContentVerifier(ContentVerifier* verifier) { 214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) content_verifier_ = verifier; 215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InfoMap::~InfoMap() { 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (quota_service_) { 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::DeleteSoon( 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, FROM_HERE, quota_service_.release()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace extensions 225