Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Side by Side Diff: content/shell/renderer/test_runner/test_plugin.h

Issue 469943003: TestPlugin to chromium c++ style. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_TEST_PLUGIN_H_
6 #define CONTENT_SHELL_RENDERER_TEST_RUNNER_TEST_PLUGIN_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "cc/layers/texture_layer.h"
13 #include "cc/layers/texture_layer_client.h"
14 #include "content/public/test/layouttest_support.h"
15 #include "third_party/WebKit/public/platform/WebExternalTextureLayer.h"
16 #include "third_party/WebKit/public/platform/WebExternalTextureLayerClient.h"
17 #include "third_party/WebKit/public/platform/WebExternalTextureMailbox.h"
18 #include "third_party/WebKit/public/platform/WebLayer.h"
19 #include "third_party/WebKit/public/web/WebPlugin.h"
20 #include "third_party/WebKit/public/web/WebPluginContainer.h"
21
22 namespace blink {
23 class WebFrame;
24 class WebLayer;
25 }
26
27 namespace content {
28
29 class WebTestDelegate;
30
31 // A fake implemention of blink::WebPlugin for testing purposes.
32 //
33 // It uses WebGraphicsContext3D to paint a scene consisiting of a primitive
34 // over a background. The primitive and background can be customized using
35 // the following plugin parameters:
36 // primitive: none (default), triangle.
37 // background-color: black (default), red, green, blue.
38 // primitive-color: black (default), red, green, blue.
39 // opacity: [0.0 - 1.0]. Default is 1.0.
40 //
41 // Whether the plugin accepts touch events or not can be customized using the
42 // 'accepts-touch' plugin parameter (defaults to false).
43 class TestPlugin : public blink::WebPlugin, public cc::TextureLayerClient {
44 public:
45 static TestPlugin* create(blink::WebFrame* frame,
46 const blink::WebPluginParams& params,
47 WebTestDelegate* delegate);
48 virtual ~TestPlugin();
49
50 static const blink::WebString& MimeType();
51 static const blink::WebString& CanCreateWithoutRendererMimeType();
52 static const blink::WebString& PluginPersistsMimeType();
53 static bool IsSupportedMimeType(const blink::WebString& mime_type);
54
55 // WebPlugin methods:
56 virtual bool initialize(blink::WebPluginContainer* container);
57 virtual void destroy();
58 virtual NPObject* scriptableObject();
59 virtual bool canProcessDrag() const;
60 virtual void paint(blink::WebCanvas* canvas, const blink::WebRect& rect) {}
61 virtual void updateGeometry(
62 const blink::WebRect& frame_rect,
63 const blink::WebRect& clip_rect,
64 const blink::WebVector<blink::WebRect>& cut_outs_rects,
65 bool is_visible);
66 virtual void updateFocus(bool focus) {}
67 virtual void updateVisibility(bool visibility) {}
68 virtual bool acceptsInputEvents();
69 virtual bool handleInputEvent(const blink::WebInputEvent& event,
70 blink::WebCursorInfo& info);
71 virtual bool handleDragStatusUpdate(blink::WebDragStatus drag_status,
72 const blink::WebDragData& data,
73 blink::WebDragOperationsMask mask,
74 const blink::WebPoint& position,
75 const blink::WebPoint& screen_position);
76 virtual void didReceiveResponse(const blink::WebURLResponse& response) {}
77 virtual void didReceiveData(const char* data, int data_length) {}
78 virtual void didFinishLoading() {}
79 virtual void didFailLoading(const blink::WebURLError& error) {}
80 virtual void didFinishLoadingFrameRequest(const blink::WebURL& url,
81 void* notify_data) {}
82 virtual void didFailLoadingFrameRequest(const blink::WebURL& url,
83 void* notify_data,
84 const blink::WebURLError& error) {}
85 virtual bool isPlaceholder();
86
87 // cc::TextureLayerClient methods:
88 virtual bool PrepareTextureMailbox(
89 cc::TextureMailbox* mailbox,
90 scoped_ptr<cc::SingleReleaseCallback>* release_callback,
91 bool use_shared_memory) OVERRIDE;
92
93 private:
94 TestPlugin(blink::WebFrame* frame,
95 const blink::WebPluginParams& params,
96 WebTestDelegate* delegate);
97
98 enum Primitive { PrimitiveNone, PrimitiveTriangle };
99
100 struct Scene {
101 Primitive primitive;
102 unsigned background_color[3];
103 unsigned primitive_color[3];
104 float opacity;
105
106 unsigned vbo;
107 unsigned program;
108 int color_location;
109 int position_location;
110
111 Scene()
112 : primitive(PrimitiveNone),
113 opacity(1.0f) // Fully opaque.
114 ,
115 vbo(0),
116 program(0),
117 color_location(-1),
118 position_location(-1) {
119 background_color[0] = background_color[1] = background_color[2] = 0;
120 primitive_color[0] = primitive_color[1] = primitive_color[2] = 0;
121 }
122 };
123
124 // Functions for parsing plugin parameters.
125 Primitive ParsePrimitive(const blink::WebString& string);
126 void ParseColor(const blink::WebString& string, unsigned color[3]);
127 float ParseOpacity(const blink::WebString& string);
128 bool ParseBoolean(const blink::WebString& string);
129
130 // Functions for loading and drawing scene in GL.
131 bool InitScene();
132 void DrawSceneGL();
133 void DestroyScene();
134 bool InitProgram();
135 bool InitPrimitive();
136 void DrawPrimitive();
137 unsigned LoadShader(unsigned type, const std::string& source);
138 unsigned LoadProgram(const std::string& vertex_source,
139 const std::string& fragment_source);
140
141 // Functions for drawing scene in Software.
142 void DrawSceneSoftware(void* memory, size_t bytes);
143
144 blink::WebFrame* frame_;
145 WebTestDelegate* delegate_;
146 blink::WebPluginContainer* container_;
147
148 blink::WebRect rect_;
149 blink::WebGraphicsContext3D* context_;
150 unsigned color_texture_;
151 cc::TextureMailbox texture_mailbox_;
152 scoped_ptr<base::SharedMemory> shared_bitmap_;
153 bool mailbox_changed_;
154 unsigned framebuffer_;
155 Scene scene_;
156 scoped_refptr<cc::TextureLayer> layer_;
157 scoped_ptr<blink::WebLayer> web_layer_;
158
159 blink::WebPluginContainer::TouchEventRequestType touch_event_request_;
160 // Requests touch events from the WebPluginContainerImpl multiple times to
161 // tickle webkit.org/b/108381
162 bool re_request_touch_events_;
163 bool print_event_details_;
164 bool print_user_gesture_status_;
165 bool can_process_drag_;
166
167 bool is_persistent_;
168 bool can_create_without_renderer_;
169
170 DISALLOW_COPY_AND_ASSIGN(TestPlugin);
171 };
172
173 } // namespace content
174
175 #endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_TEST_PLUGIN_H_
OLDNEW
« no previous file with comments | « content/shell/renderer/test_runner/TestPlugin.cpp ('k') | content/shell/renderer/test_runner/test_plugin.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698