Skip to content

Commit

Permalink
Merge pull request #9380 from brave/pr9346_tor-log-in-mem_1.27.x
Browse files Browse the repository at this point in the history
Migrate tor log from disk to memory (uplift to 1.27.x)
  • Loading branch information
kjozwiak authored Jul 9, 2021
2 parents 7d84b26 + 2d8a6b4 commit 6782182
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 51 deletions.
5 changes: 5 additions & 0 deletions browser/ui/webui/tor_internals_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ void TorInternalsDOMHandler::OnTorControlEvent(const std::string& event) {
base::Value(event));
}

void TorInternalsDOMHandler::OnTorLogUpdated() {
tor_launcher_factory_->GetTorLog(base::BindOnce(
&TorInternalsDOMHandler::OnGetTorLog, weak_ptr_factory_.GetWeakPtr()));
}

void TorInternalsDOMHandler::OnTorInitializing(const std::string& percentage) {
web_ui()->CallJavascriptFunctionUnsafe("tor_internals.onGetTorInitPercentage",
base::Value(percentage));
Expand Down
1 change: 1 addition & 0 deletions browser/ui/webui/tor_internals_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class TorInternalsDOMHandler : public content::WebUIMessageHandler,
void OnTorCircuitEstablished(bool result) override;
void OnTorInitializing(const std::string& percentage) override;
void OnTorControlEvent(const std::string& event) override;
void OnTorLogUpdated() override;

TorLauncherFactory* tor_launcher_factory_ = nullptr;

Expand Down
7 changes: 0 additions & 7 deletions components/services/tor/tor_launcher_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,12 @@ void TorLauncherImpl::Launch(mojom::TorConfigPtr config,
args.AppendArg("/nonexistent");
args.AppendArg("--SocksPort");
args.AppendArg("auto");
args.AppendArg("--TruncateLogFile");
args.AppendArg("1");
base::FilePath tor_data_path = config->tor_data_path;
if (!tor_data_path.empty()) {
if (!base::DirectoryExists(tor_data_path))
base::CreateDirectory(tor_data_path);
args.AppendArg("--DataDirectory");
args.AppendArgPath(tor_data_path);
args.AppendArg("--Log");
base::CommandLine::StringType log_file;
log_file += FILE_PATH_LITERAL("notice file ");
args.AppendArgNative(log_file +
tor_data_path.AppendASCII("tor.log").value());
}
args.AppendArg("--__OwningControllerProcess");
args.AppendArg(base::NumberToString(base::Process::Current().Pid()));
Expand Down
25 changes: 18 additions & 7 deletions components/tor/brave_tor_client_updater.cc
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ void DeleteDir(const base::FilePath& path) {
base::DeletePathRecursively(path);
}

void DeleteFile(const base::FilePath& file) {
if (base::PathExists(file))
base::DeleteFile(file);
}

} // namespace

#if defined(OS_WIN)
Expand Down Expand Up @@ -120,7 +125,9 @@ BraveTorClientUpdater::BraveTorClientUpdater(
registered_(false),
local_state_(local_state),
user_data_dir_(user_data_dir),
weak_ptr_factory_(this) {}
weak_ptr_factory_(this) {
RemoveObsoleteFiles();
}

BraveTorClientUpdater::~BraveTorClientUpdater() {}

Expand All @@ -133,8 +140,7 @@ void BraveTorClientUpdater::Register() {
return;
}

BraveComponent::Register(kTorClientComponentName,
g_tor_client_component_id_,
BraveComponent::Register(kTorClientComponentName, g_tor_client_component_id_,
g_tor_client_component_base64_public_key_);
registered_ = true;
}
Expand All @@ -157,6 +163,12 @@ void BraveTorClientUpdater::Cleanup() {
base::BindOnce(&DeleteDir, GetTorWatchPath()));
}

void BraveTorClientUpdater::RemoveObsoleteFiles() {
// tor log
base::FilePath tor_log = GetTorDataPath().AppendASCII("tor.log");
task_runner_->PostTask(FROM_HERE, base::BindOnce(&DeleteFile, tor_log));
}

void BraveTorClientUpdater::SetExecutablePath(const base::FilePath& path) {
executable_path_ = path;
for (Observer& observer : observers_)
Expand All @@ -179,10 +191,9 @@ base::FilePath BraveTorClientUpdater::GetTorWatchPath() const {
.Append(FILE_PATH_LITERAL("watch"));
}

void BraveTorClientUpdater::OnComponentReady(
const std::string& component_id,
const base::FilePath& install_dir,
const std::string& manifest) {
void BraveTorClientUpdater::OnComponentReady(const std::string& component_id,
const base::FilePath& install_dir,
const std::string& manifest) {
base::PostTaskAndReplyWithResult(
GetTaskRunner().get(), FROM_HERE,
base::BindOnce(&InitExecutablePath, install_dir),
Expand Down
2 changes: 2 additions & 0 deletions components/tor/brave_tor_client_updater.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ class BraveTorClientUpdater : public BraveComponent {
private:
friend class ::BraveTorClientUpdaterTest;

void RemoveObsoleteFiles();

static std::string g_tor_client_component_name_;
static std::string g_tor_client_component_id_;
static std::string g_tor_client_component_base64_public_key_;
Expand Down
49 changes: 14 additions & 35 deletions components/tor/tor_launcher_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@

#include "base/bind.h"
#include "base/bind_post_task.h"
#include "base/files/file_util.h"
#include "base/sequenced_task_runner.h"
#include "base/task/post_task.h"
#include "base/task/thread_pool.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "brave/components/tor/service_sandbox_type.h"
#include "brave/components/tor/tor_file_watcher.h"
Expand All @@ -22,27 +18,13 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/service_process_host.h"

using content::BrowserThread;

namespace {
constexpr char kTorProxyScheme[] = "socks5://";
// tor::TorControlEvent::STATUS_CLIENT response
constexpr char kStatusClientBootstrap[] = "BOOTSTRAP";
constexpr char kStatusClientBootstrapProgress[] = "PROGRESS=";
constexpr char kStatusClientCircuitEstablished[] = "CIRCUIT_ESTABLISHED";
constexpr char kStatusClientCircuitNotEstablished[] = "CIRCUIT_NOT_ESTABLISHED";

std::pair<bool, std::string> LoadTorLogOnFileTaskRunner(
const base::FilePath& path) {
std::string data;
bool success = base::ReadFileToString(path, &data);
std::pair<bool, std::string> result;
result.first = success;
if (success) {
result.second = data;
}
return result;
}
} // namespace

// static
Expand Down Expand Up @@ -111,13 +93,6 @@ void TorLauncherFactory::LaunchTorProcess(const tor::mojom::TorConfig& config) {
LaunchTorInternal();
}

void TorLauncherFactory::OnTorLogLoaded(
GetLogCallback callback,
const std::pair<bool, std::string>& result) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
std::move(callback).Run(result.first, result.second);
}

void TorLauncherFactory::LaunchTorInternal() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);

Expand All @@ -138,7 +113,9 @@ void TorLauncherFactory::KillTorProcess() {
control_->Stop();
tor_launcher_.reset();
tor_pid_ = -1;
is_starting_ = false;
is_connected_ = false;
tor_log_.clear();
}

int64_t TorLauncherFactory::GetTorPid() const {
Expand All @@ -163,16 +140,7 @@ std::string TorLauncherFactory::GetTorVersion() const {

void TorLauncherFactory::GetTorLog(GetLogCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::FilePath tor_log_path = config_.tor_data_path.AppendASCII("tor.log");
scoped_refptr<base::SequencedTaskRunner> file_task_runner(
base::ThreadPool::CreateSequencedTaskRunner(
{base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
base::PostTaskAndReplyWithResult(
file_task_runner.get(), FROM_HERE,
base::BindOnce(&LoadTorLogOnFileTaskRunner, tor_log_path),
base::BindOnce(&TorLauncherFactory::OnTorLogLoaded,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
std::move(callback).Run(true, std::string(tor_log_));
}

void TorLauncherFactory::AddObserver(TorLauncherObserver* observer) {
Expand Down Expand Up @@ -250,6 +218,11 @@ void TorLauncherFactory::OnTorControlReady() {
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::STREAM,
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::NOTICE,
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::WARN,
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::ERR, base::DoNothing::Once<bool>());
}

void TorLauncherFactory::GotVersion(bool error, const std::string& version) {
Expand Down Expand Up @@ -378,6 +351,12 @@ void TorLauncherFactory::OnTorEvent(
for (auto& observer : observers_)
observer.OnTorCircuitEstablished(false);
}
} else if (event == tor::TorControlEvent::NOTICE ||
event == tor::TorControlEvent::WARN ||
event == tor::TorControlEvent::ERR) {
tor_log_ += raw_event + '\n';
for (auto& observer : observers_)
observer.OnTorLogUpdated();
}
}

Expand Down
4 changes: 2 additions & 2 deletions components/tor/tor_launcher_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ class TorLauncherFactory : public tor::TorControl::Delegate {
TorLauncherFactory();
~TorLauncherFactory() override;

void OnTorLogLoaded(GetLogCallback, const std::pair<bool, std::string>&);

void OnTorControlPrerequisitesReady(int64_t pid,
bool ready,
std::vector<uint8_t> cookie,
Expand All @@ -92,6 +90,8 @@ class TorLauncherFactory : public tor::TorControl::Delegate {
std::string tor_proxy_uri_;
std::string tor_version_;

std::string tor_log_;

int64_t tor_pid_;

tor::mojom::TorConfig config_;
Expand Down
1 change: 1 addition & 0 deletions components/tor/tor_launcher_observer.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class TorLauncherObserver : public base::CheckedObserver {
virtual void OnTorCircuitEstablished(bool result) {}
virtual void OnTorInitializing(const std::string& percentage) {}
virtual void OnTorControlEvent(const std::string& event) {}
virtual void OnTorLogUpdated() {}
};

#endif // BRAVE_COMPONENTS_TOR_TOR_LAUNCHER_OBSERVER_H_

0 comments on commit 6782182

Please sign in to comment.