summaryrefslogtreecommitdiff
path: root/www-client/chromium/files/chromium-81-mojom.patch
diff options
context:
space:
mode:
Diffstat (limited to 'www-client/chromium/files/chromium-81-mojom.patch')
-rw-r--r--www-client/chromium/files/chromium-81-mojom.patch303
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>