blob: 7aa9701610c4646c9081f1522fcff78f8971fee7 [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
Florian Jacky11f98102025-05-20 15:57:189#include "base/functional/callback_helpers.h"
Bret Sepulveda5327d8b52021-07-21 17:44:2310#include "build/build_config.h"
[email protected]af39f002014-08-22 10:18:1811#include "chrome/grit/generated_resources.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2012#include "components/content_settings/core/common/content_settings_types.h"
13#include "components/permissions/permission_request_data.h"
Bret Sepulveda362cce42021-01-13 18:47:5414#include "components/permissions/request_type.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2015#include "components/permissions/resolvers/content_setting_permission_resolver.h"
[email protected]87ac1562014-02-26 17:50:4616#include "ui/base/l10n/l10n_util.h"
17
Xiaohan Wangab5fb912022-01-12 19:21:4818#if BUILDFLAG(IS_ANDROID)
timloh178801f2017-06-13 04:17:5819#include "chrome/browser/android/android_theme_resources.h"
Mugdha Lakhani6b39f5fd2018-11-23 11:19:0120#include "components/url_formatter/elide_url.h"
21#include "url/origin.h"
timloh178801f2017-06-13 04:17:5822#else
Mugdha Lakhanib6762162020-03-30 10:23:2523#include "components/vector_icons/vector_icons.h"
timloh178801f2017-06-13 04:17:5824#endif
25
[email protected]87ac1562014-02-26 17:50:4626DownloadPermissionRequest::DownloadPermissionRequest(
Min Qin357184a2019-06-25 16:31:4427 base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host,
Bret Sepulveda5327d8b52021-07-21 17:44:2328 const url::Origin& requesting_origin)
29 : PermissionRequest(
Florian Jacky7f3e3ca1b2025-05-05 16:19:2030 std::make_unique<permissions::PermissionRequestData>(
31 std::make_unique<permissions::ContentSettingPermissionResolver>(
32 permissions::RequestType::kMultipleDownloads),
33 /*user_gesture=*/false,
34 requesting_origin.GetURL()),
Illia Klimove406ecc12022-11-22 15:53:2935 base::BindRepeating(&DownloadPermissionRequest::PermissionDecided,
Florian Jacky11f98102025-05-20 15:57:1836 base::Unretained(this))),
Bret Sepulveda5327d8b52021-07-21 17:44:2337 host_(host),
38 requesting_origin_(requesting_origin) {}
[email protected]87ac1562014-02-26 17:50:4639
Sorin Jianu057cba6a2024-11-29 05:49:3440DownloadPermissionRequest::~DownloadPermissionRequest() = default;
[email protected]87ac1562014-02-26 17:50:4641
Florian Jacky7f3e3ca1b2025-05-05 16:19:2042void DownloadPermissionRequest::PermissionDecided(
43 ContentSetting result,
44 bool is_one_time,
45 bool is_final_decision,
Chris Fredrickson173060c862025-05-14 14:23:0146 const permissions::PermissionRequestData& request_data) {
Ravjit Singh Uppalc73b5a62020-11-13 01:38:5247 DCHECK(!is_one_time);
Illia Klimove406ecc12022-11-22 15:53:2948 DCHECK(is_final_decision);
Bret Sepulveda5327d8b52021-07-21 17:44:2349 if (!host_)
50 return;
51
52 // This may invalidate |host_|.
53 if (result == ContentSetting::CONTENT_SETTING_ALLOW) {
54 host_->Accept(requesting_origin_);
55 } else if (result == ContentSetting::CONTENT_SETTING_BLOCK) {
56 host_->Cancel(requesting_origin_);
57 } else {
58 DCHECK_EQ(CONTENT_SETTING_DEFAULT, result);
59 host_->CancelOnce(requesting_origin_);
[email protected]87ac1562014-02-26 17:50:4660 }
61}