1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/surface_embed/renderer/surface_embed_web_plugin.h"
#include "base/notimplemented.h"
#include "cc/layers/solid_color_layer.h"
#include "third_party/blink/public/web/web_plugin_container.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/geometry/size.h"
namespace surface_embed {
// static
SurfaceEmbedWebPlugin* SurfaceEmbedWebPlugin::Create(
content::RenderFrame* render_frame,
const blink::WebPluginParams& params) {
return new SurfaceEmbedWebPlugin(render_frame, params);
}
SurfaceEmbedWebPlugin::SurfaceEmbedWebPlugin(
content::RenderFrame* render_frame,
const blink::WebPluginParams& params) {}
SurfaceEmbedWebPlugin::~SurfaceEmbedWebPlugin() = default;
bool SurfaceEmbedWebPlugin::Initialize(blink::WebPluginContainer* container) {
container_ = container;
// As a placeholder, start with a red rectangle to represent the plugin area.
layer_ = cc::SolidColorLayer::Create();
layer_->SetBackgroundColor(SkColor4f::FromColor(SK_ColorRED));
layer_->SetIsDrawable(true);
container_->SetCcLayer(layer_.get());
return true;
}
void SurfaceEmbedWebPlugin::Destroy() {
if (container_) {
container_->SetCcLayer(nullptr);
container_ = nullptr;
}
layer_ = nullptr;
delete this;
}
blink::WebPluginContainer* SurfaceEmbedWebPlugin::Container() const {
return container_;
}
void SurfaceEmbedWebPlugin::UpdateAllLifecyclePhases(
blink::DocumentUpdateReason reason) {}
void SurfaceEmbedWebPlugin::Paint(cc::PaintCanvas* canvas,
const gfx::Rect& rect) {
// No action needed as we're using a compositor layer to render the red
// placeholder rectangle.
}
void SurfaceEmbedWebPlugin::UpdateGeometry(const gfx::Rect& window_rect,
const gfx::Rect& clip_rect,
const gfx::Rect& unobscured_rect,
bool is_visible) {
if (plugin_rect_ == window_rect) {
return;
}
plugin_rect_ = window_rect;
if (layer_) {
layer_->SetBounds(window_rect.size());
}
}
void SurfaceEmbedWebPlugin::UpdateFocus(bool focused,
blink::mojom::FocusType focus_type) {
NOTIMPLEMENTED();
}
void SurfaceEmbedWebPlugin::UpdateVisibility(bool visible) {
NOTIMPLEMENTED();
}
blink::WebInputEventResult SurfaceEmbedWebPlugin::HandleInputEvent(
const blink::WebCoalescedInputEvent& event,
ui::Cursor* cursor) {
return blink::WebInputEventResult::kNotHandled;
}
void SurfaceEmbedWebPlugin::DidReceiveResponse(
const blink::WebURLResponse& response) {
NOTIMPLEMENTED();
}
void SurfaceEmbedWebPlugin::DidReceiveData(base::span<const char> data) {
NOTIMPLEMENTED();
}
void SurfaceEmbedWebPlugin::DidFinishLoading() {
NOTIMPLEMENTED();
}
void SurfaceEmbedWebPlugin::DidFailLoading(const blink::WebURLError& error) {
NOTIMPLEMENTED();
}
} // namespace surface_embed
|