Commit 33c4600f authored by Alexander Bolodurin's avatar Alexander Bolodurin Committed by Commit Bot

arc: Dedupe functions resolving ARC content URLs

Move ResolveToContentUrlOn{IO,UI}Thread into a separate utils file and
reuse in both ArcDocumentsProviderStream{Reader,Writer}.

Change-Id: I40dd5f345dee50db1d4e9d605175f78920adef67
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2535965
Commit-Queue: Alexander Bolodurin <alexbn@google.com>
Reviewed-by: default avatarRyo Hashimoto <hashimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830961}
parent 2cdf6e06
...@@ -648,6 +648,8 @@ source_set("chromeos") { ...@@ -648,6 +648,8 @@ source_set("chromeos") {
"arc/fileapi/arc_documents_provider_file_stream_reader.h", "arc/fileapi/arc_documents_provider_file_stream_reader.h",
"arc/fileapi/arc_documents_provider_file_stream_writer.cc", "arc/fileapi/arc_documents_provider_file_stream_writer.cc",
"arc/fileapi/arc_documents_provider_file_stream_writer.h", "arc/fileapi/arc_documents_provider_file_stream_writer.h",
"arc/fileapi/arc_documents_provider_file_system_url_util.cc",
"arc/fileapi/arc_documents_provider_file_system_url_util.h",
"arc/fileapi/arc_documents_provider_root.cc", "arc/fileapi/arc_documents_provider_root.cc",
"arc/fileapi/arc_documents_provider_root.h", "arc/fileapi/arc_documents_provider_root.h",
"arc/fileapi/arc_documents_provider_root_map.cc", "arc/fileapi/arc_documents_provider_root_map.cc",
......
...@@ -9,9 +9,7 @@ ...@@ -9,9 +9,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/callback_helpers.h" #include "base/callback_helpers.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader.h" #include "chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h" #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_file_system_url_util.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_map.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "net/base/io_buffer.h" #include "net/base/io_buffer.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
...@@ -22,55 +20,16 @@ using content::BrowserThread; ...@@ -22,55 +20,16 @@ using content::BrowserThread;
namespace arc { namespace arc {
namespace {
void OnResolveToContentUrlOnUIThread(
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback,
const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), url));
}
void ResolveToContentUrlOnUIThread(
const storage::FileSystemURL& url,
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
ArcDocumentsProviderRootMap* roots =
ArcDocumentsProviderRootMap::GetForArcBrowserContext();
if (!roots) {
OnResolveToContentUrlOnUIThread(std::move(callback), GURL());
return;
}
base::FilePath path;
ArcDocumentsProviderRoot* root = roots->ParseAndLookup(url, &path);
if (!root) {
OnResolveToContentUrlOnUIThread(std::move(callback), GURL());
return;
}
root->ResolveToContentUrl(
path,
base::BindOnce(&OnResolveToContentUrlOnUIThread, std::move(callback)));
}
} // namespace
ArcDocumentsProviderFileStreamReader::ArcDocumentsProviderFileStreamReader( ArcDocumentsProviderFileStreamReader::ArcDocumentsProviderFileStreamReader(
const storage::FileSystemURL& url, const storage::FileSystemURL& url,
int64_t offset) int64_t offset)
: offset_(offset), content_url_resolved_(false) { : offset_(offset), content_url_resolved_(false) {
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(BrowserThread::IO);
content::GetUIThreadTaskRunner({})->PostTask( ResolveToContentUrlOnIOThread(
FROM_HERE, url, base::BindOnce(
base::BindOnce( &ArcDocumentsProviderFileStreamReader::OnResolveToContentUrl,
&ResolveToContentUrlOnUIThread, url, weak_ptr_factory_.GetWeakPtr()));
base::BindOnce(
&ArcDocumentsProviderFileStreamReader::OnResolveToContentUrl,
weak_ptr_factory_.GetWeakPtr())));
} }
ArcDocumentsProviderFileStreamReader::~ArcDocumentsProviderFileStreamReader() { ArcDocumentsProviderFileStreamReader::~ArcDocumentsProviderFileStreamReader() {
......
...@@ -9,9 +9,7 @@ ...@@ -9,9 +9,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/callback_helpers.h" #include "base/callback_helpers.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_writer.h" #include "chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_writer.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h" #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_file_system_url_util.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_map.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "net/base/io_buffer.h" #include "net/base/io_buffer.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
...@@ -21,42 +19,6 @@ using content::BrowserThread; ...@@ -21,42 +19,6 @@ using content::BrowserThread;
namespace arc { namespace arc {
namespace {
void OnResolveToContentUrlOnUIThread(
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback,
const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), url));
}
void ResolveToContentUrlOnUIThread(
const storage::FileSystemURL& url,
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
ArcDocumentsProviderRootMap* roots =
ArcDocumentsProviderRootMap::GetForArcBrowserContext();
if (!roots) {
OnResolveToContentUrlOnUIThread(std::move(callback), GURL());
return;
}
base::FilePath path;
ArcDocumentsProviderRoot* root = roots->ParseAndLookup(url, &path);
if (!root) {
OnResolveToContentUrlOnUIThread(std::move(callback), GURL());
return;
}
root->ResolveToContentUrl(
path,
base::BindOnce(&OnResolveToContentUrlOnUIThread, std::move(callback)));
}
} // namespace
ArcDocumentsProviderFileStreamWriter::ArcDocumentsProviderFileStreamWriter( ArcDocumentsProviderFileStreamWriter::ArcDocumentsProviderFileStreamWriter(
const storage::FileSystemURL& url, const storage::FileSystemURL& url,
int64_t offset) int64_t offset)
...@@ -82,13 +44,11 @@ int ArcDocumentsProviderFileStreamWriter::Write( ...@@ -82,13 +44,11 @@ int ArcDocumentsProviderFileStreamWriter::Write(
// Resolve the |arc_url_| to a Content URL to instantiate the underlying // Resolve the |arc_url_| to a Content URL to instantiate the underlying
// writer. // writer.
content::GetUIThreadTaskRunner({})->PostTask( ResolveToContentUrlOnIOThread(
FROM_HERE, arc_url_,
base::BindOnce( base::BindOnce(
&ResolveToContentUrlOnUIThread, arc_url_, &ArcDocumentsProviderFileStreamWriter::OnResolveToContentUrl,
base::BindOnce( weak_ptr_factory_.GetWeakPtr()));
&ArcDocumentsProviderFileStreamWriter::OnResolveToContentUrl,
weak_ptr_factory_.GetWeakPtr())));
return net::ERR_IO_PENDING; return net::ERR_IO_PENDING;
} }
......
// 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 "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_file_system_url_util.h"
#include "base/bind.h"
#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_map.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "url/gurl.h"
using content::BrowserThread;
namespace arc {
namespace {
void OnResolveToContentUrlOnUIThread(
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback,
const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), url));
}
void ResolveToContentUrlOnUIThread(
const storage::FileSystemURL& url,
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
ArcDocumentsProviderRootMap* roots =
ArcDocumentsProviderRootMap::GetForArcBrowserContext();
if (!roots) {
OnResolveToContentUrlOnUIThread(std::move(callback), GURL());
return;
}
base::FilePath path;
ArcDocumentsProviderRoot* root = roots->ParseAndLookup(url, &path);
if (!root) {
OnResolveToContentUrlOnUIThread(std::move(callback), GURL());
return;
}
root->ResolveToContentUrl(
path,
base::BindOnce(&OnResolveToContentUrlOnUIThread, std::move(callback)));
}
} // namespace
void ResolveToContentUrlOnIOThread(
const storage::FileSystemURL& url,
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE,
base::BindOnce(&ResolveToContentUrlOnUIThread, url, std::move(callback)));
}
} // namespace arc
// 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.
#ifndef CHROME_BROWSER_CHROMEOS_ARC_FILEAPI_ARC_DOCUMENTS_PROVIDER_FILE_SYSTEM_URL_UTIL_H_
#define CHROME_BROWSER_CHROMEOS_ARC_FILEAPI_ARC_DOCUMENTS_PROVIDER_FILE_SYSTEM_URL_UTIL_H_
#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h"
#include "storage/browser/file_system/file_system_url.h"
namespace arc {
// Converts a FilesystemURL to ARC content URL on the IO thread.
void ResolveToContentUrlOnIOThread(
const storage::FileSystemURL& url,
ArcDocumentsProviderRoot::ResolveToContentUrlCallback callback);
} // namespace arc
#endif // CHROME_BROWSER_CHROMEOS_ARC_FILEAPI_ARC_DOCUMENTS_PROVIDER_FILE_SYSTEM_URL_UTIL_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment