Index: components/framelet/renderer/framelet_container.h |
diff --git a/components/framelet/renderer/framelet_container.h b/components/framelet/renderer/framelet_container.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9c9a313291185d8596e3a40d39b1df3b8cd8db0 |
--- /dev/null |
+++ b/components/framelet/renderer/framelet_container.h |
@@ -0,0 +1,117 @@ |
+// Copyright 2015 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 COMPONENTS_FRAMELET_RENDERER_FRAMELET_CONTAINER_H_ |
+#define COMPONENTS_FRAMELET_RENDERER_FRAMELET_CONTAINER_H_ |
+ |
+#include "cc/layers/solid_color_layer.h" |
+#include "cc/layers/ui_resource_layer.h" |
+#include "cc/surfaces/surface_id.h" |
+#include "components/framelet/common/framelet.mojom.h" |
+#include "components/guest_view/common/guest_view_constants.h" |
+#include "components/guest_view/renderer/guest_view_container.h" |
+#include "ipc/ipc_sender.h" |
+#include "mojo/public/cpp/bindings/binding.h" |
+#include "third_party/WebKit/public/platform/WebURLLoader.h" |
+#include "third_party/WebKit/public/platform/WebURLLoaderClient.h" |
+#include "third_party/WebKit/public/web/WebFrameletClient.h" |
+#include "ui/gfx/geometry/size.h" |
+ |
+namespace blink { |
+class WebLayer; |
+} |
+ |
+namespace cc { |
+struct SurfaceSequence; |
+} |
+ |
+namespace gfx { |
+class Image; |
+} |
+ |
+namespace framelet { |
+ |
+enum class ResourceUsageLevel : int; |
+ |
+enum class ResourceMonitoring { ENABLED, DISABLED }; |
+ |
+class FrameletContainer : public guest_view::GuestViewContainer, |
+ public blink::WebFrameletClient, |
+ public framelet::mojom::FrameletClient { |
+ public: |
+ FrameletContainer(content::RenderFrame* render_frame, |
+ const GURL& url, |
+ IPC::Sender* thread_safe_sender); |
+ ~FrameletContainer() override; |
+ |
+ const GURL& url() const { return url_; } |
+ |
+ const gfx::Size& element_size() const { return element_size_; } |
+ |
+ bool focused() const { return focused_; } |
+ bool visible() const { return visible_; } |
+ |
+ blink::WebFocusType focus_type() const { return focus_type_; } |
+ |
+ bool has_guest() const { return framelet_guest_.is_bound(); } |
+ |
+ int guest_instance_id() const { return guest_instance_id_; } |
+ |
+ // WebFrameletClient implementation. |
+ void didAttach(blink::WebFramelet* framelet) override; |
+ void didDetach() override; |
+ void forwardInputEvent(const blink::WebInputEvent* input_event) override; |
+ void frameRectsChanged(const blink::WebRect& frame_rect) override; |
+ void updateFocus(bool focused, blink::WebFocusType focus_type) override; |
+ void updateVisibility(bool visible) override; |
+ |
+ private: |
+ mojo::Map<mojo::String, mojom::ValuePtr> GetParams( |
+ ResourceMonitoring resource_monitoring) const; |
+ void CreateFrameletIfReady(ResourceMonitoring resource_monitoring); |
+ void UpdateClickToPlayLayerPosition(); |
+ |
+ // FrameletClient: |
+ void ReportMemoryUsage(mojom::ResourceUsageLevel usage_level) override; |
+ void SetChildFrameSurface(mus::mojom::SurfaceIdPtr surface_id, |
+ mojo::SizePtr frame_size, |
+ float scale_factor) override; |
+ |
+ // TODO(fsamuel): This is likely to cause tear down issues. |
+ // We should not be holding a raw pointer to |sender|. |
+ static void SatisfyCallbackOnCompositorThread(IPC::Sender* sender, |
+ int host_routing_id, |
+ int element_instance_id, |
+ cc::SurfaceSequence sequence); |
+ static void RequireCallbackOnCompositorThread(IPC::Sender* sender, |
+ int host_routing_id, |
+ int element_instance_id, |
+ cc::SurfaceId id, |
+ cc::SurfaceSequence sequence); |
+ |
+ int guest_instance_id_; |
+ bool focused_; |
+ blink::WebFocusType focus_type_; |
+ bool visible_; |
+ bool killed_; |
+ gfx::Size element_size_; |
+ GURL url_; |
+ IPC::Sender* thread_safe_sender_; |
+ blink::WebFramelet* framelet_; |
+ |
+ scoped_ptr<blink::WebLayer> web_layer_; |
+ scoped_refptr<cc::SolidColorLayer> solid_layer_; |
+ |
+ const gfx::Image& click_to_play_image_; |
+ scoped_refptr<cc::UIResourceLayer> click_to_play_layer_; |
+ |
+ mojom::FrameletPtr framelet_guest_; |
+ mojo::Binding<mojom::FrameletClient> binding_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FrameletContainer); |
+}; |
+ |
+} // namespace framelet |
+ |
+#endif // COMPONENTS_FRAMELET_RENDERER_FRAMELET_CONTAINER_H_ |