0

Reland "Remove blink::WebFileUtilities, and connect to the FileUtilitiesHost directly."

This is a reland of 8360f4d1a1

Original change's description:
> Remove blink::WebFileUtilities, and connect to the FileUtilitiesHost directly.
>
> This requires moving the mojom definition into Blink, but removes the
> similar function from the C++ Blink API and dramatically shrinks the
> LOC here.
>
> Bug: 835337
> Change-Id: I3d64c3a2f6439ec6c121417c28787c50af3838bb
> Reviewed-on: https://chromium-review.googlesource.com/1020378
> Commit-Queue: Jeremy Roman <jbroman@chromium.org>
> Reviewed-by: Kentaro Hara <haraken@chromium.org>
> Reviewed-by: Daniel Cheng <dcheng@chromium.org>
> Reviewed-by: John Abd-El-Malek <jam@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#554023}

Bug: 835337
Tbr: haraken@chromium.org,jam@chromium.org,dcheng@chromium.org
No-Presubmit: true
Change-Id: I0db3c58ee9a4230003b9c609a5ed5f4331f1f012
Reviewed-on: https://chromium-review.googlesource.com/1030574
Commit-Queue: Jeremy Roman <jbroman@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#554108}
This commit is contained in:
Jeremy Roman
2018-04-26 19:05:28 +00:00
committed by Commit Bot
parent 4fecf9b4d4
commit 89a4d0deb1
22 changed files with 34 additions and 220 deletions

@@ -20,7 +20,7 @@ FileUtilitiesHostImpl::~FileUtilitiesHostImpl() = default;
void FileUtilitiesHostImpl::Create(
int process_id,
content::mojom::FileUtilitiesHostRequest request) {
blink::mojom::FileUtilitiesHostRequest request) {
mojo::MakeStrongBinding(std::make_unique<FileUtilitiesHostImpl>(process_id),
std::move(request));
}

@@ -5,17 +5,17 @@
#ifndef CONTENT_BROWSER_RENDERER_HOST_FILE_UTILITIES_HOST_IMPL_H_
#define CONTENT_BROWSER_RENDERER_HOST_FILE_UTILITIES_HOST_IMPL_H_
#include "content/common/file_utilities.mojom.h"
#include "third_party/blink/public/mojom/file/file_utilities.mojom.h"
namespace content {
class FileUtilitiesHostImpl : public content::mojom::FileUtilitiesHost {
class FileUtilitiesHostImpl : public blink::mojom::FileUtilitiesHost {
public:
explicit FileUtilitiesHostImpl(int process_id);
~FileUtilitiesHostImpl() override;
static void Create(int process_id,
content::mojom::FileUtilitiesHostRequest request);
blink::mojom::FileUtilitiesHostRequest request);
private:
// blink::mojom::FileUtilitiesHost implementation.

@@ -541,7 +541,6 @@ mojom("mojo_bindings") {
"child_control.mojom",
"child_memory_coordinator.mojom",
"field_trial_recorder.mojom",
"file_utilities.mojom",
"frame.mojom",
"frame_sink_provider.mojom",
"histogram_fetcher.mojom",

@@ -146,11 +146,6 @@ blink::WebClipboard* PpapiBlinkPlatformImpl::Clipboard() {
return nullptr;
}
blink::WebFileUtilities* PpapiBlinkPlatformImpl::GetFileUtilities() {
NOTREACHED();
return nullptr;
}
blink::WebSandboxSupport* PpapiBlinkPlatformImpl::GetSandboxSupport() {
#if !defined(OS_ANDROID) && !defined(OS_WIN)
return sandbox_support_.get();

@@ -26,7 +26,6 @@ class PpapiBlinkPlatformImpl : public BlinkPlatformImpl {
// BlinkPlatformImpl methods:
blink::WebThread* CurrentThread() override;
blink::WebClipboard* Clipboard() override;
blink::WebFileUtilities* GetFileUtilities() override;
blink::WebSandboxSupport* GetSandboxSupport() override;
virtual bool sandboxEnabled();
unsigned long long VisitedLinkHash(const char* canonicalURL,

@@ -34,6 +34,7 @@
"blink::mojom::BlobRegistry",
"blink::mojom::BroadcastChannelProvider",
"blink::mojom::ClipboardHost",
"blink::mojom::FileUtilitiesHost",
"blink::mojom::LockManager",
"blink::mojom::Hyphenation",
"blink::mojom::MimeRegistry",
@@ -43,7 +44,6 @@
"content::mojom::AppCacheBackend",
"content::mojom::ClipboardHost",
"content::mojom::FieldTrialRecorder",
"content::mojom::FileUtilitiesHost",
"content::mojom::FrameSinkProvider",
"content::mojom::MediaStreamTrackMetricsHost",
"content::mojom::MemoryCoordinatorHandle",

@@ -456,8 +456,6 @@ target(link_target_type, "renderer") {
"web_ui_extension.h",
"web_ui_extension_data.cc",
"web_ui_extension_data.h",
"webfileutilities_impl.cc",
"webfileutilities_impl.h",
"webgraphicscontext3d_provider_impl.cc",
"webgraphicscontext3d_provider_impl.h",
"webpublicsuffixlist_impl.cc",

@@ -75,7 +75,6 @@
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/storage_util.h"
#include "content/renderer/web_database_observer_impl.h"
#include "content/renderer/webfileutilities_impl.h"
#include "content/renderer/webgraphicscontext3d_provider_impl.h"
#include "content/renderer/webpublicsuffixlist_impl.h"
#include "content/renderer/worker_thread_registry.h"
@@ -233,21 +232,6 @@ gpu::ContextType ToGpuContextType(blink::Platform::ContextType type) {
//------------------------------------------------------------------------------
class RendererBlinkPlatformImpl::FileUtilities : public WebFileUtilitiesImpl {
public:
explicit FileUtilities(
scoped_refptr<mojom::ThreadSafeFileUtilitiesHostPtr> host)
: file_utilities_host_(std::move(host)) {}
bool GetFileInfo(const WebString& path, WebFileInfo& result) override;
private:
mojom::FileUtilitiesHost& GetFileUtilitiesHost() {
return **file_utilities_host_;
}
scoped_refptr<mojom::ThreadSafeFileUtilitiesHostPtr> file_utilities_host_;
};
#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA)
class RendererBlinkPlatformImpl::SandboxSupport
: public blink::WebSandboxSupport {
@@ -326,9 +310,6 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
GetInterfaceProvider()->GetInterface(
mojo::MakeRequest(&web_database_host_info_));
GetInterfaceProvider()->GetInterface(
mojo::MakeRequest(&file_utilities_host_info_));
}
RendererBlinkPlatformImpl::~RendererBlinkPlatformImpl() {
@@ -432,18 +413,6 @@ blink::WebClipboard* RendererBlinkPlatformImpl::Clipboard() {
return BlinkPlatformImpl::Clipboard();
}
blink::WebFileUtilities* RendererBlinkPlatformImpl::GetFileUtilities() {
if (!file_utilities_) {
file_utilities_.reset(
new FileUtilities(mojom::ThreadSafeFileUtilitiesHostPtr::Create(
std::move(file_utilities_host_info_),
base::CreateSequencedTaskRunnerWithTraits(
{base::WithBaseSyncPrimitives()}))));
file_utilities_->set_sandbox_enabled(sandboxEnabled());
}
return file_utilities_.get();
}
blink::WebSandboxSupport* RendererBlinkPlatformImpl::GetSandboxSupport() {
#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_FUCHSIA)
// These platforms do not require sandbox support.
@@ -629,22 +598,6 @@ WebString RendererBlinkPlatformImpl::FileSystemCreateOriginIdentifier(
//------------------------------------------------------------------------------
bool RendererBlinkPlatformImpl::FileUtilities::GetFileInfo(
const WebString& path,
WebFileInfo& web_file_info) {
base::Optional<base::File::Info> file_info;
if (!GetFileUtilitiesHost().GetFileInfo(blink::WebStringToFilePath(path),
&file_info) ||
!file_info) {
return false;
}
FileInfoToWebFileInfo(file_info.value(), &web_file_info);
web_file_info.platform_path = path;
return true;
}
//------------------------------------------------------------------------------
#if defined(OS_MACOSX)
bool RendererBlinkPlatformImpl::SandboxSupport::LoadFont(CTFontRef src_font,

@@ -19,7 +19,6 @@
#include "cc/blink/web_compositor_support_impl.h"
#include "content/child/blink_platform_impl.h"
#include "content/common/content_export.h"
#include "content/common/file_utilities.mojom.h"
#include "content/common/possibly_associated_interface_ptr.h"
#include "content/renderer/origin_trials/web_trial_token_validator_impl.h"
#include "content/renderer/top_level_blame_context.h"
@@ -78,7 +77,6 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
}
// Platform methods:
blink::WebClipboard* Clipboard() override;
blink::WebFileUtilities* GetFileUtilities() override;
blink::WebSandboxSupport* GetSandboxSupport() override;
blink::WebCookieJar* CookieJar() override;
blink::WebThemeEngine* ThemeEngine() override;
@@ -292,9 +290,6 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
std::unique_ptr<blink::WebThread> main_thread_;
std::unique_ptr<service_manager::Connector> connector_;
class FileUtilities;
std::unique_ptr<FileUtilities> file_utilities_;
#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA)
class SandboxSupport;
std::unique_ptr<SandboxSupport> sandbox_support_;
@@ -340,8 +335,6 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
blink::mojom::WebDatabaseHostPtrInfo web_database_host_info_;
scoped_refptr<blink::mojom::ThreadSafeWebDatabaseHostPtr> web_database_host_;
mojom::FileUtilitiesHostPtrInfo file_utilities_host_info_;
scoped_refptr<NotificationDispatcher> notification_dispatcher_;
THREAD_CHECKER(main_thread_checker_);

@@ -1,42 +0,0 @@
// Copyright 2014 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/renderer/webfileutilities_impl.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "content/renderer/file_info_util.h"
#include "net/base/filename_util.h"
#include "third_party/blink/public/platform/file_path_conversion.h"
#include "third_party/blink/public/platform/web_file_info.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_url.h"
using blink::WebString;
namespace content {
WebFileUtilitiesImpl::WebFileUtilitiesImpl()
: sandbox_enabled_(true) {
}
WebFileUtilitiesImpl::~WebFileUtilitiesImpl() = default;
bool WebFileUtilitiesImpl::GetFileInfo(const WebString& path,
blink::WebFileInfo& web_file_info) {
if (sandbox_enabled_) {
NOTREACHED();
return false;
}
base::File::Info file_info;
if (!base::GetFileInfo(blink::WebStringToFilePath(path), &file_info))
return false;
FileInfoToWebFileInfo(file_info, &web_file_info);
web_file_info.platform_path = path;
return true;
}
} // namespace content

@@ -1,33 +0,0 @@
// Copyright 2014 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 CONTENT_RENDERER_WEBFILEUTILITIES_IMPL_H_
#define CONTENT_RENDERER_WEBFILEUTILITIES_IMPL_H_
#include "content/common/content_export.h"
#include "third_party/blink/public/platform/web_file_info.h"
#include "third_party/blink/public/platform/web_file_utilities.h"
namespace content {
class CONTENT_EXPORT WebFileUtilitiesImpl : public blink::WebFileUtilities {
public:
WebFileUtilitiesImpl();
virtual ~WebFileUtilitiesImpl();
// WebFileUtilities methods:
bool GetFileInfo(const blink::WebString& path,
blink::WebFileInfo& result) override;
void set_sandbox_enabled(bool sandbox_enabled) {
sandbox_enabled_ = sandbox_enabled;
}
protected:
bool sandbox_enabled_;
};
} // namespace content
#endif // CONTENT_RENDERER_WEBFILEUTILITIES_IMPL_H_

@@ -179,8 +179,6 @@ TestBlinkWebUnitTestSupport::TestBlinkWebUnitTestSupport()
// Initialize libraries for media.
media::InitializeMediaLibrary();
file_utilities_.set_sandbox_enabled(false);
if (!file_system_root_.CreateUniqueTempDir()) {
LOG(WARNING) << "Failed to create a temp dir for the filesystem."
"FileSystem feature will be disabled.";
@@ -209,10 +207,6 @@ blink::WebClipboard* TestBlinkWebUnitTestSupport::Clipboard() {
return mock_clipboard_.get();
}
blink::WebFileUtilities* TestBlinkWebUnitTestSupport::GetFileUtilities() {
return &file_utilities_;
}
blink::WebIDBFactory* TestBlinkWebUnitTestSupport::IdbFactory() {
NOTREACHED() <<
"IndexedDB cannot be tested with in-process harnesses.";

@@ -14,7 +14,6 @@
#include "build/build_config.h"
#include "cc/blink/web_compositor_support_impl.h"
#include "content/child/blink_platform_impl.h"
#include "content/renderer/webfileutilities_impl.h"
#include "content/test/mock_webblob_registry_impl.h"
#include "content/test/mock_webclipboard_impl.h"
#include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
@@ -35,7 +34,6 @@ class TestBlinkWebUnitTestSupport : public BlinkPlatformImpl {
blink::WebBlobRegistry* GetBlobRegistry() override;
blink::WebClipboard* Clipboard() override;
blink::WebFileUtilities* GetFileUtilities() override;
blink::WebIDBFactory* IdbFactory() override;
std::unique_ptr<blink::WebURLLoaderFactory> CreateDefaultURLLoaderFactory()
@@ -74,7 +72,6 @@ class TestBlinkWebUnitTestSupport : public BlinkPlatformImpl {
private:
MockWebBlobRegistryImpl blob_registry_;
std::unique_ptr<MockWebClipboardImpl> mock_clipboard_;
WebFileUtilitiesImpl file_utilities_;
base::ScopedTempDir file_system_root_;
std::unique_ptr<blink::WebURLLoaderMockFactory> url_loader_factory_;
cc_blink::WebCompositorSupportImpl compositor_support_;

@@ -18,6 +18,7 @@ mojom("mojom_platform") {
"clipboard/clipboard.mojom",
"color_chooser/color_chooser.mojom",
"feature_policy/feature_policy.mojom",
"file/file_utilities.mojom",
"leak_detector/leak_detector.mojom",
"loader/prefetch_url_loader_service.mojom",
"net/ip_address_space.mojom",

@@ -0,0 +1,2 @@
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS

@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module content.mojom;
module blink.mojom;
import "mojo/public/mojom/base/file_info.mojom";
import "mojo/public/mojom/base/file_path.mojom";

@@ -101,7 +101,6 @@ class WebDatabaseObserver;
class WebPlatformEventListener;
class WebFallbackThemeEngine;
class WebFileSystem;
class WebFileUtilities;
class WebGestureCurve;
class WebGraphicsContext3DProvider;
class WebIDBFactory;
@@ -167,9 +166,6 @@ class BLINK_PLATFORM_EXPORT Platform {
// Must return non-null.
virtual WebClipboard* Clipboard();
// Must return non-null.
virtual WebFileUtilities* GetFileUtilities() { return nullptr; }
// May return null if sandbox support is not necessary
virtual WebSandboxSupport* GetSandboxSupport() { return nullptr; }

@@ -1,51 +0,0 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_FILE_UTILITIES_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_FILE_UTILITIES_H_
namespace blink {
class WebString;
struct WebFileInfo;
class WebFileUtilities {
public:
virtual bool GetFileInfo(const WebString& path, WebFileInfo& result) {
return false;
}
protected:
~WebFileUtilities() = default;
};
} // namespace blink
#endif

@@ -30,11 +30,15 @@
#include "third_party/blink/renderer/platform/file_metadata.h"
#include "base/optional.h"
#include "net/base/filename_util.h"
#include "third_party/blink/public/mojom/file/file_utilities.mojom-blink.h"
#include "third_party/blink/public/platform/file_path_conversion.h"
#include "third_party/blink/public/platform/interface_provider.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/web_file_info.h"
#include "third_party/blink/public/platform/web_file_utilities.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
#include "third_party/blink/renderer/platform/wtf/thread_specific.h"
#include "url/gurl.h"
namespace blink {
@@ -56,13 +60,26 @@ bool GetFileModificationTime(const String& path, double& result) {
}
bool GetFileMetadata(const String& path, FileMetadata& metadata) {
WebFileInfo web_file_info;
if (!Platform::Current()->GetFileUtilities()->GetFileInfo(path,
web_file_info))
DEFINE_THREAD_SAFE_STATIC_LOCAL(
ThreadSpecific<mojom::blink::FileUtilitiesHostPtr>, thread_specific_host,
());
auto& host = *thread_specific_host;
if (!host) {
Platform::Current()->GetInterfaceProvider()->GetInterface(
mojo::MakeRequest(&host));
}
base::Optional<base::File::Info> file_info;
if (!host->GetFileInfo(WebStringToFilePath(path), &file_info) || !file_info)
return false;
metadata.modification_time = web_file_info.modification_time;
metadata.length = web_file_info.length;
metadata.type = static_cast<FileMetadata::Type>(web_file_info.type);
// Blink now expects NaN as uninitialized/null Date.
metadata.modification_time = file_info->last_modified.is_null()
? std::numeric_limits<double>::quiet_NaN()
: file_info->last_modified.ToJsTime();
metadata.length = file_info->size;
metadata.type = file_info->is_directory ? FileMetadata::kTypeDirectory
: FileMetadata::kTypeFile;
return true;
}

@@ -3,6 +3,7 @@
# found in the LICENSE file.
typemaps = [
"//mojo/public/cpp/base/file_info.typemap",
"//mojo/public/cpp/base/file_path.typemap",
"//mojo/common/values.typemap",
"//third_party/blink/renderer/core/messaging/blink_cloneable_message.typemap",

@@ -174,10 +174,6 @@ WebClipboard* TestingPlatformSupport::Clipboard() {
return old_platform_ ? old_platform_->Clipboard() : nullptr;
}
WebFileUtilities* TestingPlatformSupport::GetFileUtilities() {
return old_platform_ ? old_platform_->GetFileUtilities() : nullptr;
}
WebIDBFactory* TestingPlatformSupport::IdbFactory() {
return old_platform_ ? old_platform_->IdbFactory() : nullptr;
}

@@ -96,7 +96,6 @@ class TestingPlatformSupport : public Platform {
WebThread* CurrentThread() override;
WebBlobRegistry* GetBlobRegistry() override;
WebClipboard* Clipboard() override;
WebFileUtilities* GetFileUtilities() override;
WebIDBFactory* IdbFactory() override;
WebURLLoaderMockFactory* GetURLLoaderMockFactory() override;
std::unique_ptr<blink::WebURLLoaderFactory> CreateDefaultURLLoaderFactory()