1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/tab_specific_content_settings.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_appcache_helper.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_database_helper.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/browsing_data_indexed_db_helper.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_local_storage_helper.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/cookies_tree_model.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/cookie_monster.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool TabSpecificContentSettings::LocalSharedObjectsContainer::empty() const { 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return cookies_->GetAllCookies().empty() && 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick appcaches_->empty() && 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick databases_->empty() && 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick indexed_dbs_->empty() && 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick local_storages_->empty() && 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storages_->empty(); 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool TabSpecificContentSettings::IsContentBlocked( 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ContentSettingsType content_type) const { 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "Geolocation settings handled by ContentSettingGeolocationImageModel"; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "Notifications settings handled by " 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "ContentSettingsNotificationsImageModel"; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (content_type == CONTENT_SETTINGS_TYPE_IMAGES || 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_type == CONTENT_SETTINGS_TYPE_JAVASCRIPT || 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_type == CONTENT_SETTINGS_TYPE_PLUGINS || 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_type == CONTENT_SETTINGS_TYPE_COOKIES || 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_type == CONTENT_SETTINGS_TYPE_POPUPS) 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return content_blocked_[content_type]; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochbool TabSpecificContentSettings::IsBlockageIndicated( 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ContentSettingsType content_type) const { 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return content_blockage_indicated_to_user_[content_type]; 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid TabSpecificContentSettings::SetBlockageHasBeenIndicated( 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ContentSettingsType content_type) { 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch content_blockage_indicated_to_user_[content_type] = true; 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool TabSpecificContentSettings::IsContentAccessed( 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType content_type) const { 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // This method currently only returns meaningful values for cookies. 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (content_type != CONTENT_SETTINGS_TYPE_COOKIES) 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return false; 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return content_accessed_[content_type]; 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst std::set<std::string>& 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabSpecificContentSettings::BlockedResourcesForType( 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType content_type) const { 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (blocked_resources_[content_type].get()) { 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return *blocked_resources_[content_type]; 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static std::set<std::string> empty_set; 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return empty_set; 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::AddBlockedResource( 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType content_type, 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& resource_identifier) { 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!blocked_resources_[content_type].get()) 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blocked_resources_[content_type].reset(new std::set<std::string>()); 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blocked_resources_[content_type]->insert(resource_identifier); 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::OnContentBlocked( 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type, 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& resource_identifier) { 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "Geolocation settings handled by OnGeolocationPermissionSet"; 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick content_accessed_[type] = true; 87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!resource_identifier.empty()) 88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AddBlockedResource(type, resource_identifier); 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!content_blocked_[type]) { 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick content_blocked_[type] = true; 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (delegate_) 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->OnContentSettingsAccessed(true); 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::OnContentAccessed(ContentSettingsType type) { 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick << "Geolocation settings handled by OnGeolocationPermissionSet"; 993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!content_accessed_[type]) { 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick content_accessed_[type] = true; 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (delegate_) 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->OnContentSettingsAccessed(false); 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid TabSpecificContentSettings::OnCookiesRead( 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const GURL& url, 10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const net::CookieList& cookie_list, 10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool blocked_by_policy) { 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (cookie_list.empty()) 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen LocalSharedObjectsContainer& container = blocked_by_policy ? 11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen blocked_local_shared_objects_ : allowed_local_shared_objects_; 11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen typedef net::CookieList::const_iterator cookie_iterator; 11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen for (cookie_iterator cookie = cookie_list.begin(); 11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie != cookie_list.end(); ++cookie) { 11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen container.cookies()->SetCookieWithDetails(url, 11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->Name(), 11921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->Value(), 12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->Domain(), 12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->Path(), 12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->ExpiryDate(), 12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->IsSecure(), 12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen cookie->IsHttpOnly()); 12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (blocked_by_policy) 12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, std::string()); 12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen else 12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); 13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid TabSpecificContentSettings::OnCookieChanged( 133201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const GURL& url, 134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& cookie_line, 135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const net::CookieOptions& options, 136201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool blocked_by_policy) { 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (blocked_by_policy) { 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch blocked_local_shared_objects_.cookies()->SetCookieWithOptions( 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url, cookie_line, options); 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, std::string()); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch allowed_local_shared_objects_.cookies()->SetCookieWithOptions( 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url, cookie_line, options); 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::OnIndexedDBAccessed( 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& url, 1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const string16& description, 1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool blocked_by_policy) { 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (blocked_by_policy) { 1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blocked_local_shared_objects_.indexed_dbs()->AddIndexedDB( 154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url, description); 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, std::string()); 1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick }else { 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick allowed_local_shared_objects_.indexed_dbs()->AddIndexedDB( 158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url, description); 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::OnLocalStorageAccessed( 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& url, 1653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DOMStorageType storage_type, 1663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool blocked_by_policy) { 1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LocalSharedObjectsContainer& container = blocked_by_policy ? 1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blocked_local_shared_objects_ : allowed_local_shared_objects_; 1693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CannedBrowsingDataLocalStorageHelper* helper = 1703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick storage_type == DOM_STORAGE_LOCAL ? 1713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick container.local_storages() : container.session_storages(); 1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick helper->AddLocalStorage(url); 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (blocked_by_policy) 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, std::string()); 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick else 1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); 1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabSpecificContentSettings::OnWebDatabaseAccessed( 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& url, 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const string16& name, 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const string16& display_name, 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unsigned long estimated_size, 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool blocked_by_policy) { 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (blocked_by_policy) { 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch blocked_local_shared_objects_.databases()->AddDatabase( 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url, UTF16ToUTF8(name), UTF16ToUTF8(display_name)); 1893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, std::string()); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch allowed_local_shared_objects_.databases()->AddDatabase( 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url, UTF16ToUTF8(name), UTF16ToUTF8(display_name)); 1933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabSpecificContentSettings::OnAppCacheAccessed( 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& manifest_url, bool blocked_by_policy) { 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (blocked_by_policy) { 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch blocked_local_shared_objects_.appcaches()->AddAppCache(manifest_url); 2013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, std::string()); 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch allowed_local_shared_objects_.appcaches()->AddAppCache(manifest_url); 2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabSpecificContentSettings::OnGeolocationPermissionSet( 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& requesting_origin, 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool allowed) { 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch geolocation_settings_state_.OnGeolocationPermissionSet(requesting_origin, 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch allowed); 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->OnContentSettingsAccessed(!allowed); 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTabSpecificContentSettings::TabSpecificContentSettings( 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Delegate* delegate, Profile* profile) 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : allowed_local_shared_objects_(profile), 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch blocked_local_shared_objects_(profile), 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch geolocation_settings_state_(profile), 2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick load_plugins_link_enabled_(true), 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_(NULL) { 2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ClearBlockedContentSettingsExceptForCookies(); 2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ClearCookieSpecificContentSettings(); 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_ = delegate; 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::ClearBlockedContentSettingsExceptForCookies() { 2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (size_t i = 0; i < arraysize(content_blocked_); ++i) { 2313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (i == CONTENT_SETTINGS_TYPE_COOKIES) 2323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick continue; 2333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blocked_resources_[i].reset(); 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_blocked_[i] = false; 2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick content_accessed_[i] = false; 236201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch content_blockage_indicated_to_user_[i] = false; 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick load_plugins_link_enabled_ = true; 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (delegate_) 2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->OnContentSettingsAccessed(false); 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::ClearCookieSpecificContentSettings() { 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch blocked_local_shared_objects_.Reset(); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch allowed_local_shared_objects_.Reset(); 2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick content_blocked_[CONTENT_SETTINGS_TYPE_COOKIES] = false; 2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick content_accessed_[CONTENT_SETTINGS_TYPE_COOKIES] = false; 248201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_COOKIES] = false; 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->OnContentSettingsAccessed(false); 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabSpecificContentSettings::SetPopupsBlocked(bool blocked) { 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch content_blocked_[CONTENT_SETTINGS_TYPE_POPUPS] = blocked; 255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_POPUPS] = false; 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->OnContentSettingsAccessed(blocked); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabSpecificContentSettings::GeolocationDidNavigate( 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationController::LoadCommittedDetails& details) { 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch geolocation_settings_state_.DidNavigate(details); 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabSpecificContentSettings::ClearGeolocationContentSettings() { 2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick geolocation_settings_state_.ClearStateMap(); 2673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCookiesTreeModel* TabSpecificContentSettings::GetAllowedCookiesTreeModel() { 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return allowed_local_shared_objects_.GetCookiesTreeModel(); 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCookiesTreeModel* TabSpecificContentSettings::GetBlockedCookiesTreeModel() { 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return blocked_local_shared_objects_.GetCookiesTreeModel(); 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTabSpecificContentSettings::LocalSharedObjectsContainer:: 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocalSharedObjectsContainer(Profile* profile) 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : cookies_(new net::CookieMonster(NULL, NULL)), 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch appcaches_(new CannedBrowsingDataAppCacheHelper(profile)), 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch databases_(new CannedBrowsingDataDatabaseHelper(profile)), 2823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick indexed_dbs_(new CannedBrowsingDataIndexedDBHelper(profile)), 2833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick local_storages_(new CannedBrowsingDataLocalStorageHelper(profile)), 2843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storages_(new CannedBrowsingDataLocalStorageHelper(profile)) { 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cookies_->SetCookieableSchemes( 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::CookieMonster::kDefaultCookieableSchemes, 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::CookieMonster::kDefaultCookieableSchemesCount); 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cookies_->SetKeepExpiredCookies(); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTabSpecificContentSettings::LocalSharedObjectsContainer:: 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~LocalSharedObjectsContainer() { 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabSpecificContentSettings::LocalSharedObjectsContainer::Reset() { 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cookies_ = new net::CookieMonster(NULL, NULL); 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cookies_->SetCookieableSchemes( 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::CookieMonster::kDefaultCookieableSchemes, 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::CookieMonster::kDefaultCookieableSchemesCount); 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cookies_->SetKeepExpiredCookies(); 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch appcaches_->Reset(); 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch databases_->Reset(); 3033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick indexed_dbs_->Reset(); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch local_storages_->Reset(); 3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storages_->Reset(); 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCookiesTreeModel* 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTabSpecificContentSettings::LocalSharedObjectsContainer::GetCookiesTreeModel() { 3103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return new CookiesTreeModel(cookies_, 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen databases_->Clone(), 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen local_storages_->Clone(), 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen session_storages_->Clone(), 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen appcaches_->Clone(), 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen indexed_dbs_->Clone(), 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen true); 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 318