1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/browser/download/download_request_handle.h"
6
7#include "base/bind.h"
8#include "base/strings/stringprintf.h"
9#include "content/browser/renderer_host/render_view_host_impl.h"
10#include "content/browser/web_contents/web_contents_impl.h"
11#include "content/public/browser/browser_context.h"
12#include "content/public/browser/browser_thread.h"
13
14namespace content {
15
16DownloadRequestHandle::~DownloadRequestHandle() {
17}
18
19DownloadRequestHandle::DownloadRequestHandle()
20    : child_id_(-1),
21      render_view_id_(-1),
22      request_id_(-1) {
23}
24
25DownloadRequestHandle::DownloadRequestHandle(
26    const base::WeakPtr<DownloadResourceHandler>& handler,
27    int child_id,
28    int render_view_id,
29    int request_id)
30    : handler_(handler),
31      child_id_(child_id),
32      render_view_id_(render_view_id),
33      request_id_(request_id) {
34  DCHECK(handler_.get());
35}
36
37WebContents* DownloadRequestHandle::GetWebContents() const {
38  RenderViewHostImpl* render_view_host =
39      RenderViewHostImpl::FromID(child_id_, render_view_id_);
40  if (!render_view_host)
41    return NULL;
42
43  return render_view_host->GetDelegate()->GetAsWebContents();
44}
45
46DownloadManager* DownloadRequestHandle::GetDownloadManager() const {
47  RenderViewHostImpl* rvh = RenderViewHostImpl::FromID(
48      child_id_, render_view_id_);
49  if (rvh == NULL)
50    return NULL;
51  RenderProcessHost* rph = rvh->GetProcess();
52  if (rph == NULL)
53    return NULL;
54  BrowserContext* context = rph->GetBrowserContext();
55  if (context == NULL)
56    return NULL;
57  return BrowserContext::GetDownloadManager(context);
58}
59
60void DownloadRequestHandle::PauseRequest() const {
61  BrowserThread::PostTask(
62      BrowserThread::IO, FROM_HERE,
63      base::Bind(&DownloadResourceHandler::PauseRequest, handler_));
64}
65
66void DownloadRequestHandle::ResumeRequest() const {
67  BrowserThread::PostTask(
68      BrowserThread::IO, FROM_HERE,
69      base::Bind(&DownloadResourceHandler::ResumeRequest, handler_));
70}
71
72void DownloadRequestHandle::CancelRequest() const {
73  BrowserThread::PostTask(
74      BrowserThread::IO, FROM_HERE,
75      base::Bind(&DownloadResourceHandler::CancelRequest, handler_));
76}
77
78std::string DownloadRequestHandle::DebugString() const {
79  return base::StringPrintf("{"
80                            " child_id = %d"
81                            " render_view_id = %d"
82                            " request_id = %d"
83                            "}",
84                            child_id_,
85                            render_view_id_,
86                            request_id_);
87}
88
89}  // namespace content
90