OLD | NEW |
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/tab_specific_content_settings.h" | 5 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
11 #include "chrome/browser/browsing_data_appcache_helper.h" | 11 #include "chrome/browser/browsing_data_appcache_helper.h" |
12 #include "chrome/browser/browsing_data_database_helper.h" | 12 #include "chrome/browser/browsing_data_database_helper.h" |
13 #include "chrome/browser/browsing_data_file_system_helper.h" | 13 #include "chrome/browser/browsing_data_file_system_helper.h" |
14 #include "chrome/browser/browsing_data_indexed_db_helper.h" | 14 #include "chrome/browser/browsing_data_indexed_db_helper.h" |
15 #include "chrome/browser/browsing_data_local_storage_helper.h" | 15 #include "chrome/browser/browsing_data_local_storage_helper.h" |
16 #include "chrome/browser/content_settings/content_settings_details.h" | 16 #include "chrome/browser/content_settings/content_settings_details.h" |
17 #include "chrome/browser/content_settings/host_content_settings_map.h" | 17 #include "chrome/browser/content_settings/host_content_settings_map.h" |
18 #include "chrome/browser/cookies_tree_model.h" | 18 #include "chrome/browser/cookies_tree_model.h" |
19 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
| 20 #include "chrome/common/chrome_notification_types.h" |
20 #include "chrome/common/render_messages.h" | 21 #include "chrome/common/render_messages.h" |
21 #include "content/browser/renderer_host/render_process_host.h" | 22 #include "content/browser/renderer_host/render_process_host.h" |
22 #include "content/browser/renderer_host/render_view_host.h" | 23 #include "content/browser/renderer_host/render_view_host.h" |
23 #include "content/browser/tab_contents/navigation_details.h" | 24 #include "content/browser/tab_contents/navigation_details.h" |
24 #include "content/browser/tab_contents/tab_contents.h" | 25 #include "content/browser/tab_contents/tab_contents.h" |
25 #include "content/browser/tab_contents/tab_contents_delegate.h" | 26 #include "content/browser/tab_contents/tab_contents_delegate.h" |
26 #include "content/common/notification_service.h" | 27 #include "content/common/notification_service.h" |
27 #include "content/common/view_messages.h" | 28 #include "content/common/view_messages.h" |
28 #include "net/base/cookie_monster.h" | 29 #include "net/base/cookie_monster.h" |
29 #include "webkit/fileapi/file_system_types.h" | 30 #include "webkit/fileapi/file_system_types.h" |
(...skipping 17 matching lines...) Expand all Loading... |
47 TabSpecificContentSettings::TabSpecificContentSettings(TabContents* tab) | 48 TabSpecificContentSettings::TabSpecificContentSettings(TabContents* tab) |
48 : TabContentsObserver(tab), | 49 : TabContentsObserver(tab), |
49 allowed_local_shared_objects_(tab->profile()), | 50 allowed_local_shared_objects_(tab->profile()), |
50 blocked_local_shared_objects_(tab->profile()), | 51 blocked_local_shared_objects_(tab->profile()), |
51 geolocation_settings_state_(tab->profile()), | 52 geolocation_settings_state_(tab->profile()), |
52 load_plugins_link_enabled_(true) { | 53 load_plugins_link_enabled_(true) { |
53 ClearBlockedContentSettingsExceptForCookies(); | 54 ClearBlockedContentSettingsExceptForCookies(); |
54 ClearCookieSpecificContentSettings(); | 55 ClearCookieSpecificContentSettings(); |
55 g_tab_specific.Get().push_back(this); | 56 g_tab_specific.Get().push_back(this); |
56 | 57 |
57 registrar_.Add(this, NotificationType::CONTENT_SETTINGS_CHANGED, | 58 registrar_.Add(this, chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED, |
58 Source<HostContentSettingsMap>( | 59 Source<HostContentSettingsMap>( |
59 tab->profile()->GetHostContentSettingsMap())); | 60 tab->profile()->GetHostContentSettingsMap())); |
60 } | 61 } |
61 | 62 |
62 TabSpecificContentSettings::~TabSpecificContentSettings() { | 63 TabSpecificContentSettings::~TabSpecificContentSettings() { |
63 g_tab_specific.Get().remove(this); | 64 g_tab_specific.Get().remove(this); |
64 } | 65 } |
65 | 66 |
66 TabSpecificContentSettings* TabSpecificContentSettings::Get( | 67 TabSpecificContentSettings* TabSpecificContentSettings::Get( |
67 int render_process_id, int render_view_id) { | 68 int render_process_id, int render_view_id) { |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 const std::string& resource_identifier) { | 207 const std::string& resource_identifier) { |
207 DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) | 208 DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) |
208 << "Geolocation settings handled by OnGeolocationPermissionSet"; | 209 << "Geolocation settings handled by OnGeolocationPermissionSet"; |
209 content_accessed_[type] = true; | 210 content_accessed_[type] = true; |
210 if (!resource_identifier.empty()) | 211 if (!resource_identifier.empty()) |
211 AddBlockedResource(type, resource_identifier); | 212 AddBlockedResource(type, resource_identifier); |
212 if (!content_blocked_[type]) { | 213 if (!content_blocked_[type]) { |
213 content_blocked_[type] = true; | 214 content_blocked_[type] = true; |
214 // TODO: it would be nice to have a way of mocking this in tests. | 215 // TODO: it would be nice to have a way of mocking this in tests. |
215 NotificationService::current()->Notify( | 216 NotificationService::current()->Notify( |
216 NotificationType::TAB_CONTENT_SETTINGS_CHANGED, | 217 chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, |
217 Source<TabContents>(tab_contents()), | 218 Source<TabContents>(tab_contents()), |
218 NotificationService::NoDetails()); | 219 NotificationService::NoDetails()); |
219 } | 220 } |
220 } | 221 } |
221 | 222 |
222 void TabSpecificContentSettings::OnContentAccessed(ContentSettingsType type) { | 223 void TabSpecificContentSettings::OnContentAccessed(ContentSettingsType type) { |
223 DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) | 224 DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) |
224 << "Geolocation settings handled by OnGeolocationPermissionSet"; | 225 << "Geolocation settings handled by OnGeolocationPermissionSet"; |
225 if (!content_accessed_[type]) { | 226 if (!content_accessed_[type]) { |
226 content_accessed_[type] = true; | 227 content_accessed_[type] = true; |
227 NotificationService::current()->Notify( | 228 NotificationService::current()->Notify( |
228 NotificationType::TAB_CONTENT_SETTINGS_CHANGED, | 229 chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, |
229 Source<TabContents>(tab_contents()), | 230 Source<TabContents>(tab_contents()), |
230 NotificationService::NoDetails()); | 231 NotificationService::NoDetails()); |
231 } | 232 } |
232 } | 233 } |
233 | 234 |
234 void TabSpecificContentSettings::OnCookiesRead( | 235 void TabSpecificContentSettings::OnCookiesRead( |
235 const GURL& url, | 236 const GURL& url, |
236 const net::CookieList& cookie_list, | 237 const net::CookieList& cookie_list, |
237 bool blocked_by_policy) { | 238 bool blocked_by_policy) { |
238 if (cookie_list.empty()) | 239 if (cookie_list.empty()) |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 fileapi::kFileSystemTypeTemporary, 0); | 345 fileapi::kFileSystemTypeTemporary, 0); |
345 OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); | 346 OnContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES); |
346 } | 347 } |
347 } | 348 } |
348 void TabSpecificContentSettings::OnGeolocationPermissionSet( | 349 void TabSpecificContentSettings::OnGeolocationPermissionSet( |
349 const GURL& requesting_origin, | 350 const GURL& requesting_origin, |
350 bool allowed) { | 351 bool allowed) { |
351 geolocation_settings_state_.OnGeolocationPermissionSet(requesting_origin, | 352 geolocation_settings_state_.OnGeolocationPermissionSet(requesting_origin, |
352 allowed); | 353 allowed); |
353 NotificationService::current()->Notify( | 354 NotificationService::current()->Notify( |
354 NotificationType::TAB_CONTENT_SETTINGS_CHANGED, | 355 chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, |
355 Source<TabContents>(tab_contents()), | 356 Source<TabContents>(tab_contents()), |
356 NotificationService::NoDetails()); | 357 NotificationService::NoDetails()); |
357 } | 358 } |
358 | 359 |
359 void TabSpecificContentSettings::ClearBlockedContentSettingsExceptForCookies() { | 360 void TabSpecificContentSettings::ClearBlockedContentSettingsExceptForCookies() { |
360 for (size_t i = 0; i < arraysize(content_blocked_); ++i) { | 361 for (size_t i = 0; i < arraysize(content_blocked_); ++i) { |
361 if (i == CONTENT_SETTINGS_TYPE_COOKIES) | 362 if (i == CONTENT_SETTINGS_TYPE_COOKIES) |
362 continue; | 363 continue; |
363 blocked_resources_[i].reset(); | 364 blocked_resources_[i].reset(); |
364 content_blocked_[i] = false; | 365 content_blocked_[i] = false; |
365 content_accessed_[i] = false; | 366 content_accessed_[i] = false; |
366 content_blockage_indicated_to_user_[i] = false; | 367 content_blockage_indicated_to_user_[i] = false; |
367 } | 368 } |
368 load_plugins_link_enabled_ = true; | 369 load_plugins_link_enabled_ = true; |
369 NotificationService::current()->Notify( | 370 NotificationService::current()->Notify( |
370 NotificationType::TAB_CONTENT_SETTINGS_CHANGED, | 371 chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, |
371 Source<TabContents>(tab_contents()), | 372 Source<TabContents>(tab_contents()), |
372 NotificationService::NoDetails()); | 373 NotificationService::NoDetails()); |
373 } | 374 } |
374 | 375 |
375 void TabSpecificContentSettings::ClearCookieSpecificContentSettings() { | 376 void TabSpecificContentSettings::ClearCookieSpecificContentSettings() { |
376 blocked_local_shared_objects_.Reset(); | 377 blocked_local_shared_objects_.Reset(); |
377 allowed_local_shared_objects_.Reset(); | 378 allowed_local_shared_objects_.Reset(); |
378 content_blocked_[CONTENT_SETTINGS_TYPE_COOKIES] = false; | 379 content_blocked_[CONTENT_SETTINGS_TYPE_COOKIES] = false; |
379 content_accessed_[CONTENT_SETTINGS_TYPE_COOKIES] = false; | 380 content_accessed_[CONTENT_SETTINGS_TYPE_COOKIES] = false; |
380 content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_COOKIES] = false; | 381 content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_COOKIES] = false; |
381 NotificationService::current()->Notify( | 382 NotificationService::current()->Notify( |
382 NotificationType::TAB_CONTENT_SETTINGS_CHANGED, | 383 chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, |
383 Source<TabContents>(tab_contents()), | 384 Source<TabContents>(tab_contents()), |
384 NotificationService::NoDetails()); | 385 NotificationService::NoDetails()); |
385 } | 386 } |
386 | 387 |
387 void TabSpecificContentSettings::SetPopupsBlocked(bool blocked) { | 388 void TabSpecificContentSettings::SetPopupsBlocked(bool blocked) { |
388 content_blocked_[CONTENT_SETTINGS_TYPE_POPUPS] = blocked; | 389 content_blocked_[CONTENT_SETTINGS_TYPE_POPUPS] = blocked; |
389 content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_POPUPS] = false; | 390 content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_POPUPS] = false; |
390 NotificationService::current()->Notify( | 391 NotificationService::current()->Notify( |
391 NotificationType::TAB_CONTENT_SETTINGS_CHANGED, | 392 chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, |
392 Source<TabContents>(tab_contents()), | 393 Source<TabContents>(tab_contents()), |
393 NotificationService::NoDetails()); | 394 NotificationService::NoDetails()); |
394 } | 395 } |
395 | 396 |
396 void TabSpecificContentSettings::GeolocationDidNavigate( | 397 void TabSpecificContentSettings::GeolocationDidNavigate( |
397 const content::LoadCommittedDetails& details) { | 398 const content::LoadCommittedDetails& details) { |
398 geolocation_settings_state_.DidNavigate(details); | 399 geolocation_settings_state_.DidNavigate(details); |
399 } | 400 } |
400 | 401 |
401 void TabSpecificContentSettings::ClearGeolocationContentSettings() { | 402 void TabSpecificContentSettings::ClearGeolocationContentSettings() { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 return; | 450 return; |
450 | 451 |
451 // If we're displaying a network error page do not reset the content | 452 // If we're displaying a network error page do not reset the content |
452 // settings delegate's cookies so the user has a chance to modify cookie | 453 // settings delegate's cookies so the user has a chance to modify cookie |
453 // settings. | 454 // settings. |
454 if (!is_error_page) | 455 if (!is_error_page) |
455 ClearCookieSpecificContentSettings(); | 456 ClearCookieSpecificContentSettings(); |
456 ClearGeolocationContentSettings(); | 457 ClearGeolocationContentSettings(); |
457 } | 458 } |
458 | 459 |
459 void TabSpecificContentSettings::Observe(NotificationType type, | 460 void TabSpecificContentSettings::Observe(int type, |
460 const NotificationSource& source, | 461 const NotificationSource& source, |
461 const NotificationDetails& details) { | 462 const NotificationDetails& details) { |
462 DCHECK(type.value == NotificationType::CONTENT_SETTINGS_CHANGED); | 463 DCHECK(type == chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED); |
463 | 464 |
464 Details<const ContentSettingsDetails> settings_details(details); | 465 Details<const ContentSettingsDetails> settings_details(details); |
465 const NavigationController& controller = tab_contents()->controller(); | 466 const NavigationController& controller = tab_contents()->controller(); |
466 NavigationEntry* entry = controller.GetActiveEntry(); | 467 NavigationEntry* entry = controller.GetActiveEntry(); |
467 GURL entry_url; | 468 GURL entry_url; |
468 if (entry) | 469 if (entry) |
469 entry_url = entry->url(); | 470 entry_url = entry->url(); |
470 if (settings_details.ptr()->update_all() || | 471 if (settings_details.ptr()->update_all() || |
471 // The active NavigationEntry is the URL in the URL field of a tab. | 472 // The active NavigationEntry is the URL in the URL field of a tab. |
472 // Currently this should be matched by the |primary_pattern|. | 473 // Currently this should be matched by the |primary_pattern|. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 TabSpecificContentSettings::LocalSharedObjectsContainer::GetCookiesTreeModel() { | 518 TabSpecificContentSettings::LocalSharedObjectsContainer::GetCookiesTreeModel() { |
518 return new CookiesTreeModel(cookies_, | 519 return new CookiesTreeModel(cookies_, |
519 databases_->Clone(), | 520 databases_->Clone(), |
520 local_storages_->Clone(), | 521 local_storages_->Clone(), |
521 session_storages_->Clone(), | 522 session_storages_->Clone(), |
522 appcaches_->Clone(), | 523 appcaches_->Clone(), |
523 indexed_dbs_->Clone(), | 524 indexed_dbs_->Clone(), |
524 file_systems_->Clone(), | 525 file_systems_->Clone(), |
525 true); | 526 true); |
526 } | 527 } |
OLD | NEW |