diff --git a/chromium_src/third_party/blink/renderer/core/origin_trials/origin_trials.cc b/chromium_src/third_party/blink/renderer/core/origin_trials/origin_trials.cc index 37cc5cdd541..468f87a287c 100644 --- a/chromium_src/third_party/blink/renderer/core/origin_trials/origin_trials.cc +++ b/chromium_src/third_party/blink/renderer/core/origin_trials/origin_trials.cc @@ -22,7 +22,6 @@ bool IsTrialDisabledInBrave(const StringView& trial_name) { // When updating also update the array in the overload below. static const char* const kBraveDisabledTrialNames[] = { "DigitalGoods", - "NativeFileSystem2", "SignedExchangeSubresourcePrefetch", "SubresourceWebBundles", }; @@ -39,9 +38,8 @@ bool IsTrialDisabledInBrave(const StringView& trial_name) { bool IsTrialDisabledInBrave(OriginTrialFeature feature) { // When updating also update the array in the overload above. - static const std::array kBraveDisabledTrialFeatures = { + static const std::array kBraveDisabledTrialFeatures = { OriginTrialFeature::kDigitalGoods, - OriginTrialFeature::kNativeFileSystem, OriginTrialFeature::kSignedExchangeSubresourcePrefetch, OriginTrialFeature::kSubresourceWebBundles, }; diff --git a/renderer/brave_content_renderer_client.cc b/renderer/brave_content_renderer_client.cc index caeed54c63b..349dc9b17c5 100644 --- a/renderer/brave_content_renderer_client.cc +++ b/renderer/brave_content_renderer_client.cc @@ -21,7 +21,9 @@ SetRuntimeFeaturesDefaultsBeforeBlinkInitialization() { // These features don't have dedicated WebRuntimeFeatures wrappers. blink::WebRuntimeFeatures::EnableFeatureFromString("DigitalGoods", false); - blink::WebRuntimeFeatures::EnableFeatureFromString("NativeFileSystem", false); + blink::WebRuntimeFeatures::EnableFeatureFromString("FileSystemAccess", false); + blink::WebRuntimeFeatures::EnableFeatureFromString( + "FileSystemAccessAPIExperimental", false); } BraveContentRendererClient::~BraveContentRendererClient() = default; diff --git a/renderer/test/BUILD.gn b/renderer/test/BUILD.gn index 89e44ef01d2..b6fe6b1d378 100644 --- a/renderer/test/BUILD.gn +++ b/renderer/test/BUILD.gn @@ -10,7 +10,7 @@ source_set("browser_tests") { sources = [ "digital_goods_api_browsertest.cc", - "native_file_system_api_browsertest.cc", + "file_system_access_browsertest.cc", "subresource_web_bundles_browsertest.cc", ] diff --git a/renderer/test/file_system_access_browsertest.cc b/renderer/test/file_system_access_browsertest.cc new file mode 100644 index 00000000000..745fde7c638 --- /dev/null +++ b/renderer/test/file_system_access_browsertest.cc @@ -0,0 +1,62 @@ +/* Copyright (c) 2020 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "base/path_service.h" +#include "base/strings/string_util.h" +#include "brave/common/brave_paths.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "net/dns/mock_host_resolver.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "url/gurl.h" + +class FileSystemAccessBrowserTest : public InProcessBrowserTest { + public: + FileSystemAccessBrowserTest() + : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { + brave::RegisterPathProvider(); + base::FilePath test_data_dir; + base::PathService::Get(brave::DIR_TEST_DATA, &test_data_dir); + https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_OK); + https_server_.ServeFilesFromDirectory(test_data_dir); + } + + ~FileSystemAccessBrowserTest() override = default; + + void SetUpOnMainThread() override { + InProcessBrowserTest::SetUpOnMainThread(); + + EXPECT_TRUE(https_server_.Start()); + // Map all hosts to localhost. + host_resolver()->AddRule("*", "127.0.0.1"); + } + + content::WebContents* web_contents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + + content::RenderFrameHost* main_frame() { + return web_contents()->GetMainFrame(); + } + + protected: + net::EmbeddedTestServer https_server_; +}; + +IN_PROC_BROWSER_TEST_F(FileSystemAccessBrowserTest, FilePicker) { + const GURL url = https_server_.GetURL("/simple.html"); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + + auto result = content::EvalJs(main_frame(), "self.showOpenFilePicker()"); + EXPECT_TRUE(result.error.find("self.showOpenFilePicker is not a function") != + std::string::npos) + << result.error; +} diff --git a/renderer/test/native_file_system_api_browsertest.cc b/renderer/test/native_file_system_api_browsertest.cc deleted file mode 100644 index 584f4a04d8f..00000000000 --- a/renderer/test/native_file_system_api_browsertest.cc +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (c) 2020 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "base/path_service.h" -#include "base/strings/strcat.h" -#include "base/strings/string_util.h" -#include "brave/common/brave_paths.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/ui_test_utils.h" -#include "components/embedder_support/switches.h" -#include "content/public/browser/render_frame_host.h" -#include "content/public/browser/web_contents.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/browser_test_utils.h" -#include "content/public/test/url_loader_interceptor.h" -#include "net/dns/mock_host_resolver.h" -#include "net/test/embedded_test_server/embedded_test_server.h" -#include "url/gurl.h" - -class NativeFileSystemAPIBrowserTest : public InProcessBrowserTest { - public: - NativeFileSystemAPIBrowserTest() - : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { - brave::RegisterPathProvider(); - base::FilePath test_data_dir; - base::PathService::Get(brave::DIR_TEST_DATA, &test_data_dir); - https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_OK); - https_server_.ServeFilesFromDirectory(test_data_dir); - } - - ~NativeFileSystemAPIBrowserTest() override = default; - - void SetUpOnMainThread() override { - InProcessBrowserTest::SetUpOnMainThread(); - - EXPECT_TRUE(https_server_.Start()); - // Map all hosts to localhost. - host_resolver()->AddRule("*", "127.0.0.1"); - } - - content::WebContents* web_contents() { - return browser()->tab_strip_model()->GetActiveWebContents(); - } - - content::RenderFrameHost* main_frame() { - return web_contents()->GetMainFrame(); - } - - protected: - net::EmbeddedTestServer https_server_; -}; - -IN_PROC_BROWSER_TEST_F(NativeFileSystemAPIBrowserTest, FilePicker) { - const GURL url = https_server_.GetURL("/simple.html"); - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); - - auto result = content::EvalJs(main_frame(), "self.showOpenFilePicker()"); - EXPECT_TRUE(result.error.find("self.showOpenFilePicker is not a function") != - std::string::npos) - << result.error; -} - -namespace { - -constexpr char kOriginTrialTestPublicKey[] = - "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA="; - -const char kTestHeaders[] = "HTTP/1.1 200 OK\nContent-type: text/html\n\n"; - -constexpr char kOriginTrialTestHostname[] = "https://localhost"; -constexpr char kOriginTrialPage[] = "page.html"; - -// tools/origin_trials/generate_token.py \ -// --expire-days 3650 https://localhost NativeFileSystem2 -constexpr char kOriginTrialToken[] = - "AzOJFCOVN9n5+fKf7X2W8DpbQzs54hnLqPxDGPpm/XyfBZTgOybwDGNWhKMUVPf1qn3t7LTZA3" - "LlRBlFPbMn9AIAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzIiwgImZlYXR1" - "cmUiOiAiTmF0aXZlRmlsZVN5c3RlbTIiLCAiZXhwaXJ5IjogMTkyMDkyMzIxOX0="; - -constexpr char kOriginTrialTestResponseTemplate[] = R"( - - - Native File System Origin Trial Test - META_TAG - - -)"; - -std::string GetContentForURL(const std::string& url) { - if (!base::EndsWith(url, kOriginTrialPage, base::CompareCase::SENSITIVE)) - return std::string(); - - std::string response = kOriginTrialTestResponseTemplate; - std::string meta_tag = - base::StrCat({R"()"}); - base::ReplaceFirstSubstringAfterOffset(&response, 0, "META_TAG", meta_tag); - return response; -} - -bool URLLoaderInterceptorCallback( - content::URLLoaderInterceptor::RequestParams* params) { - content::URLLoaderInterceptor::WriteResponse( - kTestHeaders, GetContentForURL(params->url_request.url.path()), - params->client.get()); - return true; -} - -} // namespace - -class NativeFileSystemOriginTrialBrowserTest : public InProcessBrowserTest { - public: - NativeFileSystemOriginTrialBrowserTest() = default; - ~NativeFileSystemOriginTrialBrowserTest() override = default; - - void SetUpDefaultCommandLine(base::CommandLine* command_line) override { - InProcessBrowserTest::SetUpDefaultCommandLine(command_line); - command_line->AppendSwitchASCII(embedder_support::kOriginTrialPublicKey, - kOriginTrialTestPublicKey); - } - - void SetUpOnMainThread() override { - InProcessBrowserTest::SetUpOnMainThread(); - - // We use a URLLoaderInterceptor, rather than the EmbeddedTestServer, since - // the origin trial token in the response is associated with a fixed - // origin, whereas EmbeddedTestServer serves content on a random port. - url_loader_interceptor_ = std::make_unique( - base::BindRepeating(&URLLoaderInterceptorCallback)); - } - - void TearDownOnMainThread() override { - url_loader_interceptor_.reset(); - InProcessBrowserTest::TearDownOnMainThread(); - } - - content::WebContents* web_contents() { - return browser()->tab_strip_model()->GetActiveWebContents(); - } - - content::RenderFrameHost* main_frame() { - return web_contents()->GetMainFrame(); - } - - protected: - std::unique_ptr url_loader_interceptor_; -}; - -IN_PROC_BROWSER_TEST_F(NativeFileSystemOriginTrialBrowserTest, OriginTrial) { - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), GURL(base::JoinString( - {kOriginTrialTestHostname, kOriginTrialPage}, "/")))); - - auto result = content::EvalJs(main_frame(), "self.showOpenFilePicker()"); - EXPECT_TRUE(result.error.find("self.showOpenFilePicker is not a function") != - std::string::npos) - << result.error; -}