blob: 67a486d6c53116d64265c089c9ab05f990e918e5 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2014 The Chromium Authors
[email protected]87ac1562014-02-26 17:50:462// 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/download/download_permission_request.h"
6
Florian Jacky7f3e3ca1b2025-05-05 16:19:207#include <memory>
8
Bret Sepulveda5327d8b52021-07-21 17:44:239#include "build/build_config.h"
[email protected]af39f002014-08-22 10:18:1810#include "chrome/grit/generated_resources.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2011#include "components/content_settings/core/common/content_settings_types.h"
12#include "components/permissions/permission_request_data.h"
Bret Sepulveda362cce42021-01-13 18:47:5413#include "components/permissions/request_type.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2014#include "components/permissions/resolvers/content_setting_permission_resolver.h"
[email protected]87ac1562014-02-26 17:50:4615#include "ui/base/l10n/l10n_util.h"
16
Xiaohan Wangab5fb912022-01-12 19:21:4817#if BUILDFLAG(IS_ANDROID)
timloh178801f2017-06-13 04:17:5818#include "chrome/browser/android/android_theme_resources.h"
Mugdha Lakhani6b39f5fd2018-11-23 11:19:0119#include "components/url_formatter/elide_url.h"
20#include "url/origin.h"
timloh178801f2017-06-13 04:17:5821#else
Mugdha Lakhanib6762162020-03-30 10:23:2522#include "components/vector_icons/vector_icons.h"
timloh178801f2017-06-13 04:17:5823#endif
24
[email protected]87ac1562014-02-26 17:50:4625DownloadPermissionRequest::DownloadPermissionRequest(
Min Qin357184a2019-06-25 16:31:4426 base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host,
Bret Sepulveda5327d8b52021-07-21 17:44:2327 const url::Origin& requesting_origin)
28 : PermissionRequest(
Florian Jacky7f3e3ca1b2025-05-05 16:19:2029 std::make_unique<permissions::PermissionRequestData>(
30 std::make_unique<permissions::ContentSettingPermissionResolver>(
31 permissions::RequestType::kMultipleDownloads),
32 /*user_gesture=*/false,
33 requesting_origin.GetURL()),
Illia Klimove406ecc12022-11-22 15:53:2934 base::BindRepeating(&DownloadPermissionRequest::PermissionDecided,
35 base::Unretained(this)),
Bret Sepulveda5327d8b52021-07-21 17:44:2336 base::BindOnce(&DownloadPermissionRequest::DeleteRequest,
37 base::Unretained(this))),
38 host_(host),
39 requesting_origin_(requesting_origin) {}
[email protected]87ac1562014-02-26 17:50:4640
Sorin Jianu057cba6a2024-11-29 05:49:3441DownloadPermissionRequest::~DownloadPermissionRequest() = default;
[email protected]87ac1562014-02-26 17:50:4642
Florian Jacky7f3e3ca1b2025-05-05 16:19:2043void DownloadPermissionRequest::PermissionDecided(
44 ContentSetting result,
45 bool is_one_time,
46 bool is_final_decision,
Chris Fredrickson173060c862025-05-14 14:23:0147 const permissions::PermissionRequestData& request_data) {
Ravjit Singh Uppalc73b5a62020-11-13 01:38:5248 DCHECK(!is_one_time);
Illia Klimove406ecc12022-11-22 15:53:2949 DCHECK(is_final_decision);
Bret Sepulveda5327d8b52021-07-21 17:44:2350 if (!host_)
51 return;
52
53 // This may invalidate |host_|.
54 if (result == ContentSetting::CONTENT_SETTING_ALLOW) {
55 host_->Accept(requesting_origin_);
56 } else if (result == ContentSetting::CONTENT_SETTING_BLOCK) {
57 host_->Cancel(requesting_origin_);
58 } else {
59 DCHECK_EQ(CONTENT_SETTING_DEFAULT, result);
60 host_->CancelOnce(requesting_origin_);
[email protected]87ac1562014-02-26 17:50:4661 }
62}
63
Bret Sepulveda5327d8b52021-07-21 17:44:2364void DownloadPermissionRequest::DeleteRequest() {
[email protected]87ac1562014-02-26 17:50:4665 delete this;
66}