blob: 3c3bf149ca2c0c8b0708a380bee03d594eae18bb [file] [log] [blame]
// Copyright 2016 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.
#ifndef COMPONENTS_SERVICES_QUARANTINE_QUARANTINE_H_
#define COMPONENTS_SERVICES_QUARANTINE_QUARANTINE_H_
#include <string>
#include "build/build_config.h"
#include "components/services/quarantine/public/mojom/quarantine.mojom.h"
class GURL;
namespace base {
class FilePath;
}
namespace quarantine {
using mojom::QuarantineFileResult;
// Quarantine a file that was downloaded from the internet.
//
// Ensures that |file| is handled as safely as possible given that it was
// downloaded from |source_url|. The details of how a downloaded file is handled
// are platform dependent. Please refer to the individual quarantine_<os>
// implementation.
//
// This function should be called for all files downloaded from the internet and
// placed in a manner discoverable by the user, or exposed to an external
// application. Furthermore, it should be called:
//
// * **AFTER** all the data has been written to the file. On Windows, registered
// anti-virus products will be invoked for scanning the contents of the file.
// Hence it's important to have the final contents of the file be available at
// the point at which this function is called.
//
// Exception: Zero-length files will be handled solely on the basis of the
// |source_url| and the file type. This exception accommodates situations
// where the file contents cannot be determined before it is made visible to
// an external application.
//
// * **AFTER** the file has been renamed to its final name. The file type is
// significant and is derived from the filename.
//
// * **BEFORE** the file is made visible to an external application or the user.
// Security checks and mark-of-the-web annotations must be made prior to
// exposing the file externally.
//
// Note that it is possible for this method to take a long time to complete
// (several seconds or more). In addition to blocking during this time, this
// delay also introduces a window during which a browser shutdown may leave the
// downloaded file unannotated.
//
// Parameters:
// |file| : Final name of the file.
// |source_url|: URL from which the file content was downloaded. This is empty
// for off-the-record download.
// |referrer_url|: Referring URL. This is empty for off-the-record download.
// |client_guid|: Only used on Windows. Identifies the client application
// that downloaded the file.
//
// Note: The |source_url| and |referrer_url| will be stripped of unnecessary
// parts using SanitizeUrlForQuarantine() before they are used for annotation
// or notification purposes. If the URLs are sensitive -- e.g. because the
// download was made using an off-the-record profile -- then pass in an empty
// GURL() instead.
QuarantineFileResult QuarantineFile(const base::FilePath& file,
const GURL& source_url,
const GURL& referrer_url,
const std::string& client_guid);
#if defined(OS_WIN)
QuarantineFileResult SetInternetZoneIdentifierDirectly(
const base::FilePath& full_path,
const GURL& source_url,
const GURL& referrer_url);
#endif
} // namespace quarantine
#endif // COMPONENTS_SERVICES_QUARANTINE_QUARANTINE_H_
OSZAR »