diff options
Diffstat (limited to 'www-client/chromium/files/chromium-81-mojom.patch')
-rw-r--r-- | www-client/chromium/files/chromium-81-mojom.patch | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/www-client/chromium/files/chromium-81-mojom.patch b/www-client/chromium/files/chromium-81-mojom.patch new file mode 100644 index 000000000000..e6675931fbc8 --- /dev/null +++ b/www-client/chromium/files/chromium-81-mojom.patch @@ -0,0 +1,303 @@ +Add missing files in tarball. + +diff --git a/chrome/test/data/webui/mojo/OWNERS b/chrome/test/data/webui/mojo/OWNERS +new file mode 100644 +index 000000000000..08850f421205 +--- /dev/null ++++ b/chrome/test/data/webui/mojo/OWNERS +@@ -0,0 +1,2 @@ ++per-file *.mojom=set noparent ++per-file *.mojom=file://ipc/SECURITY_OWNERS +diff --git a/chrome/test/data/webui/mojo/foobar.mojom b/chrome/test/data/webui/mojo/foobar.mojom +new file mode 100644 +index 000000000000..446d365af8fb +--- /dev/null ++++ b/chrome/test/data/webui/mojo/foobar.mojom +@@ -0,0 +1,16 @@ ++// Copyright 2019 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. ++ ++// Test Mojo interfaces for MojoWebUIControllerBrowserTest. ++ ++module test.mojom; ++ ++interface Foo { ++ GetFoo() => (string value); ++}; ++ ++interface Bar { ++ GetBar() => (string value); ++}; ++ +diff --git a/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc b/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc +new file mode 100644 +index 000000000000..658a54ace278 +--- /dev/null ++++ b/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc +@@ -0,0 +1,253 @@ ++// Copyright 2019 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 "ui/webui/mojo_web_ui_controller.h" ++ ++#include "base/memory/ref_counted_memory.h" ++#include "base/path_service.h" ++#include "base/run_loop.h" ++#include "base/threading/sequenced_task_runner_handle.h" ++#include "chrome/browser/bad_message.h" ++#include "chrome/browser/chrome_browser_interface_binders.h" ++#include "chrome/browser/chrome_content_browser_client.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/data/grit/webui_test_resources.h" ++#include "chrome/test/data/webui/mojo/foobar.mojom.h" ++#include "content/public/browser/render_process_host.h" ++#include "content/public/browser/render_process_host_observer.h" ++#include "content/public/browser/web_contents.h" ++#include "content/public/browser/web_ui_controller_factory.h" ++#include "content/public/browser/web_ui_data_source.h" ++#include "content/public/common/content_client.h" ++#include "content/public/common/url_constants.h" ++#include "content/public/test/browser_test_utils.h" ++#include "content/public/test/no_renderer_crashes_assertion.h" ++#include "content/public/test/test_utils.h" ++#include "services/service_manager/public/cpp/binder_map.h" ++#include "testing/gtest/include/gtest/gtest.h" ++#include "ui/base/resource/resource_bundle.h" ++#include "url/gurl.h" ++ ++namespace { ++ ++// WebUIController that provides the Foo Mojo API. ++class FooUI : public ui::MojoWebUIController, public ::test::mojom::Foo { ++ public: ++ explicit FooUI(content::WebUI* web_ui) ++ : ui::MojoWebUIController(web_ui), foo_receiver_(this) { ++ content::WebUIDataSource* data_source = ++ content::WebUIDataSource::Create("foo"); ++ data_source->SetDefaultResource(IDR_MOJO_WEB_UI_CONTROLLER_TEST_HTML); ++ data_source->DisableContentSecurityPolicy(); ++ data_source->AddResourcePath("foobar.mojom-lite.js", ++ IDR_FOOBAR_MOJO_LITE_JS); ++ content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(), ++ data_source); ++ } ++ ++ void BindInterface(mojo::PendingReceiver<::test::mojom::Foo> receiver) { ++ foo_receiver_.Bind(std::move(receiver)); ++ } ++ ++ // ::test::mojom::Foo: ++ void GetFoo(GetFooCallback callback) override { ++ std::move(callback).Run("foofoo"); ++ } ++ ++ WEB_UI_CONTROLLER_TYPE_DECL(); ++ ++ private: ++ mojo::Receiver<::test::mojom::Foo> foo_receiver_; ++ ++ DISALLOW_COPY_AND_ASSIGN(FooUI); ++}; ++ ++WEB_UI_CONTROLLER_TYPE_IMPL(FooUI) ++ ++// WebUIController that provides the Foo and Bar Mojo APIs. ++class FooBarUI : public ui::MojoWebUIController, ++ public ::test::mojom::Foo, ++ public ::test::mojom::Bar { ++ public: ++ explicit FooBarUI(content::WebUI* web_ui) ++ : ui::MojoWebUIController(web_ui), ++ foo_receiver_(this), ++ bar_receiver_(this) { ++ content::WebUIDataSource* data_source = ++ content::WebUIDataSource::Create("foobar"); ++ data_source->SetDefaultResource(IDR_MOJO_WEB_UI_CONTROLLER_TEST_HTML); ++ data_source->DisableContentSecurityPolicy(); ++ data_source->AddResourcePath("foobar.mojom-lite.js", ++ IDR_FOOBAR_MOJO_LITE_JS); ++ content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(), ++ data_source); ++ } ++ ++ void BindInterface(mojo::PendingReceiver<::test::mojom::Foo> receiver) { ++ foo_receiver_.Bind(std::move(receiver)); ++ } ++ ++ void BindInterface(mojo::PendingReceiver<::test::mojom::Bar> receiver) { ++ bar_receiver_.Bind(std::move(receiver)); ++ } ++ ++ // ::test::mojom::Foo: ++ void GetFoo(GetFooCallback callback) override { ++ std::move(callback).Run("foobarfoo"); ++ } ++ ++ // ::test::mojom::Bar: ++ void GetBar(GetBarCallback callback) override { ++ std::move(callback).Run("foobarbar"); ++ } ++ ++ WEB_UI_CONTROLLER_TYPE_DECL(); ++ ++ private: ++ mojo::Receiver<::test::mojom::Foo> foo_receiver_; ++ mojo::Receiver<::test::mojom::Bar> bar_receiver_; ++ ++ DISALLOW_COPY_AND_ASSIGN(FooBarUI); ++}; ++ ++WEB_UI_CONTROLLER_TYPE_IMPL(FooBarUI) ++ ++// WebUIControllerFactory that serves our TestWebUIController. ++class TestWebUIControllerFactory : public content::WebUIControllerFactory { ++ public: ++ TestWebUIControllerFactory() = default; ++ ++ std::unique_ptr<content::WebUIController> CreateWebUIControllerForURL( ++ content::WebUI* web_ui, ++ const GURL& url) override { ++ if (url.host_piece() == "foo") ++ return std::make_unique<FooUI>(web_ui); ++ if (url.host_piece() == "foobar") ++ return std::make_unique<FooBarUI>(web_ui); ++ ++ return nullptr; ++ } ++ ++ content::WebUI::TypeID GetWebUIType(content::BrowserContext* browser_context, ++ const GURL& url) override { ++ if (url.SchemeIs(content::kChromeUIScheme)) ++ return reinterpret_cast<content::WebUI::TypeID>(1); ++ ++ return content::WebUI::kNoWebUI; ++ } ++ ++ bool UseWebUIForURL(content::BrowserContext* browser_context, ++ const GURL& url) override { ++ return url.SchemeIs(content::kChromeUIScheme); ++ } ++ bool UseWebUIBindingsForURL(content::BrowserContext* browser_context, ++ const GURL& url) override { ++ return url.SchemeIs(content::kChromeUIScheme); ++ } ++ ++ private: ++ DISALLOW_COPY_AND_ASSIGN(TestWebUIControllerFactory); ++}; ++ ++} // namespace ++ ++class MojoWebUIControllerBrowserTest : public InProcessBrowserTest { ++ public: ++ MojoWebUIControllerBrowserTest() { ++ factory_ = std::make_unique<TestWebUIControllerFactory>(); ++ content::WebUIControllerFactory::RegisterFactory(factory_.get()); ++ } ++ ++ void SetUpOnMainThread() override { ++ base::FilePath pak_path; ++ ASSERT_TRUE(base::PathService::Get(base::DIR_MODULE, &pak_path)); ++ pak_path = pak_path.AppendASCII("browser_tests.pak"); ++ ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath( ++ pak_path, ui::SCALE_FACTOR_NONE); ++ ++ content::SetBrowserClientForTesting(&test_content_browser_client_); ++ } ++ ++ private: ++ class TestContentBrowserClient : public ChromeContentBrowserClient { ++ public: ++ TestContentBrowserClient() = default; ++ TestContentBrowserClient(const TestContentBrowserClient&) = delete; ++ TestContentBrowserClient& operator=(const TestContentBrowserClient&) = ++ delete; ++ ~TestContentBrowserClient() override = default; ++ ++ void RegisterBrowserInterfaceBindersForFrame( ++ content::RenderFrameHost* render_frame_host, ++ service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) ++ override { ++ ChromeContentBrowserClient::RegisterBrowserInterfaceBindersForFrame( ++ render_frame_host, map); ++ chrome::internal::RegisterWebUIControllerInterfaceBinder< ++ ::test::mojom::Bar, FooBarUI>(map); ++ chrome::internal::RegisterWebUIControllerInterfaceBinder< ++ ::test::mojom::Foo, FooUI, FooBarUI>(map); ++ } ++ }; ++ ++ std::unique_ptr<TestWebUIControllerFactory> factory_; ++ ++ TestContentBrowserClient test_content_browser_client_; ++}; ++ ++// Attempting to access bindings succeeds for 2 allowed interfaces. ++IN_PROC_BROWSER_TEST_F(MojoWebUIControllerBrowserTest, BindingsAccess) { ++ content::WebContents* web_contents = ++ browser()->tab_strip_model()->GetActiveWebContents(); ++ ++ ASSERT_TRUE(NavigateToURL(web_contents, content::GetWebUIURL("foobar"))); ++ ++ EXPECT_EQ("foobarfoo", ++ content::EvalJs(web_contents, ++ "(async () => {" ++ " let fooRemote = test.mojom.Foo.getRemote(true);" ++ " let resp = await fooRemote.getFoo();" ++ " return resp.value;" ++ "})()")); ++ ++ EXPECT_EQ("foobarbar", ++ content::EvalJs(web_contents, ++ "(async () => {" ++ " let barRemote = test.mojom.Bar.getRemote(true);" ++ " let resp = await barRemote.getBar();" ++ " return resp.value;" ++ "})()")); ++} ++ ++// Attempting to access bindings crashes the renderer when access not allowed. ++IN_PROC_BROWSER_TEST_F(MojoWebUIControllerBrowserTest, ++ BindingsAccessViolation) { ++ content::WebContents* web_contents = ++ browser()->tab_strip_model()->GetActiveWebContents(); ++ ++ ASSERT_TRUE(NavigateToURL(web_contents, content::GetWebUIURL("foo"))); ++ ++ EXPECT_EQ("foofoo", ++ content::EvalJs(web_contents, ++ "(async () => {" ++ " let fooRemote = test.mojom.Foo.getRemote(true);" ++ " let resp = await fooRemote.getFoo();" ++ " return resp.value;" ++ "})()")); ++ ++ content::ScopedAllowRendererCrashes allow; ++ ++ // Attempt to get a remote for a disallowed interface. ++ EXPECT_FALSE( ++ content::EvalJs(web_contents, ++ "(async () => {" ++ " let barRemote = test.mojom.Bar.getRemote(true);" ++ " let resp = await barRemote.getBar();" ++ " return resp.value;" ++ "})()") ++ .error.empty()); ++ EXPECT_TRUE(web_contents->IsCrashed()); ++} +diff --git a/chrome/test/data/webui/mojo/mojo_web_ui_controller_test.html b/chrome/test/data/webui/mojo/mojo_web_ui_controller_test.html +new file mode 100644 +index 000000000000..4638ebc261c7 +--- /dev/null ++++ b/chrome/test/data/webui/mojo/mojo_web_ui_controller_test.html +@@ -0,0 +1,6 @@ ++<html> ++<head> ++<script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"></script> ++<script src="/foobar.mojom-lite.js"></script> ++</head> ++</html> |