| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 <string> | 5 #include <string> | 
| 6 | 6 | 
| 7 #include "chrome/browser/renderer_host/cross_site_resource_handler.h" | 7 #include "chrome/browser/renderer_host/cross_site_resource_handler.h" | 
| 8 | 8 | 
| 9 #include "base/logging.h" | 9 #include "base/logging.h" | 
| 10 #include "base/message_loop.h" | 10 #include "chrome/browser/chrome_thread.h" | 
| 11 #include "chrome/browser/renderer_host/render_view_host.h" | 11 #include "chrome/browser/renderer_host/render_view_host.h" | 
| 12 #include "chrome/browser/renderer_host/render_view_host_delegate.h" | 12 #include "chrome/browser/renderer_host/render_view_host_delegate.h" | 
| 13 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" | 13 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" | 
| 14 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" | 
| 15 | 15 | 
| 16 namespace { | 16 namespace { | 
| 17 | 17 | 
| 18 // Task to notify the TabContents that a cross-site response has begun, so that | 18 // Task to notify the TabContents that a cross-site response has begun, so that | 
| 19 // TabContents can tell the old page to run its onunload handler. | 19 // TabContents can tell the old page to run its onunload handler. | 
| 20 class CrossSiteNotifyTask : public Task { | 20 class CrossSiteNotifyTask : public Task { | 
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 154       // We've already completed the transition, so just pass it through. | 154       // We've already completed the transition, so just pass it through. | 
| 155       return next_handler_->OnResponseCompleted(request_id, status, | 155       return next_handler_->OnResponseCompleted(request_id, status, | 
| 156                                                 security_info); | 156                                                 security_info); | 
| 157     } else { | 157     } else { | 
| 158       // Some types of failures will call OnResponseCompleted without calling | 158       // Some types of failures will call OnResponseCompleted without calling | 
| 159       // CrossSiteResourceHandler::OnResponseStarted. | 159       // CrossSiteResourceHandler::OnResponseStarted. | 
| 160       if (status.status() == URLRequestStatus::CANCELED) { | 160       if (status.status() == URLRequestStatus::CANCELED) { | 
| 161         // Here the request was canceled, which happens when selecting "take me | 161         // Here the request was canceled, which happens when selecting "take me | 
| 162         // back" from an interstitial.  Nothing to do but cancel the pending | 162         // back" from an interstitial.  Nothing to do but cancel the pending | 
| 163         // render view host. | 163         // render view host. | 
| 164         CancelPendingRenderViewTask* task = | 164         ChromeThread::PostTask( | 
| 165             new CancelPendingRenderViewTask(render_process_host_id_, | 165             ChromeThread::UI, FROM_HERE, | 
| 166                                             render_view_id_); | 166             new CancelPendingRenderViewTask( | 
| 167         rdh_->ui_loop()->PostTask(FROM_HERE, task); | 167                 render_process_host_id_, render_view_id_)); | 
| 168         return next_handler_->OnResponseCompleted(request_id, status, | 168         return next_handler_->OnResponseCompleted(request_id, status, | 
| 169                                                   security_info); | 169                                                   security_info); | 
| 170       } else { | 170       } else { | 
| 171         // An error occured, we should wait now for the cross-site transition, | 171         // An error occured, we should wait now for the cross-site transition, | 
| 172         // so that the error message (e.g., 404) can be displayed to the user. | 172         // so that the error message (e.g., 404) can be displayed to the user. | 
| 173         // Also continue with the logic below to remember that we completed | 173         // Also continue with the logic below to remember that we completed | 
| 174         // during the cross-site transition. | 174         // during the cross-site transition. | 
| 175         ResourceDispatcherHost::GlobalRequestID global_id( | 175         ResourceDispatcherHost::GlobalRequestID global_id( | 
| 176             render_process_host_id_, request_id); | 176             render_process_host_id_, request_id); | 
| 177         StartCrossSiteTransition(request_id, NULL, global_id); | 177         StartCrossSiteTransition(request_id, NULL, global_id); | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 259     // renderer is ready. | 259     // renderer is ready. | 
| 260     rdh_->PauseRequest(render_process_host_id_, request_id, true); | 260     rdh_->PauseRequest(render_process_host_id_, request_id, true); | 
| 261   } | 261   } | 
| 262   // If our OnResponseStarted wasn't called, then we're being called by | 262   // If our OnResponseStarted wasn't called, then we're being called by | 
| 263   // OnResponseCompleted after a failure.  We don't need to pause, because | 263   // OnResponseCompleted after a failure.  We don't need to pause, because | 
| 264   // there will be no reads. | 264   // there will be no reads. | 
| 265 | 265 | 
| 266   // Tell the tab responsible for this request that a cross-site response is | 266   // Tell the tab responsible for this request that a cross-site response is | 
| 267   // starting, so that it can tell its old renderer to run its onunload | 267   // starting, so that it can tell its old renderer to run its onunload | 
| 268   // handler now.  We will wait to hear the corresponding ClosePage_ACK. | 268   // handler now.  We will wait to hear the corresponding ClosePage_ACK. | 
| 269   CrossSiteNotifyTask* task = | 269   ChromeThread::PostTask( | 
| 270       new CrossSiteNotifyTask(render_process_host_id_, | 270       ChromeThread::UI, FROM_HERE, | 
| 271                               render_view_id_, | 271       new CrossSiteNotifyTask( | 
| 272                               request_id); | 272           render_process_host_id_, render_view_id_, request_id)); | 
| 273   rdh_->ui_loop()->PostTask(FROM_HERE, task); |  | 
| 274 } | 273 } | 
| OLD | NEW | 
|---|