blob: 8199624373a653a8f564223b3d41c794dcc42e6b [file] [log] [blame]
// Copyright 2020 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 "content/browser/native_io/native_io_file_host.h"
#include <string>
#include <utility>
#include "base/bind.h"
#include "base/sequence_checker.h"
#include "build/build_config.h"
#include "content/browser/native_io/native_io_host.h"
#include "content/browser/native_io/native_io_manager.h"
#include "third_party/blink/public/mojom/native_io/native_io.mojom.h"
namespace content {
NativeIOFileHost::NativeIOFileHost(
NativeIOHost* origin_host,
std::string file_name,
#if defined(OS_MAC)
bool allow_set_length_ipc,
#endif // defined(OS_MAC)
mojo::PendingReceiver<blink::mojom::NativeIOFileHost> file_host_receiver)
: origin_host_(origin_host),
file_name_(std::move(file_name)),
#if defined(OS_MAC)
allow_set_length_ipc_(allow_set_length_ipc),
#endif // defined(OS_MAC)
receiver_(this, std::move(file_host_receiver)) {
// base::Unretained is safe here because this NativeIOFileHost owns
// |receiver_|. So, the unretained NativeIOFileHost is guaranteed to outlive
// |receiver_| and the closure that it uses.
receiver_.set_disconnect_handler(base::BindOnce(
&NativeIOFileHost::OnReceiverDisconnect, base::Unretained(this)));
}
NativeIOFileHost::~NativeIOFileHost() = default;
void NativeIOFileHost::Close(CloseCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
std::move(callback).Run();
origin_host_->OnFileClose(this); // Deletes |this|.
}
void NativeIOFileHost::OnReceiverDisconnect() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
origin_host_->OnFileClose(this); // Deletes |this|.
}
} // namespace content