summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/display/window_tree_host_manager.cc10
-rw-r--r--cc/layers/texture_layer_impl.cc3
-rw-r--r--cc/layers/texture_layer_impl_unittest.cc6
-rw-r--r--cc/output/output_surface.h5
-rw-r--r--cc/test/fake_proxy.h1
-rw-r--r--cc/test/layer_test_common.h4
-rw-r--r--cc/trees/layer_tree_host.cc4
-rw-r--r--cc/trees/layer_tree_host.h2
-rw-r--r--cc/trees/layer_tree_host_impl.cc1
-rw-r--r--cc/trees/layer_tree_host_impl.h8
-rw-r--r--cc/trees/layer_tree_impl.cc4
-rw-r--r--cc/trees/layer_tree_impl.h2
-rw-r--r--cc/trees/proxy.h2
-rw-r--r--cc/trees/proxy_main.cc4
-rw-r--r--cc/trees/proxy_main.h1
-rw-r--r--cc/trees/remote_channel_impl.cc4
-rw-r--r--cc/trees/remote_channel_impl.h1
-rw-r--r--cc/trees/single_thread_proxy.cc4
-rw-r--r--cc/trees/single_thread_proxy.h1
-rw-r--r--ui/compositor/compositor.cc5
-rw-r--r--ui/compositor/compositor.h2
21 files changed, 62 insertions, 12 deletions
diff --git a/ash/display/window_tree_host_manager.cc b/ash/display/window_tree_host_manager.cc
index 4b59621..13e143b 100644
--- a/ash/display/window_tree_host_manager.cc
+++ b/ash/display/window_tree_host_manager.cc
@@ -775,6 +775,16 @@ void WindowTreeHostManager::PostDisplayConfigurationChange() {
: layout.primary_id);
}
}
+
+ for (const gfx::Display& display : display_manager->active_display_list()) {
+ bool output_is_secure =
+ !display_manager->IsInMirrorMode() && display.IsInternal();
+ GetAshWindowTreeHostForDisplayId(display.id())
+ ->AsWindowTreeHost()
+ ->compositor()
+ ->SetOutputIsSecure(output_is_secure);
+ }
+
FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged());
UpdateMouseLocationAfterDisplayChange();
}
diff --git a/cc/layers/texture_layer_impl.cc b/cc/layers/texture_layer_impl.cc
index c1a688e..12efed0 100644
--- a/cc/layers/texture_layer_impl.cc
+++ b/cc/layers/texture_layer_impl.cc
@@ -166,8 +166,7 @@ void TextureLayerImpl::AppendQuads(RenderPass* render_pass,
return;
if (!texture_mailbox_.secure_output_only() ||
- (layer_tree_impl()->output_surface()->is_secure() &&
- !AnchestorHasCopyRequest())) {
+ (layer_tree_impl()->OutputIsSecure() && !AnchestorHasCopyRequest())) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
ResourceId id =
diff --git a/cc/layers/texture_layer_impl_unittest.cc b/cc/layers/texture_layer_impl_unittest.cc
index 5b3bac8..997a5c0 100644
--- a/cc/layers/texture_layer_impl_unittest.cc
+++ b/cc/layers/texture_layer_impl_unittest.cc
@@ -103,7 +103,7 @@ TEST(TextureLayerImplTest, Occlusion) {
}
}
-TEST(TextureLayerImplTest, Protected) {
+TEST(TextureLayerImplTest, OutputIsSecure) {
gfx::Size layer_size(1000, 1000);
gfx::Size viewport_size(1000, 1000);
@@ -138,7 +138,7 @@ TEST(TextureLayerImplTest, Protected) {
}
{
- impl.SetSecureOutputSurface(true);
+ impl.SetOutputIsSecure(true);
gfx::Rect occluded;
impl.AppendQuadsWithOcclusion(texture_layer_impl, occluded);
@@ -148,7 +148,7 @@ TEST(TextureLayerImplTest, Protected) {
}
{
- impl.SetSecureOutputSurface(false);
+ impl.SetOutputIsSecure(false);
impl.RequestCopyOfOutput();
gfx::Rect occluded;
impl.AppendQuadsWithOcclusion(texture_layer_impl, occluded);
diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h
index 64cb19e..43cacfe 100644
--- a/cc/output/output_surface.h
+++ b/cc/output/output_surface.h
@@ -167,10 +167,6 @@ class CC_EXPORT OutputSurface : public base::trace_event::MemoryDumpProvider {
bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
base::trace_event::ProcessMemoryDump* pmd) override;
- // Is this output surface associated with a secure display.
- bool is_secure() const { return is_secure_; }
- void set_is_secure(bool is_secure) { is_secure_ = is_secure; }
-
protected:
OutputSurfaceClient* client_;
@@ -196,7 +192,6 @@ class CC_EXPORT OutputSurface : public base::trace_event::MemoryDumpProvider {
private:
bool external_stencil_test_enabled_;
- bool is_secure_ = false;
base::WeakPtrFactory<OutputSurface> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(OutputSurface);
diff --git a/cc/test/fake_proxy.h b/cc/test/fake_proxy.h
index 040c12b..cbb3ead 100644
--- a/cc/test/fake_proxy.h
+++ b/cc/test/fake_proxy.h
@@ -45,6 +45,7 @@ class FakeProxy : public Proxy {
void UpdateTopControlsState(TopControlsState constraints,
TopControlsState current,
bool animate) override {}
+ void SetOutputIsSecure(bool output_is_secure) override {}
virtual RendererCapabilities& GetRendererCapabilities();
diff --git a/cc/test/layer_test_common.h b/cc/test/layer_test_common.h
index 39d2168..af93e73 100644
--- a/cc/test/layer_test_common.h
+++ b/cc/test/layer_test_common.h
@@ -139,8 +139,8 @@ class LayerTestCommon {
void RequestCopyOfOutput();
- void SetSecureOutputSurface(bool secure_output) {
- host_->host_impl()->output_surface()->set_is_secure(secure_output);
+ void SetOutputIsSecure(bool output_is_secure) {
+ host_->host_impl()->set_output_is_secure(output_is_secure);
}
OutputSurface* output_surface() const {
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index ced57c2..16197c3 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -613,6 +613,10 @@ void LayerTreeHost::SetNeedsDisplayOnAllLayers() {
}
}
+void LayerTreeHost::SetOutputIsSecure(bool output_is_secure) {
+ proxy_->SetOutputIsSecure(output_is_secure);
+}
+
const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const {
return proxy_->GetRendererCapabilities();
}
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index ffb597b..8af3dcb 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -182,6 +182,8 @@ class CC_EXPORT LayerTreeHost : public MutatorHostClient {
void SetNeedsDisplayOnAllLayers();
+ void SetOutputIsSecure(bool output_is_secure);
+
void CollectRenderingStats(RenderingStats* stats) const;
RenderingStatsInstrumentation* rendering_stats_instrumentation() const {
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 7e7adfe..efc8eb0 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -226,6 +226,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())),
max_memory_needed_bytes_(0),
resourceless_software_draw_(false),
+ output_is_secure_(false),
animation_host_(),
rendering_stats_instrumentation_(rendering_stats_instrumentation),
micro_benchmark_controller_(this),
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index f9ad198..a7d6b08 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -580,6 +580,12 @@ class CC_EXPORT LayerTreeHostImpl
bool is_direct_manipulation,
ScrollTree* scroll_tree);
+ void set_output_is_secure(bool output_is_secure) {
+ output_is_secure_ = output_is_secure;
+ }
+
+ bool output_is_secure() const { return output_is_secure_; }
+
// Record main frame timing information.
// |start_of_main_frame_args| is the BeginFrameArgs of the beginning of the
// main frame (ie the frame that kicked off the main frame).
@@ -809,6 +815,8 @@ class CC_EXPORT LayerTreeHostImpl
gfx::Rect viewport_rect_for_tile_priority_;
bool resourceless_software_draw_;
+ bool output_is_secure_;
+
gfx::Rect viewport_damage_rect_;
scoped_ptr<AnimationHost> animation_host_;
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 35406d4..e89c84d 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -1391,6 +1391,10 @@ bool LayerTreeImpl::IsUIResourceOpaque(UIResourceId uid) const {
return layer_tree_host_impl_->IsUIResourceOpaque(uid);
}
+bool LayerTreeImpl::OutputIsSecure() const {
+ return layer_tree_host_impl_->output_is_secure();
+}
+
void LayerTreeImpl::ProcessUIResourceRequestQueue() {
for (const auto& req : ui_resource_request_queue_) {
switch (req.GetType()) {
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
index ce68146..a137011 100644
--- a/cc/trees/layer_tree_impl.h
+++ b/cc/trees/layer_tree_impl.h
@@ -367,6 +367,8 @@ class CC_EXPORT LayerTreeImpl {
bool IsUIResourceOpaque(UIResourceId uid) const;
+ bool OutputIsSecure() const;
+
void RegisterPictureLayerImpl(PictureLayerImpl* layer);
void UnregisterPictureLayerImpl(PictureLayerImpl* layer);
const std::vector<PictureLayerImpl*>& picture_layers() const {
diff --git a/cc/trees/proxy.h b/cc/trees/proxy.h
index cb7152d..27144aa 100644
--- a/cc/trees/proxy.h
+++ b/cc/trees/proxy.h
@@ -83,6 +83,8 @@ class CC_EXPORT Proxy {
TopControlsState current,
bool animate) = 0;
+ virtual void SetOutputIsSecure(bool output_is_secure) = 0;
+
// Testing hooks
virtual bool MainFrameWillHappenForTesting() = 0;
};
diff --git a/cc/trees/proxy_main.cc b/cc/trees/proxy_main.cc
index 63bac73..c5821f3 100644
--- a/cc/trees/proxy_main.cc
+++ b/cc/trees/proxy_main.cc
@@ -449,6 +449,10 @@ void ProxyMain::UpdateTopControlsState(TopControlsState constraints,
channel_main_->UpdateTopControlsStateOnImpl(constraints, current, animate);
}
+void ProxyMain::SetOutputIsSecure(bool output_is_secure) {
+ NOTREACHED() << "Only used by SingleProxyMain";
+}
+
bool ProxyMain::SendCommitRequestToImplThreadIfNeeded(
CommitPipelineStage required_stage) {
DCHECK(IsMainThread());
diff --git a/cc/trees/proxy_main.h b/cc/trees/proxy_main.h
index 560d26b..1b627dd 100644
--- a/cc/trees/proxy_main.h
+++ b/cc/trees/proxy_main.h
@@ -113,6 +113,7 @@ class CC_EXPORT ProxyMain : public Proxy {
void UpdateTopControlsState(TopControlsState constraints,
TopControlsState current,
bool animate) override;
+ void SetOutputIsSecure(bool output_is_secure) override;
// This sets the channel used by ProxyMain to communicate with ProxyImpl.
void SetChannel(scoped_ptr<ChannelMain> channel_main);
diff --git a/cc/trees/remote_channel_impl.cc b/cc/trees/remote_channel_impl.cc
index 4708c1e..5d98369 100644
--- a/cc/trees/remote_channel_impl.cc
+++ b/cc/trees/remote_channel_impl.cc
@@ -306,6 +306,10 @@ void RemoteChannelImpl::UpdateTopControlsState(TopControlsState constraints,
NOTREACHED() << "Should not be called on the remote client LayerTreeHost";
}
+void RemoteChannelImpl::SetOutputIsSecure(bool output_is_secure) {
+ NOTREACHED() << "Only used by SingleProxyMain";
+}
+
bool RemoteChannelImpl::MainFrameWillHappenForTesting() {
DCHECK(task_runner_provider_->IsMainThread());
bool main_frame_will_happen;
diff --git a/cc/trees/remote_channel_impl.h b/cc/trees/remote_channel_impl.h
index 79e19ec..8989776 100644
--- a/cc/trees/remote_channel_impl.h
+++ b/cc/trees/remote_channel_impl.h
@@ -162,6 +162,7 @@ class CC_EXPORT RemoteChannelImpl : public ChannelImpl,
void UpdateTopControlsState(TopControlsState constraints,
TopControlsState current,
bool animate) override;
+ void SetOutputIsSecure(bool output_is_secure) override;
bool MainFrameWillHappenForTesting() override;
// Called on impl thread.
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 7c1d821..fa193bf 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -886,6 +886,10 @@ void SingleThreadProxy::UpdateTopControlsState(TopControlsState constraints,
NOTREACHED() << "Top Controls are used only in threaded mode";
}
+void SingleThreadProxy::SetOutputIsSecure(bool output_is_secure) {
+ layer_tree_host_impl_->set_output_is_secure(output_is_secure);
+}
+
void SingleThreadProxy::DidFinishImplFrame() {
layer_tree_host_impl_->DidFinishImplFrame();
#if DCHECK_IS_ON()
diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h
index 66e0075..b5477f2 100644
--- a/cc/trees/single_thread_proxy.h
+++ b/cc/trees/single_thread_proxy.h
@@ -61,6 +61,7 @@ class CC_EXPORT SingleThreadProxy : public Proxy,
void UpdateTopControlsState(TopControlsState constraints,
TopControlsState current,
bool animate) override;
+ void SetOutputIsSecure(bool output_is_secure) override;
// SchedulerClient implementation
void WillBeginImplFrame(const BeginFrameArgs& args) override;
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index a942a89..9c49269 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -468,6 +468,11 @@ void Compositor::DidAbortSwapBuffers() {
OnCompositingAborted(this));
}
+void Compositor::SetOutputIsSecure(bool output_is_secure) {
+ host_->SetOutputIsSecure(output_is_secure);
+ host_->SetNeedsRedraw();
+}
+
void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) {
FOR_EACH_OBSERVER(CompositorBeginFrameObserver, begin_frame_observer_list_,
OnSendBeginFrame(args));
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 5222b41..acae0be 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -318,6 +318,8 @@ class COMPOSITOR_EXPORT Compositor
bool IsLocked() { return compositor_lock_ != NULL; }
+ void SetOutputIsSecure(bool output_is_secure);
+
const cc::LayerTreeDebugState& GetLayerTreeDebugState() const;
void SetLayerTreeDebugState(const cc::LayerTreeDebugState& debug_state);
const cc::RendererSettings& GetRendererSettings() const;