blob: a8ccaeba2b326ae0fe1ede23ac44abbd3ca1d97a [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/download/quarantine/common_mac.h"
#import <ApplicationServices/ApplicationServices.h>
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/mac/availability.h"
#include "base/mac/foundation_util.h"
#include "base/mac/mac_logging.h"
#include "base/mac/mac_util.h"
#include "base/mac/scoped_cftyperef.h"
#include "base/strings/sys_string_conversions.h"
namespace download {
bool GetQuarantineProperties(
const base::FilePath& file,
base::scoped_nsobject<NSMutableDictionary>* properties) {
base::scoped_nsobject<NSURL> file_url([[NSURL alloc]
initFileURLWithPath:base::SysUTF8ToNSString(file.value())]);
if (!file_url)
return false;
NSError* error = nil;
id quarantine_properties = nil;
BOOL success = [file_url getResourceValue:&quarantine_properties
forKey:NSURLQuarantinePropertiesKey
error:&error];
if (!success) {
std::string error_message(error ? error.description.UTF8String : "");
LOG(WARNING) << "Unable to get quarantine attributes for file "
<< file.value() << ". Error: " << error_message;
return false;
}
if (!quarantine_properties)
return true;
NSDictionary* quarantine_properties_dict =
base::mac::ObjCCast<NSDictionary>(quarantine_properties);
if (!quarantine_properties_dict) {
LOG(WARNING) << "Quarantine properties have wrong class: "
<< base::SysNSStringToUTF8(
[[quarantine_properties class] description]);
return false;
}
properties->reset([quarantine_properties_dict mutableCopy]);
return true;
}
} // namespace download