blob: 5abcd79fdc929ee9470319fcfb8ccedcace2e8cc [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"
Florian Jackyd02023d2025-06-18 20:21:3113#include "components/permissions/permission_decision.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2014#include "components/permissions/permission_request_data.h"
Bret Sepulveda362cce42021-01-13 18:47:5415#include "components/permissions/request_type.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2016#include "components/permissions/resolvers/content_setting_permission_resolver.h"
[email protected]87ac1562014-02-26 17:50:4617#include "ui/base/l10n/l10n_util.h"
18
Xiaohan Wangab5fb912022-01-12 19:21:4819#if BUILDFLAG(IS_ANDROID)
timloh178801f2017-06-13 04:17:5820#include "chrome/browser/android/android_theme_resources.h"
Mugdha Lakhani6b39f5fd2018-11-23 11:19:0121#include "components/url_formatter/elide_url.h"
22#include "url/origin.h"
timloh178801f2017-06-13 04:17:5823#else
Mugdha Lakhanib6762162020-03-30 10:23:2524#include "components/vector_icons/vector_icons.h"
timloh178801f2017-06-13 04:17:5825#endif
26
[email protected]87ac1562014-02-26 17:50:4627DownloadPermissionRequest::DownloadPermissionRequest(
Min Qin357184a2019-06-25 16:31:4428 base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host,
Bret Sepulveda5327d8b52021-07-21 17:44:2329 const url::Origin& requesting_origin)
30 : PermissionRequest(
Florian Jacky7f3e3ca1b2025-05-05 16:19:2031 std::make_unique<permissions::PermissionRequestData>(
32 std::make_unique<permissions::ContentSettingPermissionResolver>(
33 permissions::RequestType::kMultipleDownloads),
34 /*user_gesture=*/false,
35 requesting_origin.GetURL()),
Illia Klimove406ecc12022-11-22 15:53:2936 base::BindRepeating(&DownloadPermissionRequest::PermissionDecided,
Florian Jacky11f98102025-05-20 15:57:1837 base::Unretained(this))),
Bret Sepulveda5327d8b52021-07-21 17:44:2338 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(
Florian Jackyd02023d2025-06-18 20:21:3144 PermissionDecision decision,
Florian Jacky7f3e3ca1b2025-05-05 16:19:2045 bool is_final_decision,
Chris Fredrickson173060c862025-05-14 14:23:0146 const permissions::PermissionRequestData& request_data) {
Florian Jacky2cb5ada2025-06-18 20:21:5047 DCHECK(decision != PermissionDecision::kAllowThisTime);
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_|.
Florian Jackyd02023d2025-06-18 20:21:3153 if (decision == PermissionDecision::kAllow) {
Bret Sepulveda5327d8b52021-07-21 17:44:2354 host_->Accept(requesting_origin_);
Florian Jackyd02023d2025-06-18 20:21:3155 } else if (decision == PermissionDecision::kDeny) {
Bret Sepulveda5327d8b52021-07-21 17:44:2356 host_->Cancel(requesting_origin_);
57 } else {
Bret Sepulveda5327d8b52021-07-21 17:44:2358 host_->CancelOnce(requesting_origin_);
[email protected]87ac1562014-02-26 17:50:4659 }
60}