summaryrefslogtreecommitdiffstats
path: root/chromecast/renderer
diff options
context:
space:
mode:
authorgunsch <gunsch@chromium.org>2015-02-18 12:36:03 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-18 20:37:18 +0000
commit3908acad791eb53f2c0f1e7cf4a7abcad8478726 (patch)
treed8a335cbf290df6132f47f82e783a5d2a491d55c /chromecast/renderer
parent5e40b4d70c5f26808881badfbe6e0c0fea9cccc3 (diff)
downloadchromium_src-3908acad791eb53f2c0f1e7cf4a7abcad8478726.zip
chromium_src-3908acad791eb53f2c0f1e7cf4a7abcad8478726.tar.gz
chromium_src-3908acad791eb53f2c0f1e7cf4a7abcad8478726.tar.bz2
Chromecast: add platform hooks to inject browser/renderer message filters.
R=lcwu@chromium.org,byungchul@chromium.org BUG=internal b/19004169 Review URL: https://codereview.chromium.org/917063003 Cr-Commit-Position: refs/heads/master@{#316886}
Diffstat (limited to 'chromecast/renderer')
-rw-r--r--chromecast/renderer/cast_content_renderer_client.cc4
-rw-r--r--chromecast/renderer/cast_content_renderer_client.h10
-rw-r--r--chromecast/renderer/cast_content_renderer_client_simple.cc7
-rw-r--r--chromecast/renderer/cast_render_process_observer.cc19
-rw-r--r--chromecast/renderer/cast_render_process_observer.h11
5 files changed, 46 insertions, 5 deletions
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc
index 1f9cc97..15f82b61 100644
--- a/chromecast/renderer/cast_content_renderer_client.cc
+++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -19,6 +19,7 @@
#include "content/public/renderer/render_view.h"
#include "content/public/renderer/render_view_observer.h"
#include "crypto/nss_util.h"
+#include "ipc/message_filter.h"
#include "third_party/WebKit/public/platform/WebColor.h"
#include "third_party/WebKit/public/web/WebSettings.h"
#include "third_party/WebKit/public/web/WebView.h"
@@ -105,7 +106,8 @@ void CastContentRendererClient::RenderThreadStarted() {
PlatformPollFreemem();
#endif
- cast_observer_.reset(new CastRenderProcessObserver());
+ cast_observer_.reset(
+ new CastRenderProcessObserver(PlatformGetRendererMessageFilters()));
prescient_networking_dispatcher_.reset(
new network_hints::PrescientNetworkingDispatcher());
diff --git a/chromecast/renderer/cast_content_renderer_client.h b/chromecast/renderer/cast_content_renderer_client.h
index 9f0dfbd..c41b98d 100644
--- a/chromecast/renderer/cast_content_renderer_client.h
+++ b/chromecast/renderer/cast_content_renderer_client.h
@@ -10,6 +10,10 @@
#include "base/macros.h"
#include "content/public/renderer/content_renderer_client.h"
+namespace IPC {
+class MessageFilter;
+}
+
namespace network_hints {
class PrescientNetworkingDispatcher;
} // namespace network_hints
@@ -18,6 +22,7 @@ namespace chromecast {
namespace shell {
class CastRenderProcessObserver;
+// Adds any platform-specific bindings to the current frame.
void PlatformAddRendererNativeBindings(blink::WebLocalFrame* frame);
class CastContentRendererClient : public content::ContentRendererClient {
@@ -25,6 +30,11 @@ class CastContentRendererClient : public content::ContentRendererClient {
CastContentRendererClient();
~CastContentRendererClient() override;
+ // Returns any MessageFilters from the platform implementation that should
+ // be added to the render process.
+ std::vector<scoped_refptr<IPC::MessageFilter>>
+ PlatformGetRendererMessageFilters();
+
// ContentRendererClient implementation:
void RenderThreadStarted() override;
void RenderViewCreated(content::RenderView* render_view) override;
diff --git a/chromecast/renderer/cast_content_renderer_client_simple.cc b/chromecast/renderer/cast_content_renderer_client_simple.cc
index e8d40c6..5ad4fcc 100644
--- a/chromecast/renderer/cast_content_renderer_client_simple.cc
+++ b/chromecast/renderer/cast_content_renderer_client_simple.cc
@@ -4,11 +4,18 @@
#include "chromecast/renderer/cast_content_renderer_client.h"
+#include "ipc/message_filter.h"
+
namespace chromecast {
namespace shell {
void PlatformAddRendererNativeBindings(blink::WebLocalFrame* frame) {
}
+std::vector<scoped_refptr<IPC::MessageFilter>>
+CastContentRendererClient::PlatformGetRendererMessageFilters() {
+ return std::vector<scoped_refptr<IPC::MessageFilter>>();
+}
+
} // namespace shell
} // namespace chromecast
diff --git a/chromecast/renderer/cast_render_process_observer.cc b/chromecast/renderer/cast_render_process_observer.cc
index 6063893..316fd616 100644
--- a/chromecast/renderer/cast_render_process_observer.cc
+++ b/chromecast/renderer/cast_render_process_observer.cc
@@ -10,7 +10,10 @@
namespace chromecast {
namespace shell {
-CastRenderProcessObserver::CastRenderProcessObserver() {
+CastRenderProcessObserver::CastRenderProcessObserver(
+ const std::vector<scoped_refptr<IPC::MessageFilter>>&
+ platform_message_filters)
+ : platform_message_filters_(platform_message_filters) {
content::RenderThread* thread = content::RenderThread::Get();
thread->AddObserver(this);
CreateCustomFilters();
@@ -22,22 +25,32 @@ CastRenderProcessObserver::~CastRenderProcessObserver() {
}
void CastRenderProcessObserver::CreateCustomFilters() {
-#if !defined(OS_ANDROID)
content::RenderThread* thread = content::RenderThread::Get();
+#if !defined(OS_ANDROID)
cma_message_filter_proxy_ =
new media::CmaMessageFilterProxy(thread->GetIOMessageLoopProxy());
thread->AddFilter(cma_message_filter_proxy_.get());
#endif // !defined(OS_ANDROID)
+ for (const auto& filter : platform_message_filters_) {
+ thread->AddFilter(filter.get());
+ }
}
void CastRenderProcessObserver::OnRenderProcessShutdown() {
-#if !defined(OS_ANDROID)
content::RenderThread* thread = content::RenderThread::Get();
+#if !defined(OS_ANDROID)
if (cma_message_filter_proxy_.get()) {
thread->RemoveFilter(cma_message_filter_proxy_.get());
cma_message_filter_proxy_ = NULL;
}
#endif // !defined(OS_ANDROID)
+ for (auto& filter : platform_message_filters_) {
+ if (filter.get()) {
+ thread->RemoveFilter(filter.get());
+ filter = nullptr;
+ }
+ }
+ platform_message_filters_.clear();
}
} // namespace shell
diff --git a/chromecast/renderer/cast_render_process_observer.h b/chromecast/renderer/cast_render_process_observer.h
index ca992bc..0c28b581 100644
--- a/chromecast/renderer/cast_render_process_observer.h
+++ b/chromecast/renderer/cast_render_process_observer.h
@@ -5,10 +5,16 @@
#ifndef CHROMECAST_RENDERER_CAST_RENDER_PROCESS_OBSERVER_H_
#define CHROMECAST_RENDERER_CAST_RENDER_PROCESS_OBSERVER_H_
+#include <vector>
+
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "content/public/renderer/render_process_observer.h"
+namespace IPC {
+class MessageFilter;
+}
+
namespace chromecast {
namespace media {
class CmaMessageFilterProxy;
@@ -18,7 +24,9 @@ namespace shell {
class CastRenderProcessObserver : public content::RenderProcessObserver {
public:
- CastRenderProcessObserver();
+ CastRenderProcessObserver(
+ const std::vector<scoped_refptr<IPC::MessageFilter>>&
+ platform_message_filters);
~CastRenderProcessObserver() override;
private:
@@ -30,6 +38,7 @@ class CastRenderProcessObserver : public content::RenderProcessObserver {
#if !defined(OS_ANDROID)
scoped_refptr<media::CmaMessageFilterProxy> cma_message_filter_proxy_;
#endif // !defined(OS_ANDROID)
+ std::vector<scoped_refptr<IPC::MessageFilter>> platform_message_filters_;
DISALLOW_COPY_AND_ASSIGN(CastRenderProcessObserver);
};