Index: chrome/browser/net/chrome_network_delegate.cc |
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc |
index 595ad4b005ce278c89deea5cefeefd4b7206709f..f0b5a624ee850acb4312905e53204859d584fad9 100644 |
--- a/chrome/browser/net/chrome_network_delegate.cc |
+++ b/chrome/browser/net/chrome_network_delegate.cc |
@@ -5,6 +5,8 @@ |
#include "chrome/browser/net/chrome_network_delegate.h" |
#include "base/logging.h" |
+#include "chrome/browser/content_settings/cookie_settings.h" |
+#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
#include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
#include "chrome/browser/extensions/api/webrequest/webrequest_api.h" |
#include "chrome/browser/extensions/extension_event_router_forwarder.h" |
@@ -14,6 +16,8 @@ |
#include "chrome/browser/task_manager/task_manager.h" |
#include "chrome/common/pref_names.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/common/url_request_user_data.h" |
+#include "net/base/cookie_monster.h" |
#include "net/base/host_port_pair.h" |
#include "net/base/net_errors.h" |
#include "net/base/net_log.h" |
@@ -52,14 +56,17 @@ ChromeNetworkDelegate::ChromeNetworkDelegate( |
ExtensionInfoMap* extension_info_map, |
const policy::URLBlacklistManager* url_blacklist_manager, |
void* profile, |
+ CookieSettings* cookie_settings, |
BooleanPrefMember* enable_referrers) |
: event_router_(event_router), |
profile_(profile), |
+ cookie_settings_(cookie_settings), |
extension_info_map_(extension_info_map), |
enable_referrers_(enable_referrers), |
url_blacklist_manager_(url_blacklist_manager) { |
DCHECK(event_router); |
DCHECK(enable_referrers); |
+ DCHECK(!profile || cookie_settings); |
} |
ChromeNetworkDelegate::~ChromeNetworkDelegate() {} |
@@ -183,3 +190,55 @@ ChromeNetworkDelegate::OnAuthRequired( |
profile_, extension_info_map_.get(), request, auth_info, |
callback, credentials); |
} |
+ |
+bool ChromeNetworkDelegate::CanGetCookies( |
+ const net::URLRequest* request, |
+ const net::CookieList& cookie_list) { |
+ // NULL during tests, or when we're running in the system context. |
+ if (!cookie_settings_) |
+ return true; |
+ |
+ bool allow = cookie_settings_->IsReadingCookieAllowed( |
+ request->url(), request->first_party_for_cookies()); |
michaeln
2012/03/03 18:59:37
Do we need to update appcache_update_job.cc to set
jochen (gone - plz use gerrit)
2012/03/05 08:17:37
All call-sites need to be updated, but I'd like to
jochen (gone - plz use gerrit)
2012/03/08 13:00:02
I updated this callsite anyway, because it was str
|
+ |
+ const content::URLRequestUserData* user_data = |
+ static_cast<const content::URLRequestUserData*>( |
+ request->GetUserData(content::URLRequestUserData::kUserDataKey)); |
+ if (user_data) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&TabSpecificContentSettings::CookiesRead, |
+ user_data->process_id, user_data->routing_id, |
+ request->url(), cookie_list, !allow)); |
+ } |
+ |
+ return allow; |
+} |
+ |
+bool ChromeNetworkDelegate::CanSetCookie( |
+ const net::URLRequest* request, |
+ const std::string& cookie_line, |
+ net::CookieOptions* options) { |
+ // NULL during tests, or when we're running in the system context. |
+ if (!cookie_settings_) |
+ return true; |
+ |
+ bool allow = cookie_settings_->IsSettingCookieAllowed( |
+ request->url(), request->first_party_for_cookies()); |
+ |
+ if (cookie_settings_->IsCookieSessionOnly(request->url())) |
+ options->set_force_session(); |
+ |
+ const content::URLRequestUserData* user_data = |
+ static_cast<const content::URLRequestUserData*>( |
+ request->GetUserData(content::URLRequestUserData::kUserDataKey)); |
+ if (user_data) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&TabSpecificContentSettings::CookieChanged, |
+ user_data->process_id, user_data->routing_id, |
+ request->url(), cookie_line, *options, !allow)); |
+ } |
+ |
+ return allow; |
+} |