Chromium Code Reviews| 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 24% |
| rename from content/browser/download/file_metadata_linux.cc |
| rename to content/browser/download/quarantine_linux.cc |
| index b6b1779c52ef3383735319c779a00ea5d66aa8d7..35e8a7184aa484c6f3940044ba0f41871b9afc04 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,54 @@ |
| #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); |
| + bool succeeded = true; |
| + if (source_url.is_valid()) { |
|
svaldez
2016/07/11 14:55:45
Should you be early failing if setting the SourceU
asanka
2016/09/12 15:36:37
Currently it's possible for the referrer URL to be
|
| + succeeded = SetExtendedFileAttribute( |
| + file.value().c_str(), kSourceURLExtendedAttrName, |
| + source_url.spec().c_str(), source_url.spec().length(), 0); |
| } |
| - if (referrer.is_valid()) { |
| - SetExtendedFileAttribute(file.value().c_str(), kReferrerURLAttrName, |
| - referrer.spec().c_str(), referrer.spec().length(), 0); |
| + if (referrer_url.is_valid()) { |
| + succeeded = SetExtendedFileAttribute(file.value().c_str(), |
| + kReferrerURLExtendedAttrName, |
| + referrer_url.spec().c_str(), |
| + referrer_url.spec().length(), 0) && |
| + succeeded; |
| } |
| + return succeeded ? QuarantineFileResult::OK |
| + : QuarantineFileResult::ANNOTATION_FAILED; |
| } |
| } // namespace content |