Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: content/browser/download/quarantine_linux.cc

Issue 2123023002: [Downloads] Consolidate MOTW annotation APIs into a single API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move-safe-util-to-downloads
Patch Set: [win] Verify that the Zone.Identifier stream has the correct contents. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/download/quarantine_linux.cc
diff --git a/content/browser/download/file_metadata_linux.cc b/content/browser/download/quarantine_linux.cc
similarity index 22%
rename from content/browser/download/file_metadata_linux.cc
rename to content/browser/download/quarantine_linux.cc
index b6b1779c52ef3383735319c779a00ea5d66aa8d7..293dd46f107e4579b45b91af4b36a1c822c1d573 100644
--- a/content/browser/download/file_metadata_linux.cc
+++ b/content/browser/download/quarantine_linux.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/download/file_metadata_linux.h"
+#include "content/browser/download/quarantine.h"
#include <stddef.h>
#include <sys/types.h>
@@ -11,34 +11,56 @@
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
+#include "base/threading/thread_restrictions.h"
+#include "content/browser/download/quarantine_constants_linux.h"
#include "url/gurl.h"
namespace content {
-const char kSourceURLAttrName[] = "user.xdg.origin.url";
-const char kReferrerURLAttrName[] = "user.xdg.referrer.url";
+const char kSourceURLExtendedAttrName[] = "user.xdg.origin.url";
+const char kReferrerURLExtendedAttrName[] = "user.xdg.referrer.url";
-static void SetExtendedFileAttribute(const char* path, const char* name,
- const char* value, size_t value_size,
- int flags) {
+namespace {
+
+bool SetExtendedFileAttribute(const char* path,
+ const char* name,
+ const char* value,
+ size_t value_size,
+ int flags) {
+ base::ThreadRestrictions::AssertIOAllowed();
int result = setxattr(path, name, value, value_size, flags);
if (result) {
- DPLOG(ERROR)
- << "Could not set extended attribute " << name << " on file " << path;
+ DPLOG(ERROR) << "Could not set extended attribute " << name << " on file "
+ << path;
+ return false;
}
+ return true;
}
-void AddOriginMetadataToFile(const base::FilePath& file, const GURL& source,
- const GURL& referrer) {
+} // namespace
+
+QuarantineFileResult QuarantineFile(const base::FilePath& file,
+ const GURL& source_url,
+ const GURL& referrer_url,
+ const std::string& client_guid) {
DCHECK(base::PathIsWritable(file));
- if (source.is_valid()) {
- SetExtendedFileAttribute(file.value().c_str(), kSourceURLAttrName,
- source.spec().c_str(), source.spec().length(), 0);
- }
- if (referrer.is_valid()) {
- SetExtendedFileAttribute(file.value().c_str(), kReferrerURLAttrName,
- referrer.spec().c_str(), referrer.spec().length(), 0);
- }
+
+ bool source_succeeded =
+ source_url.is_valid() &&
+ SetExtendedFileAttribute(file.value().c_str(), kSourceURLExtendedAttrName,
+ source_url.spec().c_str(),
+ source_url.spec().length(), 0);
+
+ // Referrer being empty is not considered an error. This could happen if the
+ // referrer policy resulted in an empty referrer for the download request.
+ bool referrer_succeeded =
+ !referrer_url.is_valid() ||
+ SetExtendedFileAttribute(
+ file.value().c_str(), kReferrerURLExtendedAttrName,
+ referrer_url.spec().c_str(), referrer_url.spec().length(), 0);
+ return source_succeeded && referrer_succeeded
+ ? QuarantineFileResult::OK
+ : QuarantineFileResult::ANNOTATION_FAILED;
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698