Home | History | Annotate | Download | only in android
      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 "chrome/browser/android/intercept_download_resource_throttle.h"
      6 
      7 #include "content/public/browser/android/download_controller_android.h"
      8 #include "content/public/browser/resource_controller.h"
      9 #include "net/http/http_request_headers.h"
     10 #include "net/url_request/url_request.h"
     11 
     12 namespace chrome {
     13 
     14 InterceptDownloadResourceThrottle::InterceptDownloadResourceThrottle(
     15     net::URLRequest* request,
     16     int render_process_id,
     17     int render_view_id,
     18     int request_id)
     19     : request_(request),
     20       render_process_id_(render_process_id),
     21       render_view_id_(render_view_id),
     22       request_id_(request_id) {
     23 }
     24 
     25 InterceptDownloadResourceThrottle::~InterceptDownloadResourceThrottle() {
     26 }
     27 
     28 void InterceptDownloadResourceThrottle::WillStartRequest(bool* defer) {
     29   ProcessDownloadRequest();
     30 }
     31 
     32 void InterceptDownloadResourceThrottle::WillProcessResponse(bool* defer) {
     33   ProcessDownloadRequest();
     34 }
     35 
     36 void InterceptDownloadResourceThrottle::ProcessDownloadRequest() {
     37   if (request_->method() != net::HttpRequestHeaders::kGetMethod ||
     38       request_->response_info().did_use_http_auth)
     39     return;
     40 
     41   if (request_->url_chain().empty())
     42     return;
     43 
     44   GURL url = request_->url_chain().back();
     45   if (!url.SchemeIs("http") && !url.SchemeIs("https"))
     46     return;
     47 
     48   content::DownloadControllerAndroid::Get()->CreateGETDownload(
     49       render_process_id_, render_view_id_, request_id_);
     50   controller()->Cancel();
     51 }
     52 
     53 }  // namespace
     54