summaryrefslogtreecommitdiff
path: root/chromium/content/shell/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/shell/renderer')
-rw-r--r--chromium/content/shell/renderer/DEPS4
-rw-r--r--chromium/content/shell/renderer/shell_content_renderer_client.cc204
-rw-r--r--chromium/content/shell/renderer/shell_content_renderer_client.h59
-rw-r--r--chromium/content/shell/renderer/shell_render_frame_observer.cc32
-rw-r--r--chromium/content/shell/renderer/shell_render_frame_observer.h28
5 files changed, 327 insertions, 0 deletions
diff --git a/chromium/content/shell/renderer/DEPS b/chromium/content/shell/renderer/DEPS
new file mode 100644
index 00000000000..be12c35170d
--- /dev/null
+++ b/chromium/content/shell/renderer/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+ "+components/cdm",
+ "+components/web_cache/renderer",
+]
diff --git a/chromium/content/shell/renderer/shell_content_renderer_client.cc b/chromium/content/shell/renderer/shell_content_renderer_client.cc
new file mode 100644
index 00000000000..0194e1cad69
--- /dev/null
+++ b/chromium/content/shell/renderer/shell_content_renderer_client.cc
@@ -0,0 +1,204 @@
+// Copyright (c) 2012 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/shell/renderer/shell_content_renderer_client.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/check_op.h"
+#include "base/command_line.h"
+#include "base/notreached.h"
+#include "base/strings/string_number_conversions.h"
+#include "components/cdm/renderer/external_clear_key_key_system_properties.h"
+#include "components/web_cache/renderer/web_cache_impl.h"
+#include "content/public/test/test_service.mojom.h"
+#include "content/shell/common/power_monitor_test_impl.h"
+#include "content/shell/common/shell_switches.h"
+#include "content/shell/renderer/shell_render_frame_observer.h"
+#include "mojo/public/cpp/bindings/binder_map.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/system/message_pipe.h"
+#include "net/base/net_errors.h"
+#include "ppapi/buildflags/buildflags.h"
+#include "sandbox/policy/sandbox.h"
+#include "third_party/blink/public/platform/web_url_error.h"
+#include "third_party/blink/public/web/web_testing_support.h"
+#include "third_party/blink/public/web/web_view.h"
+#include "v8/include/v8.h"
+
+#if BUILDFLAG(ENABLE_PLUGINS)
+#include "ppapi/shared_impl/ppapi_switches.h" // nogncheck
+#endif
+
+#if BUILDFLAG(ENABLE_MOJO_CDM)
+#include "base/feature_list.h"
+#include "media/base/media_switches.h"
+#endif
+
+namespace content {
+
+namespace {
+
+// A test service which can be driven by browser tests for various reasons.
+class TestRendererServiceImpl : public mojom::TestService {
+ public:
+ explicit TestRendererServiceImpl(
+ mojo::PendingReceiver<mojom::TestService> receiver)
+ : receiver_(this, std::move(receiver)) {
+ receiver_.set_disconnect_handler(base::BindOnce(
+ &TestRendererServiceImpl::OnConnectionError, base::Unretained(this)));
+ }
+
+ TestRendererServiceImpl(const TestRendererServiceImpl&) = delete;
+ TestRendererServiceImpl& operator=(const TestRendererServiceImpl&) = delete;
+
+ ~TestRendererServiceImpl() override {}
+
+ private:
+ void OnConnectionError() { delete this; }
+
+ // mojom::TestService:
+ void DoSomething(DoSomethingCallback callback) override {
+ // Instead of responding normally, unbind the pipe, write some garbage,
+ // and go away.
+ const std::string kBadMessage = "This is definitely not a valid response!";
+ mojo::ScopedMessagePipeHandle pipe = receiver_.Unbind().PassPipe();
+ MojoResult rv = mojo::WriteMessageRaw(
+ pipe.get(), kBadMessage.data(), kBadMessage.size(), nullptr, 0,
+ MOJO_WRITE_MESSAGE_FLAG_NONE);
+ DCHECK_EQ(rv, MOJO_RESULT_OK);
+
+ // Deletes this.
+ OnConnectionError();
+ }
+
+ void DoTerminateProcess(DoTerminateProcessCallback callback) override {
+ NOTREACHED();
+ }
+
+ void DoCrashImmediately(DoCrashImmediatelyCallback callback) override {
+ NOTREACHED();
+ }
+
+ void CreateFolder(CreateFolderCallback callback) override { NOTREACHED(); }
+
+ void GetRequestorName(GetRequestorNameCallback callback) override {
+ std::move(callback).Run("Not implemented.");
+ }
+
+ void CreateReadOnlySharedMemoryRegion(
+ const std::string& message,
+ CreateReadOnlySharedMemoryRegionCallback callback) override {
+ NOTREACHED();
+ }
+
+ void CreateWritableSharedMemoryRegion(
+ const std::string& message,
+ CreateWritableSharedMemoryRegionCallback callback) override {
+ NOTREACHED();
+ }
+
+ void CreateUnsafeSharedMemoryRegion(
+ const std::string& message,
+ CreateUnsafeSharedMemoryRegionCallback callback) override {
+ NOTREACHED();
+ }
+
+ void IsProcessSandboxed(IsProcessSandboxedCallback callback) override {
+ std::move(callback).Run(sandbox::policy::Sandbox::IsProcessSandboxed());
+ }
+
+ mojo::Receiver<mojom::TestService> receiver_;
+};
+
+void CreateRendererTestService(
+ mojo::PendingReceiver<mojom::TestService> receiver) {
+ // Owns itself.
+ new TestRendererServiceImpl(std::move(receiver));
+}
+
+} // namespace
+
+ShellContentRendererClient::ShellContentRendererClient() {}
+
+ShellContentRendererClient::~ShellContentRendererClient() {
+}
+
+void ShellContentRendererClient::RenderThreadStarted() {
+ web_cache_impl_ = std::make_unique<web_cache::WebCacheImpl>();
+}
+
+void ShellContentRendererClient::ExposeInterfacesToBrowser(
+ mojo::BinderMap* binders) {
+ binders->Add(base::BindRepeating(&CreateRendererTestService),
+ base::ThreadTaskRunnerHandle::Get());
+ binders->Add(
+ base::BindRepeating(&PowerMonitorTestImpl::MakeSelfOwnedReceiver),
+ base::ThreadTaskRunnerHandle::Get());
+ binders->Add(base::BindRepeating(&web_cache::WebCacheImpl::BindReceiver,
+ base::Unretained(web_cache_impl_.get())),
+ base::ThreadTaskRunnerHandle::Get());
+}
+
+void ShellContentRendererClient::RenderFrameCreated(RenderFrame* render_frame) {
+ // TODO(danakj): The ShellRenderFrameObserver is doing stuff only for
+ // browser tests. If we only create that for browser tests then the override
+ // of this method in WebTestContentRendererClient would not be needed.
+ new ShellRenderFrameObserver(render_frame);
+}
+
+void ShellContentRendererClient::PrepareErrorPage(
+ RenderFrame* render_frame,
+ const blink::WebURLError& error,
+ const std::string& http_method,
+ content::mojom::AlternativeErrorPageOverrideInfoPtr
+ alternative_error_page_info,
+ std::string* error_html) {
+ if (error_html && error_html->empty()) {
+ *error_html =
+ "<head><title>Error</title></head><body>Could not load the requested "
+ "resource.<br/>Error code: " +
+ base::NumberToString(error.reason()) +
+ (error.reason() < 0 ? " (" + net::ErrorToString(error.reason()) + ")"
+ : "") +
+ "</body>";
+ }
+}
+
+void ShellContentRendererClient::PrepareErrorPageForHttpStatusError(
+ content::RenderFrame* render_frame,
+ const blink::WebURLError& error,
+ const std::string& http_method,
+ int http_status,
+ content::mojom::AlternativeErrorPageOverrideInfoPtr
+ alternative_error_page_info,
+ std::string* error_html) {
+ if (error_html) {
+ *error_html =
+ "<head><title>Error</title></head><body>Server returned HTTP status " +
+ base::NumberToString(http_status) + "</body>";
+ }
+}
+
+void ShellContentRendererClient::DidInitializeWorkerContextOnWorkerThread(
+ v8::Local<v8::Context> context) {
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kExposeInternalsForTesting)) {
+ blink::WebTestingSupport::InjectInternalsObject(context);
+ }
+}
+
+#if BUILDFLAG(ENABLE_MOJO_CDM)
+void ShellContentRendererClient::GetSupportedKeySystems(
+ media::GetSupportedKeySystemsCB cb) {
+ media::KeySystemPropertiesVector key_systems;
+ if (base::FeatureList::IsEnabled(media::kExternalClearKeyForTesting))
+ key_systems.push_back(std::make_unique<cdm::ExternalClearKeyProperties>());
+ std::move(cb).Run(std::move(key_systems));
+}
+#endif
+
+} // namespace content
diff --git a/chromium/content/shell/renderer/shell_content_renderer_client.h b/chromium/content/shell/renderer/shell_content_renderer_client.h
new file mode 100644
index 00000000000..617af079d6c
--- /dev/null
+++ b/chromium/content/shell/renderer/shell_content_renderer_client.h
@@ -0,0 +1,59 @@
+// Copyright (c) 2012 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_SHELL_RENDERER_SHELL_CONTENT_RENDERER_CLIENT_H_
+#define CONTENT_SHELL_RENDERER_SHELL_CONTENT_RENDERER_CLIENT_H_
+
+#include <memory>
+#include <string>
+
+#include "build/build_config.h"
+#include "content/public/common/alternative_error_page_override_info.mojom-forward.h"
+#include "content/public/renderer/content_renderer_client.h"
+#include "media/mojo/buildflags.h"
+
+namespace web_cache {
+class WebCacheImpl;
+}
+
+namespace content {
+
+class ShellContentRendererClient : public ContentRendererClient {
+ public:
+ ShellContentRendererClient();
+ ~ShellContentRendererClient() override;
+
+ // ContentRendererClient implementation.
+ void RenderThreadStarted() override;
+ void ExposeInterfacesToBrowser(mojo::BinderMap* binders) override;
+ void RenderFrameCreated(RenderFrame* render_frame) override;
+ void PrepareErrorPage(RenderFrame* render_frame,
+ const blink::WebURLError& error,
+ const std::string& http_method,
+ content::mojom::AlternativeErrorPageOverrideInfoPtr
+ alternative_error_page_info,
+ std::string* error_html) override;
+ void PrepareErrorPageForHttpStatusError(
+ content::RenderFrame* render_frame,
+ const blink::WebURLError& error,
+ const std::string& http_method,
+ int http_status,
+ content::mojom::AlternativeErrorPageOverrideInfoPtr
+ alternative_error_page_info,
+ std::string* error_html) override;
+
+ void DidInitializeWorkerContextOnWorkerThread(
+ v8::Local<v8::Context> context) override;
+
+#if BUILDFLAG(ENABLE_MOJO_CDM)
+ void GetSupportedKeySystems(media::GetSupportedKeySystemsCB cb) override;
+#endif
+
+ private:
+ std::unique_ptr<web_cache::WebCacheImpl> web_cache_impl_;
+};
+
+} // namespace content
+
+#endif // CONTENT_SHELL_RENDERER_SHELL_CONTENT_RENDERER_CLIENT_H_
diff --git a/chromium/content/shell/renderer/shell_render_frame_observer.cc b/chromium/content/shell/renderer/shell_render_frame_observer.cc
new file mode 100644
index 00000000000..ed6134a67e3
--- /dev/null
+++ b/chromium/content/shell/renderer/shell_render_frame_observer.cc
@@ -0,0 +1,32 @@
+// 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 "content/shell/renderer/shell_render_frame_observer.h"
+
+#include "base/command_line.h"
+#include "content/public/renderer/render_frame.h"
+#include "content/public/renderer/render_frame_observer.h"
+#include "content/shell/common/shell_switches.h"
+#include "third_party/blink/public/web/web_testing_support.h"
+
+namespace content {
+
+ShellRenderFrameObserver::ShellRenderFrameObserver(RenderFrame* render_frame)
+ : RenderFrameObserver(render_frame) {}
+
+ShellRenderFrameObserver::~ShellRenderFrameObserver() = default;
+
+void ShellRenderFrameObserver::DidClearWindowObject() {
+ auto& cmd = *base::CommandLine::ForCurrentProcess();
+ if (cmd.HasSwitch(switches::kExposeInternalsForTesting)) {
+ blink::WebTestingSupport::InjectInternalsObject(
+ render_frame()->GetWebFrame());
+ }
+}
+
+void ShellRenderFrameObserver::OnDestruct() {
+ delete this;
+}
+
+} // namespace content
diff --git a/chromium/content/shell/renderer/shell_render_frame_observer.h b/chromium/content/shell/renderer/shell_render_frame_observer.h
new file mode 100644
index 00000000000..2f40722cf4b
--- /dev/null
+++ b/chromium/content/shell/renderer/shell_render_frame_observer.h
@@ -0,0 +1,28 @@
+// 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 CONTENT_SHELL_RENDERER_SHELL_RENDER_FRAME_OBSERVER_H_
+#define CONTENT_SHELL_RENDERER_SHELL_RENDER_FRAME_OBSERVER_H_
+
+#include "content/public/renderer/render_frame_observer.h"
+
+namespace content {
+
+class ShellRenderFrameObserver : public RenderFrameObserver {
+ public:
+ explicit ShellRenderFrameObserver(RenderFrame* frame);
+ ~ShellRenderFrameObserver() override;
+
+ ShellRenderFrameObserver(const ShellRenderFrameObserver&) = delete;
+ ShellRenderFrameObserver& operator=(const ShellRenderFrameObserver&) = delete;
+
+ private:
+ // RenderFrameObserver implementation.
+ void DidClearWindowObject() override;
+ void OnDestruct() override;
+};
+
+} // namespace content
+
+#endif // CONTENT_SHELL_RENDERER_SHELL_RENDER_FRAME_OBSERVER_H_