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 "content/browser/download/download_request_handle.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/web_contents_impl.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadRequestHandle::~DownloadRequestHandle() { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadRequestHandle::DownloadRequestHandle() 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : child_id_(-1), 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_id_(-1), 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id_(-1) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadRequestHandle::DownloadRequestHandle( 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::WeakPtr<DownloadResourceHandler>& handler, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_id, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int request_id) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : handler_(handler), 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_id_(child_id), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_id_(render_view_id), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id_(request_id) { 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(handler_.get()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContents* DownloadRequestHandle::GetWebContents() const { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* render_view_host = 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl::FromID(child_id_, render_view_id_); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!render_view_host) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return render_view_host->GetDelegate()->GetAsWebContents(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadManager* DownloadRequestHandle::GetDownloadManager() const { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* rvh = RenderViewHostImpl::FromID( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_id_, render_view_id_); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rvh == NULL) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHost* rph = rvh->GetProcess(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rph == NULL) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserContext* context = rph->GetBrowserContext(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (context == NULL) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserContext::GetDownloadManager(context); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadRequestHandle::PauseRequest() const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&DownloadResourceHandler::PauseRequest, handler_)); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadRequestHandle::ResumeRequest() const { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&DownloadResourceHandler::ResumeRequest, handler_)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadRequestHandle::CancelRequest() const { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&DownloadResourceHandler::CancelRequest, handler_)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string DownloadRequestHandle::DebugString() const { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("{" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " child_id = %d" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " render_view_id = %d" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " request_id = %d" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}", 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_id_, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_id_, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id_); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 90