network_delegate.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/network_delegate.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/load_flags.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NetworkDelegate::NotifyBeforeURLRequest(
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLRequest* request, const CompletionCallback& callback,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL* new_url) {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(request);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!callback.is_null());
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnBeforeURLRequest(request, callback, new_url);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NetworkDelegate::NotifyBeforeSendHeaders(
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLRequest* request, const CompletionCallback& callback,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    HttpRequestHeaders* headers) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(headers);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!callback.is_null());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnBeforeSendHeaders(request, callback, headers);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifySendHeaders(URLRequest* request,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const HttpRequestHeaders& headers) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnSendHeaders(request, headers);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NetworkDelegate::NotifyHeadersReceived(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLRequest* request,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CompletionCallback& callback,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const HttpResponseHeaders* original_response_headers,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<HttpResponseHeaders>* override_response_headers) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(original_response_headers);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!callback.is_null());
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnHeadersReceived(request, callback, original_response_headers,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           override_response_headers);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyResponseStarted(URLRequest* request) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(request);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnResponseStarted(request);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyRawBytesRead(const URLRequest& request,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         int bytes_read) {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnRawBytesRead(request, bytes_read);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyBeforeRedirect(URLRequest* request,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           const GURL& new_location) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(request);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnBeforeRedirect(request, new_location);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyCompleted(URLRequest* request, bool started) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(request);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnCompleted(request, started);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyURLRequestDestroyed(URLRequest* request) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(request);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnURLRequestDestroyed(request);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyPACScriptError(int line_number,
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                           const base::string16& error) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnPACScriptError(line_number, error);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetworkDelegate::AuthRequiredResponse NetworkDelegate::NotifyAuthRequired(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLRequest* request,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AuthChallengeInfo& auth_info,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AuthCallback& callback,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AuthCredentials* credentials) {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnAuthRequired(request, auth_info, callback, credentials);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkDelegate::CanGetCookies(const URLRequest& request,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const CookieList& cookie_list) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!(request.load_flags() & net::LOAD_DO_NOT_SEND_COOKIES));
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnCanGetCookies(request, cookie_list);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)bool NetworkDelegate::CanSetCookie(const URLRequest& request,
103b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                   const std::string& cookie_line,
104b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                   CookieOptions* options) {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!(request.load_flags() & net::LOAD_DO_NOT_SAVE_COOKIES));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnCanSetCookie(request, cookie_line, options);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkDelegate::CanAccessFile(const URLRequest& request,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                    const base::FilePath& path) const {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnCanAccessFile(request, path);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkDelegate::CanThrottleRequest(const URLRequest& request) const {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnCanThrottleRequest(request);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool NetworkDelegate::CanEnablePrivacyMode(
12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const GURL& url,
12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const GURL& first_party_for_cookies) const {
12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DCHECK(CalledOnValidThread());
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return OnCanEnablePrivacyMode(url, first_party_for_cookies);
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool NetworkDelegate::OnCanEnablePrivacyMode(
12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const GURL& url,
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const GURL& first_party_for_cookies) const {
13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Default implementation disables privacy mode.
13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return false;
13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NetworkDelegate::NotifyBeforeSocketStreamConnect(
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketStream* socket,
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CompletionCallback& callback) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(socket);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!callback.is_null());
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return OnBeforeSocketStreamConnect(socket, callback);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkDelegate::NotifyRequestWaitStateChange(const URLRequest& request,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   RequestWaitState state) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnRequestWaitStateChange(request, state);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
151