DLP: Add class with info about confidential file

Create a DlpConfidentialFile class for passing icon and file name to
the dialog.
This class is an alternative to DlpConfidentialContent for files. The
difference between them should be in comparison methods:
DlpConfidentialContent compares elements by source urls while
DlpConfidentialFile should compare elements by file paths.

Bug: 1368651
Change-Id: Icb5f8b2d33da8302ef9586b1f248a501b1f028fb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3924803
Commit-Queue: Anna Ibatullina <[email protected]>
Reviewed-by: Aya Elsayed <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1053486}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index ae6a346c..197a108 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -5461,6 +5461,8 @@
       "chromeos/policy/dlp/dlp_clipboard_notifier.h",
       "chromeos/policy/dlp/dlp_confidential_contents.cc",
       "chromeos/policy/dlp/dlp_confidential_contents.h",
+      "chromeos/policy/dlp/dlp_confidential_file.cc",
+      "chromeos/policy/dlp/dlp_confidential_file.h",
       "chromeos/policy/dlp/dlp_content_manager.cc",
       "chromeos/policy/dlp/dlp_content_manager.h",
       "chromeos/policy/dlp/dlp_content_manager_lacros.cc",
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
index 9d847fc..0413246 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
@@ -20,7 +20,7 @@
 #include "base/ranges/algorithm.h"
 #include "chrome/browser/ash/drive/drive_integration_service.h"
 #include "chrome/browser/ash/file_manager/path_util.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_histogram_helper.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
@@ -30,7 +30,6 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chromeos/dbus/dlp/dlp_client.h"
 #include "chromeos/dbus/dlp/dlp_service.pb.h"
-#include "chromeos/ui/base/file_icon_util.h"
 #include "storage/browser/file_system/file_system_url.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h"
@@ -353,7 +352,7 @@
 
   std::vector<FileDaemonInfo> restricted_files;
   std::vector<FileDaemonInfo> warned_files;
-  DlpConfidentialContents dialog_files;
+  std::vector<DlpConfidentialFile> dialog_files;
   std::string destination_pattern;
   std::vector<std::string> warned_source_patterns;
   for (const auto& file : transferred_files) {
@@ -384,10 +383,7 @@
       warned_files.push_back(file);
       warned_source_patterns.emplace_back(source_pattern);
       if (files_action != FileAction::kDownload) {
-        dialog_files.Add(
-            // TODO(crbug.com/1357593): Pass the proper |dark_background|
-            chromeos::GetIconForPath(file.path, /*dark_background=*/false),
-            file.path.BaseName().LossyDisplayName(), GURL(file.source_url));
+        dialog_files.emplace_back(file.path);
       }
       DlpHistogramEnumeration(dlp::kFileActionWarnedUMA, files_action);
     }
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
index f138f49..e69f387 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
@@ -1065,20 +1065,14 @@
       std::make_unique<MockDlpWarnNotifier>(false);
   MockDlpWarnNotifier* mock_dlp_warn_notifier = wrapper.get();
   files_controller_->SetWarnNotifierForTesting(std::move(wrapper));
-  DlpConfidentialContents expected_contents;
+  std::vector<DlpConfidentialFile> expected_files;
 
   if (transfer_info.files_action != DlpFilesController::FileAction::kDownload) {
-    for (size_t i = 0; i < transfer_info.file_sources.size(); ++i) {
-      expected_contents.Add(
-          chromeos::GetIconForPath(
-              base::FilePath(std::string(transfer_info.file_paths[i])),
-              /*dark_background=*/false),
-          base::UTF8ToUTF16(transfer_info.file_paths[i]),
-          GURL(transfer_info.file_sources[i]));
-    }
+    for (const auto& file_path : transfer_info.file_paths)
+      expected_files.emplace_back(base::FilePath(file_path));
   }
   DlpWarnDialog::DlpWarnDialogOptions expected_dialog_options(
-      DlpWarnDialog::Restriction::kFiles, expected_contents,
+      DlpWarnDialog::Restriction::kFiles, expected_files,
       DlpRulesManager::Component::kUsb, /*destination_pattern=*/"",
       transfer_info.files_action);
 
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 3c771ce..6e51f5cc 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -702,6 +702,8 @@
     "policy/dlp/dlp_clipboard_notifier.h",
     "policy/dlp/dlp_confidential_contents.cc",
     "policy/dlp/dlp_confidential_contents.h",
+    "policy/dlp/dlp_confidential_file.cc",
+    "policy/dlp/dlp_confidential_file.h",
     "policy/dlp/dlp_content_manager.cc",
     "policy/dlp/dlp_content_manager.h",
     "policy/dlp/dlp_content_manager_observer.h",
@@ -1960,6 +1962,7 @@
     "policy/dlp/data_transfer_dlp_controller_unittest.cc",
     "policy/dlp/dlp_clipboard_notifier_unittest.cc",
     "policy/dlp/dlp_confidential_contents_unittest.cc",
+    "policy/dlp/dlp_confidential_file_unittest.cc",
     "policy/dlp/dlp_content_tab_helper_unittest.cc",
     "policy/dlp/dlp_drag_drop_notifier_unittest.cc",
     "policy/dlp/dlp_reporting_manager_test_helper.cc",
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc
index a8f3e5c..019b7f75 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc
@@ -59,11 +59,6 @@
       title(window->GetTitle()),
       url(GetWithoutRef(url)) {}
 
-DlpConfidentialContent::DlpConfidentialContent(const gfx::ImageSkia& icon,
-                                               const std::u16string& title,
-                                               const GURL& url)
-    : icon(icon), title(title), url(url) {}
-
 DlpConfidentialContent::DlpConfidentialContent(
     const DlpConfidentialContent& other) = default;
 DlpConfidentialContent& DlpConfidentialContent::operator=(
@@ -132,12 +127,6 @@
   contents_.insert(DlpConfidentialContent(window, url));
 }
 
-void DlpConfidentialContents::Add(const gfx::ImageSkia& icon,
-                                  const std::u16string& title,
-                                  const GURL& url) {
-  contents_.insert(DlpConfidentialContent(icon, title, url));
-}
-
 void DlpConfidentialContents::ClearAndAdd(content::WebContents* web_contents) {
   contents_.clear();
   Add(web_contents);
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h
index 3b9ff61..39439aa 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h
@@ -39,9 +39,6 @@
   // Constructs DlpConfidentialContent from the title and icon obtained from
   // |window|, which cannot be null and |url|.
   DlpConfidentialContent(aura::Window* window, const GURL& url);
-  DlpConfidentialContent(const gfx::ImageSkia& icon,
-                         const std::u16string& title,
-                         const GURL& url);
   DlpConfidentialContent(const DlpConfidentialContent& other);
   DlpConfidentialContent& operator=(const DlpConfidentialContent& other);
   ~DlpConfidentialContent() = default;
@@ -104,10 +101,6 @@
   void Add(content::WebContents* web_contents);
   // Same for |window| and |url| pair.
   void Add(aura::Window* window, const GURL& url);
-  // Same for |icon|, |title| and |url|.
-  void Add(const gfx::ImageSkia& icon,
-           const std::u16string& title,
-           const GURL& url);
 
   // Removes all stored confidential content, if there was any, and adds
   // |web_contents| converted to a DlpConfidentialContent.
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_file.cc b/chrome/browser/chromeos/policy/dlp/dlp_confidential_file.cc
new file mode 100644
index 0000000..de52071
--- /dev/null
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_file.cc
@@ -0,0 +1,32 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h"
+
+#include "base/files/file_path.h"
+#include "chromeos/ui/base/file_icon_util.h"
+#include "ui/gfx/image/image_skia.h"
+
+namespace policy {
+
+DlpConfidentialFile::DlpConfidentialFile(const base::FilePath& file_path)
+    :  // TODO(crbug.com/1357593): Pass the proper |dark_background|
+      icon(chromeos::GetIconForPath(file_path, /*dark_background=*/false)),
+      title(file_path.BaseName().LossyDisplayName()),
+      file_path(file_path) {}
+
+DlpConfidentialFile::DlpConfidentialFile(const DlpConfidentialFile& other) =
+    default;
+DlpConfidentialFile& DlpConfidentialFile::operator=(
+    const DlpConfidentialFile& other) = default;
+
+bool DlpConfidentialFile::operator==(const DlpConfidentialFile& other) const {
+  return file_path == other.file_path;
+}
+
+bool DlpConfidentialFile::operator!=(const DlpConfidentialFile& other) const {
+  return !(*this == other);
+}
+
+}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h b/chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h
new file mode 100644
index 0000000..4dd4ae0
--- /dev/null
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h
@@ -0,0 +1,38 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CONFIDENTIAL_FILE_H_
+#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CONFIDENTIAL_FILE_H_
+
+#include <string>
+
+#include "base/files/file_path.h"
+#include "ui/gfx/image/image_skia.h"
+
+namespace policy {
+
+// Keeps track of title and corresponding icon of a file.
+// Used to show information about confidential file to the user.
+struct DlpConfidentialFile {
+  DlpConfidentialFile() = delete;
+  explicit DlpConfidentialFile(const base::FilePath& file_path);
+  DlpConfidentialFile(const DlpConfidentialFile& other);
+  DlpConfidentialFile& operator=(const DlpConfidentialFile& other);
+  ~DlpConfidentialFile() = default;
+
+  // Files with the same file_path are considered equal.
+  bool operator==(const DlpConfidentialFile& other) const;
+  bool operator!=(const DlpConfidentialFile& other) const;
+
+  // File icon used to display in the warning dialog.
+  gfx::ImageSkia icon;
+  // File name used to display in the warning dialog.
+  std::u16string title;
+  // File path used to retrieve |icon| and |title|.
+  base::FilePath file_path;
+};
+
+}  // namespace policy
+
+#endif  // CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CONFIDENTIAL_FILE_H_
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_file_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_confidential_file_unittest.cc
new file mode 100644
index 0000000..e5380ef
--- /dev/null
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_file_unittest.cc
@@ -0,0 +1,50 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h"
+
+#include <sstream>
+#include <string>
+
+#include "base/files/file_path.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace policy {
+
+constexpr char kFilePath1[] = "test1.txt";
+constexpr char kFilePath2[] = "test2.txt";
+
+class DlpConfidentialFileTest : public testing::Test {
+ public:
+  DlpConfidentialFileTest() = default;
+  DlpConfidentialFileTest(const DlpConfidentialFileTest&) = delete;
+  DlpConfidentialFileTest& operator=(const DlpConfidentialFileTest&) = delete;
+  ~DlpConfidentialFileTest() override = default;
+};
+
+TEST_F(DlpConfidentialFileTest, ComparisonWithDifferentPaths) {
+  DlpConfidentialFile file1 = DlpConfidentialFile(base::FilePath(kFilePath1));
+  DlpConfidentialFile file2 = DlpConfidentialFile(base::FilePath(kFilePath2));
+
+  EXPECT_TRUE(file1 != file2);
+}
+
+TEST_F(DlpConfidentialFileTest, ComparisonWithSamePaths) {
+  DlpConfidentialFile file1 = DlpConfidentialFile(base::FilePath(kFilePath1));
+  DlpConfidentialFile file2 = DlpConfidentialFile(base::FilePath(kFilePath1));
+
+  EXPECT_TRUE(file1 == file2);
+  EXPECT_FALSE(file1 != file2);
+}
+
+TEST_F(DlpConfidentialFileTest, ComparisonAfterAssignement) {
+  DlpConfidentialFile file1 = DlpConfidentialFile(base::FilePath(kFilePath1));
+  DlpConfidentialFile file2 = DlpConfidentialFile(base::FilePath(kFilePath2));
+  EXPECT_FALSE(file1 == file2);
+
+  file2 = file1;
+  EXPECT_TRUE(file1 == file2);
+}
+
+}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.cc b/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.cc
index 43ed0d7..781b292f 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.cc
@@ -11,6 +11,7 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/vector_icons/vector_icons.h"
@@ -163,7 +164,7 @@
       return base::ReplaceStringPlaceholders(
           l10n_util::GetPluralStringFUTF16(
               IDS_POLICY_DLP_FILES_UPLOAD_WARN_MESSAGE,
-              options.confidential_contents.GetContents().size()),
+              options.confidential_files.size()),
           base::UTF8ToUTF16(options.destination_pattern.value()),
           /*offset=*/nullptr);
     case DlpFilesController::FileAction::kTransfer:
@@ -181,7 +182,7 @@
       return base::ReplaceStringPlaceholders(
           l10n_util::GetPluralStringFUTF16(
               IDS_POLICY_DLP_FILES_TRANSFER_WARN_MESSAGE,
-              options.confidential_contents.GetContents().size()),
+              options.confidential_files.size()),
           destination,
           /*offset=*/nullptr);
   }
@@ -238,9 +239,8 @@
       return l10n_util::GetStringUTF16(IDS_POLICY_DLP_SCREEN_SHARE_WARN_TITLE);
     case DlpWarnDialog::Restriction::kFiles:
       DCHECK(options.files_action.has_value());
-      return GetTitleForFiles(
-          options.files_action.value(),
-          options.confidential_contents.GetContents().size());
+      return GetTitleForFiles(options.files_action.value(),
+                              options.confidential_files.size());
   }
 }
 
@@ -338,10 +338,10 @@
   return total_width - margin_width - image_width - spacing;
 }
 
-// Adds icon and title pair of the |confidential_content| to the container.
-void AddConfidentialContentRow(
-    views::View* container,
-    const DlpConfidentialContent& confidential_content) {
+// Adds |confidential_icon| and |confidential_title| to the container.
+void AddConfidentialContentRow(views::View* container,
+                               const gfx::ImageSkia& confidential_icon,
+                               const std::u16string& confidential_title) {
 // TODO(crbug.com/1261496) Enable dynamic UI color & theme in lacros
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   // When #dark-light-mode flag is disabled (default setting), the color mode is
@@ -359,10 +359,10 @@
   views::ImageView* icon =
       row->AddChildView(std::make_unique<views::ImageView>());
   icon->SetImageSize(gfx::Size(kFaviconSize, kFaviconSize));
-  icon->SetImage(confidential_content.icon);
+  icon->SetImage(confidential_icon);
 
-  views::Label* title = row->AddChildView(
-      std::make_unique<views::Label>(confidential_content.title));
+  views::Label* title =
+      row->AddChildView(std::make_unique<views::Label>(confidential_title));
   title->SetMultiLine(true);
   // TODO(crbug.com/682266) Remove the next line that sets the line size.
   title->SetMaximumWidth(GetMaxConfidentialTitleWidth());
@@ -379,12 +379,21 @@
 }
 
 // Adds a scrollable child view to |parent| that lists the information from
-// |confidential_contents|. No-op if no contents are given.
-void MaybeAddConfidentialContent(
+// |confidential_files| if |restriction| is kFiles, otherwise from
+// |confidential_contents|. No-op if no contents or files are given.
+void MaybeAddConfidentialRows(
     views::View* parent,
-    const DlpConfidentialContents& confidential_contents) {
-  if (confidential_contents.IsEmpty())
+    DlpWarnDialog::Restriction restriction,
+    const DlpConfidentialContents& confidential_contents,
+    const std::vector<DlpConfidentialFile>& confidential_files) {
+  if (restriction == DlpWarnDialog::Restriction::kFiles &&
+      confidential_files.empty()) {
     return;
+  }
+  if (restriction != DlpWarnDialog::Restriction::kFiles &&
+      confidential_contents.IsEmpty()) {
+    return;
+  }
 
   views::ScrollView* scroll_view =
       parent->AddChildView(std::make_unique<views::ScrollView>());
@@ -398,9 +407,17 @@
   layout->set_cross_axis_alignment(
       views::BoxLayout::CrossAxisAlignment::kStart);
 
-  for (const DlpConfidentialContent& confidential_content :
-       confidential_contents.GetContents()) {
-    AddConfidentialContentRow(container, confidential_content);
+  if (restriction == DlpWarnDialog::Restriction::kFiles) {
+    for (const DlpConfidentialFile& confidential_file : confidential_files) {
+      AddConfidentialContentRow(container, confidential_file.icon,
+                                confidential_file.title);
+    }
+  } else {
+    for (const DlpConfidentialContent& confidential_content :
+         confidential_contents.GetContents()) {
+      AddConfidentialContentRow(container, confidential_content.icon,
+                                confidential_content.title);
+    }
   }
 }
 
@@ -425,15 +442,17 @@
 
 DlpWarnDialog::DlpWarnDialogOptions::DlpWarnDialogOptions(
     Restriction restriction,
-    DlpConfidentialContents confidential_contents,
+    const std::vector<DlpConfidentialFile>& confidential_files,
     absl::optional<DlpRulesManager::Component> dst_component,
     const std::string& destination_pattern,
     DlpFilesController::FileAction files_action)
     : restriction(restriction),
-      confidential_contents(confidential_contents),
+      confidential_files(confidential_files),
       destination_component(dst_component),
       destination_pattern(destination_pattern),
-      files_action(files_action) {}
+      files_action(files_action) {
+  DCHECK(restriction == Restriction::kFiles);
+}
 
 DlpWarnDialog::DlpWarnDialogOptions::DlpWarnDialogOptions(
     const DlpWarnDialogOptions& other) = default;
@@ -466,7 +485,9 @@
       views::BoxLayout::Orientation::kVertical));
 
   AddGeneralInformation(AddChildView(std::make_unique<views::View>()), options);
-  MaybeAddConfidentialContent(this, options.confidential_contents);
+  MaybeAddConfidentialRows(this, options.restriction,
+                           options.confidential_contents,
+                           options.confidential_files);
 }
 
 BEGIN_METADATA(DlpWarnDialog, views::DialogDelegateView)
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.h b/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.h
index 937dba4..7f378667 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.h
@@ -10,6 +10,7 @@
 #include "base/callback_forward.h"
 #include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/window/dialog_delegate.h"
@@ -51,7 +52,7 @@
                          const std::u16string& application_title);
     DlpWarnDialogOptions(
         Restriction restriction,
-        DlpConfidentialContents confidential_contents,
+        const std::vector<DlpConfidentialFile>& confidential_files,
         absl::optional<DlpRulesManager::Component> dst_component,
         const std::string& destination_pattern,
         DlpFilesController::FileAction files_action);
@@ -69,7 +70,9 @@
              a.destination_component == b.destination_component &&
              a.destination_pattern == b.destination_pattern &&
              a.files_action == b.files_action &&
-             EqualWithTitles(a.confidential_contents, b.confidential_contents);
+             EqualWithTitles(a.confidential_contents,
+                             b.confidential_contents) &&
+             a.confidential_files == b.confidential_files;
     }
     friend bool operator!=(const DlpWarnDialogOptions& a,
                            const DlpWarnDialogOptions& b) {
@@ -77,7 +80,10 @@
     }
 
     Restriction restriction;
+    // May have content only if the |restriction| is not kFiles.
     DlpConfidentialContents confidential_contents;
+    // May have files only if the |restriction| is kFiles.
+    std::vector<DlpConfidentialFile> confidential_files;
     absl::optional<std::u16string> application_title;
 
     // May have value only if the |restriction| is kFiles.
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.cc b/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.cc
index 34173ca1..382e8e00 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.cc
@@ -54,14 +54,14 @@
 
 base::WeakPtr<views::Widget> DlpWarnNotifier::ShowDlpFilesWarningDialog(
     OnDlpRestrictionCheckedCallback callback,
-    const DlpConfidentialContents& confidential_contents,
+    const std::vector<DlpConfidentialFile>& confidential_files,
     absl::optional<DlpRulesManager::Component> dst_component,
     const std::string& destination_pattern,
     DlpFilesController::FileAction files_action) {
   return ShowDlpWarningDialog(
       std::move(callback),
       DlpWarnDialog::DlpWarnDialogOptions(DlpWarnDialog::Restriction::kFiles,
-                                          confidential_contents, dst_component,
+                                          confidential_files, dst_component,
                                           destination_pattern, files_action));
 }
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.h b/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.h
index d93c12fc..971b5f8d 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.h
@@ -10,6 +10,7 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_confidential_file.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_observer.h"
@@ -49,12 +50,12 @@
 
   // Shows a warning dialog that informs the user that |files_action| to
   // |dst_component| or |destination_pattern| on selected
-  // |confidential_contents| files is not recommended. Calls |callback| and
+  // |confidential_files| is not recommended. Calls |callback| and
   // passes user's choice of whether to proceed or not.
   // Returns a pointer to the widget that owns the created dialog.
   base::WeakPtr<views::Widget> ShowDlpFilesWarningDialog(
       OnDlpRestrictionCheckedCallback callback,
-      const DlpConfidentialContents& confidential_contents,
+      const std::vector<DlpConfidentialFile>& confidential_files,
       absl::optional<DlpRulesManager::Component> dst_component,
       const std::string& destination_pattern,
       DlpFilesController::FileAction files_action);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index c29efcf..a4802f7 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -7584,6 +7584,7 @@
       "../browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc",
       "../browser/chromeos/policy/dlp/dlp_clipboard_notifier_unittest.cc",
       "../browser/chromeos/policy/dlp/dlp_confidential_contents_unittest.cc",
+      "../browser/chromeos/policy/dlp/dlp_confidential_file_unittest.cc",
       "../browser/chromeos/policy/dlp/dlp_content_tab_helper_unittest.cc",
       "../browser/chromeos/policy/dlp/dlp_drag_drop_notifier_unittest.cc",
       "../browser/chromeos/policy/dlp/dlp_reporting_manager_test_helper.cc",