Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Side by Side Diff: chrome/browser/content_settings/host_content_settings_map.cc

Issue 8528031: Fix memory leak in SetDefaultContentSettings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix memory leaks Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/content_settings/content_settings_default_provider.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/content_settings/host_content_settings_map.h" 5 #include "chrome/browser/content_settings/host_content_settings_map.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 false); 203 false);
204 } 204 }
205 } 205 }
206 206
207 void HostContentSettingsMap::SetDefaultContentSetting( 207 void HostContentSettingsMap::SetDefaultContentSetting(
208 ContentSettingsType content_type, 208 ContentSettingsType content_type,
209 ContentSetting setting) { 209 ContentSetting setting) {
210 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE); 210 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE);
211 DCHECK(IsSettingAllowedForType(setting, content_type)); 211 DCHECK(IsSettingAllowedForType(setting, content_type));
212 212
213 base::Value* value = Value::CreateIntegerValue(setting); 213 base::Value* value = NULL;
214 if (!content_settings_providers_[DEFAULT_PROVIDER]->SetWebsiteSetting( 214 if (setting != CONTENT_SETTING_DEFAULT)
215 ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), 215 value = Value::CreateIntegerValue(setting);
216 content_type, std::string(), value)) { 216 SetWebsiteSetting(
217 delete value; 217 ContentSettingsPattern::Wildcard(),
218 } 218 ContentSettingsPattern::Wildcard(),
219 content_type,
220 std::string(),
221 value);
Bernhard Bauer 2011/11/18 16:32:42 You should still check the return value for the ca
Bernhard Bauer 2011/11/18 16:44:44 Uh, disregard this, I thought that SetWebsiteSetti
219 } 222 }
220 223
221 void HostContentSettingsMap::SetWebsiteSetting( 224 void HostContentSettingsMap::SetWebsiteSetting(
222 const ContentSettingsPattern& primary_pattern, 225 const ContentSettingsPattern& primary_pattern,
223 const ContentSettingsPattern& secondary_pattern, 226 const ContentSettingsPattern& secondary_pattern,
224 ContentSettingsType content_type, 227 ContentSettingsType content_type,
225 const std::string& resource_identifier, 228 const std::string& resource_identifier,
226 base::Value* value) { 229 base::Value* value) {
227 DCHECK(IsValueAllowedForType(value, content_type)); 230 DCHECK(IsValueAllowedForType(value, content_type));
228 DCHECK(content_settings::SupportsResourceIdentifier(content_type) || 231 DCHECK(content_settings::SupportsResourceIdentifier(content_type) ||
229 resource_identifier.empty()); 232 resource_identifier.empty());
230 for (ProviderIterator provider = content_settings_providers_.begin(); 233 for (ProviderIterator provider = content_settings_providers_.begin();
231 provider != content_settings_providers_.end(); 234 provider != content_settings_providers_.end();
232 ++provider) { 235 ++provider) {
233 if (provider->second->SetWebsiteSetting(primary_pattern, 236 if (provider->second->SetWebsiteSetting(primary_pattern,
234 secondary_pattern, 237 secondary_pattern,
235 content_type, 238 content_type,
236 resource_identifier, 239 resource_identifier,
237 value)) { 240 value)) {
238 return; 241 return;
239 } 242 }
240 } 243 }
244 // There should be at least one provider that accepts the ownership of the
James Hawkins 2011/11/18 16:39:44 Eh I'm not so sure about this. This falls under th
Bernhard Bauer 2011/11/18 16:44:44 Hm, but shouldn't the right way to catch this be a
James Hawkins 2011/11/18 16:53:40 Yes, you're right; however, my original complaint
markusheintz_ 2011/11/18 17:01:18 The NOTREACHED is really not reached. I don't know
markusheintz_ 2011/11/18 21:04:31 If you like we can change the NOTREACHED() to a CH
James Hawkins 2011/11/18 21:07:23 There's no need to change the NOTREACHED(). If it'
245 // passed |value|. However if we would set a default setting on the incognito
246 // map the |DefaultProvider| would refuse to accept the setting. This should
247 // not happen that's why there is the NOTREACHED. However if it would happen,
248 // then we do not want to leak memory. Hence delete the |value|.
249 delete value;
241 NOTREACHED(); 250 NOTREACHED();
242 } 251 }
243 252
244 void HostContentSettingsMap::SetContentSetting( 253 void HostContentSettingsMap::SetContentSetting(
245 const ContentSettingsPattern& primary_pattern, 254 const ContentSettingsPattern& primary_pattern,
246 const ContentSettingsPattern& secondary_pattern, 255 const ContentSettingsPattern& secondary_pattern,
247 ContentSettingsType content_type, 256 ContentSettingsType content_type,
248 const std::string& resource_identifier, 257 const std::string& resource_identifier,
249 ContentSetting setting) { 258 ContentSetting setting) {
250 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE); 259 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE);
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 } 456 }
448 } 457 }
449 458
450 if (info) { 459 if (info) {
451 info->source = content_settings::SETTING_SOURCE_NONE; 460 info->source = content_settings::SETTING_SOURCE_NONE;
452 info->primary_pattern = ContentSettingsPattern(); 461 info->primary_pattern = ContentSettingsPattern();
453 info->secondary_pattern = ContentSettingsPattern(); 462 info->secondary_pattern = ContentSettingsPattern();
454 } 463 }
455 return NULL; 464 return NULL;
456 } 465 }
OLDNEW
« no previous file with comments | « chrome/browser/content_settings/content_settings_default_provider.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698