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