| Index: components/test_runner/test_plugin.cc
|
| diff --git a/components/test_runner/test_plugin.cc b/components/test_runner/test_plugin.cc
|
| deleted file mode 100644
|
| index 54b7046ea03f80fe150005f245b677ca2092ebcd..0000000000000000000000000000000000000000
|
| --- a/components/test_runner/test_plugin.cc
|
| +++ /dev/null
|
| @@ -1,623 +0,0 @@
|
| -// Copyright 2013 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 "components/test_runner/test_plugin.h"
|
| -
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/memory/shared_memory.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "cc/blink/web_layer_impl.h"
|
| -#include "cc/layers/texture_layer.h"
|
| -#include "cc/resources/shared_bitmap_manager.h"
|
| -#include "components/test_runner/web_test_delegate.h"
|
| -#include "gpu/command_buffer/client/gles2_interface.h"
|
| -#include "third_party/WebKit/public/platform/Platform.h"
|
| -#include "third_party/WebKit/public/platform/WebCompositorSupport.h"
|
| -#include "third_party/WebKit/public/platform/WebGestureEvent.h"
|
| -#include "third_party/WebKit/public/platform/WebGraphicsContext3DProvider.h"
|
| -#include "third_party/WebKit/public/platform/WebInputEvent.h"
|
| -#include "third_party/WebKit/public/platform/WebMouseEvent.h"
|
| -#include "third_party/WebKit/public/platform/WebThread.h"
|
| -#include "third_party/WebKit/public/platform/WebTouchEvent.h"
|
| -#include "third_party/WebKit/public/platform/WebTouchPoint.h"
|
| -#include "third_party/WebKit/public/platform/WebTraceLocation.h"
|
| -#include "third_party/WebKit/public/platform/WebURL.h"
|
| -#include "third_party/WebKit/public/web/WebFrame.h"
|
| -#include "third_party/WebKit/public/web/WebKit.h"
|
| -#include "third_party/WebKit/public/web/WebPluginParams.h"
|
| -#include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "third_party/skia/include/core/SkCanvas.h"
|
| -#include "third_party/skia/include/core/SkColor.h"
|
| -#include "third_party/skia/include/core/SkPaint.h"
|
| -#include "third_party/skia/include/core/SkPath.h"
|
| -
|
| -namespace test_runner {
|
| -
|
| -namespace {
|
| -
|
| -void PremultiplyAlpha(const uint8_t color_in[3],
|
| - float alpha,
|
| - float color_out[4]) {
|
| - for (int i = 0; i < 3; ++i)
|
| - color_out[i] = (color_in[i] / 255.0f) * alpha;
|
| -
|
| - color_out[3] = alpha;
|
| -}
|
| -
|
| -const char* PointState(blink::WebTouchPoint::State state) {
|
| - switch (state) {
|
| - case blink::WebTouchPoint::StateReleased:
|
| - return "Released";
|
| - case blink::WebTouchPoint::StatePressed:
|
| - return "Pressed";
|
| - case blink::WebTouchPoint::StateMoved:
|
| - return "Moved";
|
| - case blink::WebTouchPoint::StateCancelled:
|
| - return "Cancelled";
|
| - default:
|
| - return "Unknown";
|
| - }
|
| -}
|
| -
|
| -void PrintTouchList(WebTestDelegate* delegate,
|
| - const blink::WebTouchPoint* points,
|
| - int length) {
|
| - for (int i = 0; i < length; ++i) {
|
| - delegate->PrintMessage(base::StringPrintf("* %.2f, %.2f: %s\n",
|
| - points[i].position.x,
|
| - points[i].position.y,
|
| - PointState(points[i].state)));
|
| - }
|
| -}
|
| -
|
| -void PrintEventDetails(WebTestDelegate* delegate,
|
| - const blink::WebInputEvent& event) {
|
| - if (blink::WebInputEvent::isTouchEventType(event.type())) {
|
| - const blink::WebTouchEvent& touch =
|
| - static_cast<const blink::WebTouchEvent&>(event);
|
| - PrintTouchList(delegate, touch.touches, touch.touchesLength);
|
| - } else if (blink::WebInputEvent::isMouseEventType(event.type()) ||
|
| - event.type() == blink::WebInputEvent::MouseWheel) {
|
| - const blink::WebMouseEvent& mouse =
|
| - static_cast<const blink::WebMouseEvent&>(event);
|
| - delegate->PrintMessage(base::StringPrintf("* %d, %d\n", mouse.x, mouse.y));
|
| - } else if (blink::WebInputEvent::isGestureEventType(event.type())) {
|
| - const blink::WebGestureEvent& gesture =
|
| - static_cast<const blink::WebGestureEvent&>(event);
|
| - delegate->PrintMessage(
|
| - base::StringPrintf("* %d, %d\n", gesture.x, gesture.y));
|
| - }
|
| -}
|
| -
|
| -blink::WebPluginContainer::TouchEventRequestType ParseTouchEventRequestType(
|
| - const blink::WebString& string) {
|
| - if (string == blink::WebString::fromUTF8("raw"))
|
| - return blink::WebPluginContainer::TouchEventRequestTypeRaw;
|
| - if (string == blink::WebString::fromUTF8("synthetic"))
|
| - return blink::WebPluginContainer::TouchEventRequestTypeSynthesizedMouse;
|
| - return blink::WebPluginContainer::TouchEventRequestTypeNone;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -TestPlugin::TestPlugin(blink::WebFrame* frame,
|
| - const blink::WebPluginParams& params,
|
| - WebTestDelegate* delegate)
|
| - : frame_(frame),
|
| - delegate_(delegate),
|
| - container_(nullptr),
|
| - gl_(nullptr),
|
| - color_texture_(0),
|
| - mailbox_changed_(false),
|
| - framebuffer_(0),
|
| - touch_event_request_(
|
| - blink::WebPluginContainer::TouchEventRequestTypeNone),
|
| - re_request_touch_events_(false),
|
| - print_event_details_(false),
|
| - print_user_gesture_status_(false),
|
| - can_process_drag_(false),
|
| - supports_keyboard_focus_(false),
|
| - is_persistent_(params.mimeType == PluginPersistsMimeType()),
|
| - can_create_without_renderer_(params.mimeType ==
|
| - CanCreateWithoutRendererMimeType()) {
|
| - DCHECK_EQ(params.attributeNames.size(), params.attributeValues.size());
|
| - size_t size = params.attributeNames.size();
|
| - for (size_t i = 0; i < size; ++i) {
|
| - const blink::WebString& attribute_name = params.attributeNames[i];
|
| - const blink::WebString& attribute_value = params.attributeValues[i];
|
| -
|
| - if (attribute_name == "primitive")
|
| - scene_.primitive = ParsePrimitive(attribute_value);
|
| - else if (attribute_name == "background-color")
|
| - ParseColor(attribute_value, scene_.background_color);
|
| - else if (attribute_name == "primitive-color")
|
| - ParseColor(attribute_value, scene_.primitive_color);
|
| - else if (attribute_name == "opacity")
|
| - scene_.opacity = ParseOpacity(attribute_value);
|
| - else if (attribute_name == "accepts-touch")
|
| - touch_event_request_ = ParseTouchEventRequestType(attribute_value);
|
| - else if (attribute_name == "re-request-touch")
|
| - re_request_touch_events_ = ParseBoolean(attribute_value);
|
| - else if (attribute_name == "print-event-details")
|
| - print_event_details_ = ParseBoolean(attribute_value);
|
| - else if (attribute_name == "can-process-drag")
|
| - can_process_drag_ = ParseBoolean(attribute_value);
|
| - else if (attribute_name == "supports-keyboard-focus")
|
| - supports_keyboard_focus_ = ParseBoolean(attribute_value);
|
| - else if (attribute_name == "print-user-gesture-status")
|
| - print_user_gesture_status_ = ParseBoolean(attribute_value);
|
| - }
|
| - if (can_create_without_renderer_)
|
| - delegate_->PrintMessage(
|
| - std::string("TestPlugin: canCreateWithoutRenderer\n"));
|
| -}
|
| -
|
| -TestPlugin::~TestPlugin() {
|
| -}
|
| -
|
| -bool TestPlugin::initialize(blink::WebPluginContainer* container) {
|
| - DCHECK(container);
|
| - DCHECK_EQ(this, container->plugin());
|
| -
|
| - container_ = container;
|
| -
|
| - blink::Platform::ContextAttributes attrs;
|
| - attrs.webGLVersion = 1; // We are creating a context through the WebGL APIs.
|
| - blink::WebURL url = container->document().url();
|
| - blink::Platform::GraphicsInfo gl_info;
|
| - context_provider_ = base::WrapUnique(
|
| - blink::Platform::current()->createOffscreenGraphicsContext3DProvider(
|
| - attrs, url, nullptr, &gl_info));
|
| - if (!context_provider_->bindToCurrentThread())
|
| - context_provider_ = nullptr;
|
| - gl_ = context_provider_ ? context_provider_->contextGL() : nullptr;
|
| -
|
| - if (!InitScene())
|
| - return false;
|
| -
|
| - layer_ = cc::TextureLayer::CreateForMailbox(this);
|
| - web_layer_ = base::WrapUnique(new cc_blink::WebLayerImpl(layer_));
|
| - container_->setWebLayer(web_layer_.get());
|
| - if (re_request_touch_events_) {
|
| - container_->requestTouchEventType(
|
| - blink::WebPluginContainer::TouchEventRequestTypeSynthesizedMouse);
|
| - container_->requestTouchEventType(
|
| - blink::WebPluginContainer::TouchEventRequestTypeRaw);
|
| - }
|
| - container_->requestTouchEventType(touch_event_request_);
|
| - container_->setWantsWheelEvents(true);
|
| - return true;
|
| -}
|
| -
|
| -void TestPlugin::destroy() {
|
| - if (layer_.get())
|
| - layer_->ClearTexture();
|
| - if (container_)
|
| - container_->setWebLayer(0);
|
| - web_layer_.reset();
|
| - layer_ = NULL;
|
| - DestroyScene();
|
| -
|
| - gl_ = nullptr;
|
| - context_provider_.reset();
|
| -
|
| - container_ = nullptr;
|
| - frame_ = nullptr;
|
| -
|
| - blink::Platform::current()
|
| - ->mainThread()
|
| - ->getSingleThreadTaskRunner()
|
| - ->DeleteSoon(FROM_HERE, this);
|
| -}
|
| -
|
| -blink::WebPluginContainer* TestPlugin::container() const {
|
| - return container_;
|
| -}
|
| -
|
| -bool TestPlugin::canProcessDrag() const {
|
| - return can_process_drag_;
|
| -}
|
| -
|
| -bool TestPlugin::supportsKeyboardFocus() const {
|
| - return supports_keyboard_focus_;
|
| -}
|
| -
|
| -void TestPlugin::updateGeometry(
|
| - const blink::WebRect& window_rect,
|
| - const blink::WebRect& clip_rect,
|
| - const blink::WebRect& unobscured_rect,
|
| - const blink::WebVector<blink::WebRect>& cut_outs_rects,
|
| - bool is_visible) {
|
| - if (clip_rect == rect_)
|
| - return;
|
| - rect_ = clip_rect;
|
| -
|
| - if (rect_.isEmpty()) {
|
| - texture_mailbox_ = cc::TextureMailbox();
|
| - } else if (gl_) {
|
| - gl_->Viewport(0, 0, rect_.width, rect_.height);
|
| -
|
| - gl_->BindTexture(GL_TEXTURE_2D, color_texture_);
|
| - gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
| - gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
| - gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
| - gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
| - gl_->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, rect_.width, rect_.height, 0,
|
| - GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
| - gl_->BindFramebuffer(GL_FRAMEBUFFER, framebuffer_);
|
| - gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
| - GL_TEXTURE_2D, color_texture_, 0);
|
| -
|
| - DrawSceneGL();
|
| -
|
| - gpu::Mailbox mailbox;
|
| - gl_->GenMailboxCHROMIUM(mailbox.name);
|
| - gl_->ProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
|
| - const GLuint64 fence_sync = gl_->InsertFenceSyncCHROMIUM();
|
| - gl_->Flush();
|
| -
|
| - gpu::SyncToken sync_token;
|
| - gl_->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData());
|
| - texture_mailbox_ = cc::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D);
|
| - } else {
|
| - std::unique_ptr<cc::SharedBitmap> bitmap =
|
| - delegate_->GetSharedBitmapManager()->AllocateSharedBitmap(
|
| - gfx::Rect(rect_).size());
|
| - if (!bitmap) {
|
| - texture_mailbox_ = cc::TextureMailbox();
|
| - } else {
|
| - DrawSceneSoftware(bitmap->pixels());
|
| - texture_mailbox_ = cc::TextureMailbox(
|
| - bitmap.get(), gfx::Size(rect_.width, rect_.height));
|
| - shared_bitmap_ = std::move(bitmap);
|
| - }
|
| - }
|
| -
|
| - mailbox_changed_ = true;
|
| - layer_->SetNeedsDisplay();
|
| -}
|
| -
|
| -bool TestPlugin::isPlaceholder() {
|
| - return false;
|
| -}
|
| -
|
| -static void IgnoreReleaseCallback(const gpu::SyncToken& sync_token, bool lost) {
|
| -}
|
| -
|
| -static void ReleaseSharedMemory(std::unique_ptr<cc::SharedBitmap> bitmap,
|
| - const gpu::SyncToken& sync_token,
|
| - bool lost) {}
|
| -
|
| -bool TestPlugin::PrepareTextureMailbox(
|
| - cc::TextureMailbox* mailbox,
|
| - std::unique_ptr<cc::SingleReleaseCallback>* release_callback) {
|
| - if (!mailbox_changed_)
|
| - return false;
|
| - *mailbox = texture_mailbox_;
|
| - if (texture_mailbox_.IsTexture()) {
|
| - *release_callback =
|
| - cc::SingleReleaseCallback::Create(base::Bind(&IgnoreReleaseCallback));
|
| - } else if (texture_mailbox_.IsSharedMemory()) {
|
| - *release_callback = cc::SingleReleaseCallback::Create(
|
| - base::Bind(&ReleaseSharedMemory, base::Passed(&shared_bitmap_)));
|
| - }
|
| - mailbox_changed_ = false;
|
| - return true;
|
| -}
|
| -
|
| -TestPlugin::Primitive TestPlugin::ParsePrimitive(
|
| - const blink::WebString& string) {
|
| - const CR_DEFINE_STATIC_LOCAL(blink::WebString, kPrimitiveNone, ("none"));
|
| - const CR_DEFINE_STATIC_LOCAL(
|
| - blink::WebString, kPrimitiveTriangle, ("triangle"));
|
| -
|
| - Primitive primitive = PrimitiveNone;
|
| - if (string == kPrimitiveNone)
|
| - primitive = PrimitiveNone;
|
| - else if (string == kPrimitiveTriangle)
|
| - primitive = PrimitiveTriangle;
|
| - else
|
| - NOTREACHED();
|
| - return primitive;
|
| -}
|
| -
|
| -// FIXME: This method should already exist. Use it.
|
| -// For now just parse primary colors.
|
| -void TestPlugin::ParseColor(const blink::WebString& string, uint8_t color[3]) {
|
| - color[0] = color[1] = color[2] = 0;
|
| - if (string == "black")
|
| - return;
|
| -
|
| - if (string == "red")
|
| - color[0] = 255;
|
| - else if (string == "green")
|
| - color[1] = 255;
|
| - else if (string == "blue")
|
| - color[2] = 255;
|
| - else
|
| - NOTREACHED();
|
| -}
|
| -
|
| -float TestPlugin::ParseOpacity(const blink::WebString& string) {
|
| - return static_cast<float>(atof(string.utf8().data()));
|
| -}
|
| -
|
| -bool TestPlugin::ParseBoolean(const blink::WebString& string) {
|
| - const CR_DEFINE_STATIC_LOCAL(blink::WebString, kPrimitiveTrue, ("true"));
|
| - return string == kPrimitiveTrue;
|
| -}
|
| -
|
| -bool TestPlugin::InitScene() {
|
| - if (!gl_)
|
| - return true;
|
| -
|
| - float color[4];
|
| - PremultiplyAlpha(scene_.background_color, scene_.opacity, color);
|
| -
|
| - gl_->GenTextures(1, &color_texture_);
|
| - gl_->GenFramebuffers(1, &framebuffer_);
|
| -
|
| - gl_->Viewport(0, 0, rect_.width, rect_.height);
|
| - gl_->Disable(GL_DEPTH_TEST);
|
| - gl_->Disable(GL_SCISSOR_TEST);
|
| -
|
| - gl_->ClearColor(color[0], color[1], color[2], color[3]);
|
| -
|
| - gl_->Enable(GL_BLEND);
|
| - gl_->BlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
| -
|
| - return scene_.primitive != PrimitiveNone ? InitProgram() && InitPrimitive()
|
| - : true;
|
| -}
|
| -
|
| -void TestPlugin::DrawSceneGL() {
|
| - gl_->Viewport(0, 0, rect_.width, rect_.height);
|
| - gl_->Clear(GL_COLOR_BUFFER_BIT);
|
| -
|
| - if (scene_.primitive != PrimitiveNone)
|
| - DrawPrimitive();
|
| -}
|
| -
|
| -void TestPlugin::DrawSceneSoftware(void* memory) {
|
| - SkColor background_color = SkColorSetARGB(
|
| - static_cast<uint8_t>(scene_.opacity * 255), scene_.background_color[0],
|
| - scene_.background_color[1], scene_.background_color[2]);
|
| -
|
| - const SkImageInfo info =
|
| - SkImageInfo::MakeN32Premul(rect_.width, rect_.height);
|
| - SkBitmap bitmap;
|
| - bitmap.installPixels(info, memory, info.minRowBytes());
|
| - SkCanvas canvas(bitmap);
|
| - canvas.clear(background_color);
|
| -
|
| - if (scene_.primitive != PrimitiveNone) {
|
| - DCHECK_EQ(PrimitiveTriangle, scene_.primitive);
|
| - SkColor foreground_color = SkColorSetARGB(
|
| - static_cast<uint8_t>(scene_.opacity * 255), scene_.primitive_color[0],
|
| - scene_.primitive_color[1], scene_.primitive_color[2]);
|
| - SkPath triangle_path;
|
| - triangle_path.moveTo(0.5f * rect_.width, 0.9f * rect_.height);
|
| - triangle_path.lineTo(0.1f * rect_.width, 0.1f * rect_.height);
|
| - triangle_path.lineTo(0.9f * rect_.width, 0.1f * rect_.height);
|
| - SkPaint paint;
|
| - paint.setColor(foreground_color);
|
| - paint.setStyle(SkPaint::kFill_Style);
|
| - canvas.drawPath(triangle_path, paint);
|
| - }
|
| -}
|
| -
|
| -void TestPlugin::DestroyScene() {
|
| - if (scene_.program) {
|
| - gl_->DeleteProgram(scene_.program);
|
| - scene_.program = 0;
|
| - }
|
| - if (scene_.vbo) {
|
| - gl_->DeleteBuffers(1, &scene_.vbo);
|
| - scene_.vbo = 0;
|
| - }
|
| -
|
| - if (framebuffer_) {
|
| - gl_->DeleteFramebuffers(1, &framebuffer_);
|
| - framebuffer_ = 0;
|
| - }
|
| -
|
| - if (color_texture_) {
|
| - gl_->DeleteTextures(1, &color_texture_);
|
| - color_texture_ = 0;
|
| - }
|
| -}
|
| -
|
| -bool TestPlugin::InitProgram() {
|
| - const std::string vertex_source(
|
| - "attribute vec4 position; \n"
|
| - "void main() { \n"
|
| - " gl_Position = position; \n"
|
| - "} \n");
|
| -
|
| - const std::string fragment_source(
|
| - "precision mediump float; \n"
|
| - "uniform vec4 color; \n"
|
| - "void main() { \n"
|
| - " gl_FragColor = color; \n"
|
| - "} \n");
|
| -
|
| - scene_.program = LoadProgram(vertex_source, fragment_source);
|
| - if (!scene_.program)
|
| - return false;
|
| -
|
| - scene_.color_location = gl_->GetUniformLocation(scene_.program, "color");
|
| - scene_.position_location = gl_->GetAttribLocation(scene_.program, "position");
|
| - return true;
|
| -}
|
| -
|
| -bool TestPlugin::InitPrimitive() {
|
| - DCHECK_EQ(scene_.primitive, PrimitiveTriangle);
|
| -
|
| - gl_->GenBuffers(1, &scene_.vbo);
|
| - if (!scene_.vbo)
|
| - return false;
|
| -
|
| - const float vertices[] = {0.0f, 0.8f, 0.0f, -0.8f, -0.8f,
|
| - 0.0f, 0.8f, -0.8f, 0.0f};
|
| - gl_->BindBuffer(GL_ARRAY_BUFFER, scene_.vbo);
|
| - gl_->BufferData(GL_ARRAY_BUFFER, sizeof(vertices), 0, GL_STATIC_DRAW);
|
| - gl_->BufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
|
| - return true;
|
| -}
|
| -
|
| -void TestPlugin::DrawPrimitive() {
|
| - DCHECK_EQ(scene_.primitive, PrimitiveTriangle);
|
| - DCHECK(scene_.vbo);
|
| - DCHECK(scene_.program);
|
| -
|
| - gl_->UseProgram(scene_.program);
|
| -
|
| - // Bind primitive color.
|
| - float color[4];
|
| - PremultiplyAlpha(scene_.primitive_color, scene_.opacity, color);
|
| - gl_->Uniform4f(scene_.color_location, color[0], color[1], color[2], color[3]);
|
| -
|
| - // Bind primitive vertices.
|
| - gl_->BindBuffer(GL_ARRAY_BUFFER, scene_.vbo);
|
| - gl_->EnableVertexAttribArray(scene_.position_location);
|
| - gl_->VertexAttribPointer(scene_.position_location, 3, GL_FLOAT, GL_FALSE, 0,
|
| - nullptr);
|
| - gl_->DrawArrays(GL_TRIANGLES, 0, 3);
|
| -}
|
| -
|
| -GLuint TestPlugin::LoadShader(GLenum type, const std::string& source) {
|
| - GLuint shader = gl_->CreateShader(type);
|
| - if (shader) {
|
| - const GLchar* shader_data = source.data();
|
| - GLint shader_length = strlen(shader_data); //source.length();
|
| - gl_->ShaderSource(shader, 1, &shader_data, &shader_length);
|
| - gl_->CompileShader(shader);
|
| -
|
| - int compiled = 0;
|
| - gl_->GetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
|
| - if (!compiled) {
|
| - gl_->DeleteShader(shader);
|
| - shader = 0;
|
| - }
|
| - }
|
| - return shader;
|
| -}
|
| -
|
| -GLuint TestPlugin::LoadProgram(const std::string& vertex_source,
|
| - const std::string& fragment_source) {
|
| - GLuint vertex_shader = LoadShader(GL_VERTEX_SHADER, vertex_source);
|
| - GLuint fragment_shader = LoadShader(GL_FRAGMENT_SHADER, fragment_source);
|
| - GLuint program = gl_->CreateProgram();
|
| - if (vertex_shader && fragment_shader && program) {
|
| - gl_->AttachShader(program, vertex_shader);
|
| - gl_->AttachShader(program, fragment_shader);
|
| - gl_->LinkProgram(program);
|
| -
|
| - int linked = 0;
|
| - gl_->GetProgramiv(program, GL_LINK_STATUS, &linked);
|
| - if (!linked) {
|
| - gl_->DeleteProgram(program);
|
| - program = 0;
|
| - }
|
| - }
|
| - if (vertex_shader)
|
| - gl_->DeleteShader(vertex_shader);
|
| - if (fragment_shader)
|
| - gl_->DeleteShader(fragment_shader);
|
| -
|
| - return program;
|
| -}
|
| -
|
| -blink::WebInputEventResult TestPlugin::handleInputEvent(
|
| - const blink::WebInputEvent& event,
|
| - blink::WebCursorInfo& info) {
|
| - const char* event_name = blink::WebInputEvent::GetName(event.type());
|
| - if (!strcmp(event_name, "") || !strcmp(event_name, "Undefined"))
|
| - event_name = "unknown";
|
| - delegate_->PrintMessage(std::string("Plugin received event: ") + event_name +
|
| - "\n");
|
| - if (print_event_details_)
|
| - PrintEventDetails(delegate_, event);
|
| - if (print_user_gesture_status_)
|
| - delegate_->PrintMessage(
|
| - std::string("* ") +
|
| - (blink::WebUserGestureIndicator::isProcessingUserGesture() ? ""
|
| - : "not ") +
|
| - "handling user gesture\n");
|
| - if (is_persistent_)
|
| - delegate_->PrintMessage(std::string("TestPlugin: isPersistent\n"));
|
| - return blink::WebInputEventResult::NotHandled;
|
| -}
|
| -
|
| -bool TestPlugin::handleDragStatusUpdate(
|
| - blink::WebDragStatus drag_status,
|
| - const blink::WebDragData& data,
|
| - blink::WebDragOperationsMask mask,
|
| - const blink::WebPoint& position,
|
| - const blink::WebPoint& screen_position) {
|
| - const char* drag_status_name = 0;
|
| - switch (drag_status) {
|
| - case blink::WebDragStatusEnter:
|
| - drag_status_name = "DragEnter";
|
| - break;
|
| - case blink::WebDragStatusOver:
|
| - drag_status_name = "DragOver";
|
| - break;
|
| - case blink::WebDragStatusLeave:
|
| - drag_status_name = "DragLeave";
|
| - break;
|
| - case blink::WebDragStatusDrop:
|
| - drag_status_name = "DragDrop";
|
| - break;
|
| - case blink::WebDragStatusUnknown:
|
| - NOTREACHED();
|
| - }
|
| - delegate_->PrintMessage(std::string("Plugin received event: ") +
|
| - drag_status_name + "\n");
|
| - return false;
|
| -}
|
| -
|
| -TestPlugin* TestPlugin::create(blink::WebFrame* frame,
|
| - const blink::WebPluginParams& params,
|
| - WebTestDelegate* delegate) {
|
| - return new TestPlugin(frame, params, delegate);
|
| -}
|
| -
|
| -const blink::WebString& TestPlugin::MimeType() {
|
| - const CR_DEFINE_STATIC_LOCAL(
|
| - blink::WebString, kMimeType, ("application/x-webkit-test-webplugin"));
|
| - return kMimeType;
|
| -}
|
| -
|
| -const blink::WebString& TestPlugin::CanCreateWithoutRendererMimeType() {
|
| - const CR_DEFINE_STATIC_LOCAL(
|
| - blink::WebString,
|
| - kCanCreateWithoutRendererMimeType,
|
| - ("application/x-webkit-test-webplugin-can-create-without-renderer"));
|
| - return kCanCreateWithoutRendererMimeType;
|
| -}
|
| -
|
| -const blink::WebString& TestPlugin::PluginPersistsMimeType() {
|
| - const CR_DEFINE_STATIC_LOCAL(
|
| - blink::WebString,
|
| - kPluginPersistsMimeType,
|
| - ("application/x-webkit-test-webplugin-persistent"));
|
| - return kPluginPersistsMimeType;
|
| -}
|
| -
|
| -bool TestPlugin::IsSupportedMimeType(const blink::WebString& mime_type) {
|
| - return mime_type == TestPlugin::MimeType() ||
|
| - mime_type == PluginPersistsMimeType() ||
|
| - mime_type == CanCreateWithoutRendererMimeType();
|
| -}
|
| -
|
| -} // namespace test_runner
|
|
|