| Index: chrome/browser/ssl/ssl_error_handler.cc
|
| ===================================================================
|
| --- chrome/browser/ssl/ssl_error_handler.cc (revision 87796)
|
| +++ chrome/browser/ssl/ssl_error_handler.cc (working copy)
|
| @@ -1,185 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/ssl/ssl_error_handler.h"
|
| -
|
| -#include "chrome/browser/ssl/ssl_cert_error_handler.h"
|
| -#include "chrome/browser/tab_contents/tab_util.h"
|
| -#include "content/browser/browser_thread.h"
|
| -#include "content/browser/renderer_host/resource_dispatcher_host.h"
|
| -#include "content/browser/renderer_host/resource_dispatcher_host_request_info.h"
|
| -#include "content/browser/tab_contents/tab_contents.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/url_request/url_request.h"
|
| -
|
| -SSLErrorHandler::SSLErrorHandler(ResourceDispatcherHost* rdh,
|
| - net::URLRequest* request,
|
| - ResourceType::Type resource_type)
|
| - : manager_(NULL),
|
| - request_id_(0, 0),
|
| - resource_dispatcher_host_(rdh),
|
| - request_url_(request->url()),
|
| - resource_type_(resource_type),
|
| - request_has_been_notified_(false) {
|
| - DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - ResourceDispatcherHostRequestInfo* info =
|
| - ResourceDispatcherHost::InfoForRequest(request);
|
| - request_id_.child_id = info->child_id();
|
| - request_id_.request_id = info->request_id();
|
| -
|
| - if (!ResourceDispatcherHost::RenderViewForRequest(request,
|
| - &render_process_host_id_,
|
| - &tab_contents_id_))
|
| - NOTREACHED();
|
| -
|
| - // This makes sure we don't disappear on the IO thread until we've given an
|
| - // answer to the net::URLRequest.
|
| - //
|
| - // Release in CompleteCancelRequest, CompleteContinueRequest, or
|
| - // CompleteTakeNoAction.
|
| - AddRef();
|
| -}
|
| -
|
| -SSLErrorHandler::~SSLErrorHandler() {}
|
| -
|
| -void SSLErrorHandler::OnDispatchFailed() {
|
| - TakeNoAction();
|
| -}
|
| -
|
| -void SSLErrorHandler::OnDispatched() {
|
| - TakeNoAction();
|
| -}
|
| -
|
| -SSLCertErrorHandler* SSLErrorHandler::AsSSLCertErrorHandler() {
|
| - return NULL;
|
| -}
|
| -
|
| -void SSLErrorHandler::Dispatch() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - TabContents* tab_contents = GetTabContents();
|
| - if (!tab_contents) {
|
| - // We arrived on the UI thread, but the tab we're looking for is no longer
|
| - // here.
|
| - OnDispatchFailed();
|
| - return;
|
| - }
|
| -
|
| - // Hand ourselves off to the SSLManager.
|
| - manager_ = tab_contents->controller().ssl_manager();
|
| - OnDispatched();
|
| -}
|
| -
|
| -TabContents* SSLErrorHandler::GetTabContents() {
|
| - return tab_util::GetTabContentsByID(render_process_host_id_,
|
| - tab_contents_id_);
|
| -}
|
| -
|
| -void SSLErrorHandler::CancelRequest() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - // We need to complete this task on the IO thread.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &SSLErrorHandler::CompleteCancelRequest, net::ERR_ABORTED));
|
| -}
|
| -
|
| -void SSLErrorHandler::DenyRequest() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - // We need to complete this task on the IO thread.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &SSLErrorHandler::CompleteCancelRequest,
|
| - net::ERR_INSECURE_RESPONSE));
|
| -}
|
| -
|
| -void SSLErrorHandler::ContinueRequest() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - // We need to complete this task on the IO thread.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - NewRunnableMethod(this, &SSLErrorHandler::CompleteContinueRequest));
|
| -}
|
| -
|
| -void SSLErrorHandler::TakeNoAction() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - // We need to complete this task on the IO thread.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - NewRunnableMethod(this, &SSLErrorHandler::CompleteTakeNoAction));
|
| -}
|
| -
|
| -void SSLErrorHandler::CompleteCancelRequest(int error) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| -
|
| - // It is important that we notify the net::URLRequest only once. If we try
|
| - // to notify the request twice, it may no longer exist and |this| might have
|
| - // already have been deleted.
|
| - DCHECK(!request_has_been_notified_);
|
| - if (request_has_been_notified_)
|
| - return;
|
| -
|
| - net::URLRequest* request =
|
| - resource_dispatcher_host_->GetURLRequest(request_id_);
|
| - if (request) {
|
| - // The request can be NULL if it was cancelled by the renderer (as the
|
| - // result of the user navigating to a new page from the location bar).
|
| - DVLOG(1) << "CompleteCancelRequest() url: " << request->url().spec();
|
| - SSLCertErrorHandler* cert_error = AsSSLCertErrorHandler();
|
| - if (cert_error)
|
| - request->SimulateSSLError(error, cert_error->ssl_info());
|
| - else
|
| - request->SimulateError(error);
|
| - }
|
| - request_has_been_notified_ = true;
|
| -
|
| - // We're done with this object on the IO thread.
|
| - Release();
|
| -}
|
| -
|
| -void SSLErrorHandler::CompleteContinueRequest() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| -
|
| - // It is important that we notify the net::URLRequest only once. If we try to
|
| - // notify the request twice, it may no longer exist and |this| might have
|
| - // already have been deleted.
|
| - DCHECK(!request_has_been_notified_);
|
| - if (request_has_been_notified_)
|
| - return;
|
| -
|
| - net::URLRequest* request =
|
| - resource_dispatcher_host_->GetURLRequest(request_id_);
|
| - if (request) {
|
| - // The request can be NULL if it was cancelled by the renderer (as the
|
| - // result of the user navigating to a new page from the location bar).
|
| - DVLOG(1) << "CompleteContinueRequest() url: " << request->url().spec();
|
| - request->ContinueDespiteLastError();
|
| - }
|
| - request_has_been_notified_ = true;
|
| -
|
| - // We're done with this object on the IO thread.
|
| - Release();
|
| -}
|
| -
|
| -void SSLErrorHandler::CompleteTakeNoAction() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| -
|
| - // It is important that we notify the net::URLRequest only once. If we try to
|
| - // notify the request twice, it may no longer exist and |this| might have
|
| - // already have been deleted.
|
| - DCHECK(!request_has_been_notified_);
|
| - if (request_has_been_notified_)
|
| - return;
|
| -
|
| - request_has_been_notified_ = true;
|
| -
|
| - // We're done with this object on the IO thread.
|
| - Release();
|
| -}
|
|
|