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

Side by Side Diff: webkit/glue/plugins/pepper_webplugin_impl.cc

Issue 5828003: Move the Pepper implementation from webkit/glue/plugins/pepper_* to... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years 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 | Annotate | Revision Log
« no previous file with comments | « webkit/glue/plugins/pepper_webplugin_impl.h ('k') | webkit/glue/plugins/pepper_widget.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 #include "webkit/glue/plugins/pepper_webplugin_impl.h"
6
7 #include <cmath>
8
9 #include "base/message_loop.h"
10 #include "ppapi/c/pp_var.h"
11 #include "third_party/WebKit/WebKit/chromium/public/WebPluginParams.h"
12 #include "third_party/WebKit/WebKit/chromium/public/WebPoint.h"
13 #include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
14 #include "third_party/WebKit/WebKit/chromium/public/WebView.h"
15 #include "webkit/glue/plugins/pepper_plugin_instance.h"
16 #include "webkit/glue/plugins/pepper_plugin_module.h"
17 #include "webkit/glue/plugins/pepper_url_loader.h"
18 #include "webkit/glue/plugins/pepper_var.h"
19
20 using WebKit::WebCanvas;
21 using WebKit::WebPluginContainer;
22 using WebKit::WebPluginParams;
23 using WebKit::WebPoint;
24 using WebKit::WebRect;
25 using WebKit::WebString;
26 using WebKit::WebURL;
27 using WebKit::WebVector;
28 using WebKit::WebView;
29
30 namespace pepper {
31
32 struct WebPluginImpl::InitData {
33 scoped_refptr<PluginModule> module;
34 base::WeakPtr<PluginDelegate> delegate;
35 std::vector<std::string> arg_names;
36 std::vector<std::string> arg_values;
37 };
38
39 WebPluginImpl::WebPluginImpl(
40 PluginModule* plugin_module,
41 const WebPluginParams& params,
42 const base::WeakPtr<PluginDelegate>& plugin_delegate)
43 : init_data_(new InitData()),
44 full_frame_(params.loadManually) {
45 DCHECK(plugin_module);
46 init_data_->module = plugin_module;
47 init_data_->delegate = plugin_delegate;
48 for (size_t i = 0; i < params.attributeNames.size(); ++i) {
49 init_data_->arg_names.push_back(params.attributeNames[i].utf8());
50 init_data_->arg_values.push_back(params.attributeValues[i].utf8());
51 }
52 }
53
54 WebPluginImpl::~WebPluginImpl() {
55 }
56
57 bool WebPluginImpl::initialize(WebPluginContainer* container) {
58 // The plugin delegate may have gone away.
59 if (!init_data_->delegate)
60 return false;
61
62 instance_ = init_data_->module->CreateInstance(init_data_->delegate);
63 if (!instance_)
64 return false;
65
66 bool success = instance_->Initialize(container,
67 init_data_->arg_names,
68 init_data_->arg_values,
69 full_frame_);
70 if (!success) {
71 instance_->Delete();
72 instance_ = NULL;
73 return false;
74 }
75
76 init_data_.reset();
77 return true;
78 }
79
80 void WebPluginImpl::destroy() {
81 if (instance_) {
82 instance_->Delete();
83 instance_ = NULL;
84 }
85
86 MessageLoop::current()->DeleteSoon(FROM_HERE, this);
87 }
88
89 NPObject* WebPluginImpl::scriptableObject() {
90 scoped_refptr<ObjectVar> object(
91 ObjectVar::FromPPVar(instance_->GetInstanceObject()));
92 if (object)
93 return object->np_object();
94 return NULL;
95 }
96
97 void WebPluginImpl::paint(WebCanvas* canvas, const WebRect& rect) {
98 if (!instance_->IsFullscreen())
99 instance_->Paint(canvas, plugin_rect_, rect);
100 }
101
102 void WebPluginImpl::updateGeometry(
103 const WebRect& window_rect,
104 const WebRect& clip_rect,
105 const WebVector<WebRect>& cut_outs_rects,
106 bool is_visible) {
107 plugin_rect_ = window_rect;
108 if (!instance_->IsFullscreen())
109 instance_->ViewChanged(plugin_rect_, clip_rect);
110 }
111
112 unsigned WebPluginImpl::getBackingTextureId() {
113 return instance_->GetBackingTextureId();
114 }
115
116 void WebPluginImpl::updateFocus(bool focused) {
117 instance_->SetWebKitFocus(focused);
118 }
119
120 void WebPluginImpl::updateVisibility(bool visible) {
121 }
122
123 bool WebPluginImpl::acceptsInputEvents() {
124 return true;
125 }
126
127 bool WebPluginImpl::handleInputEvent(const WebKit::WebInputEvent& event,
128 WebKit::WebCursorInfo& cursor_info) {
129 if (instance_->IsFullscreen())
130 return false;
131 return instance_->HandleInputEvent(event, &cursor_info);
132 }
133
134 void WebPluginImpl::didReceiveResponse(
135 const WebKit::WebURLResponse& response) {
136 DCHECK(!document_loader_);
137
138 document_loader_ = new URLLoader(instance_, true);
139 document_loader_->didReceiveResponse(NULL, response);
140
141 if (!instance_->HandleDocumentLoad(document_loader_))
142 document_loader_ = NULL;
143 }
144
145 void WebPluginImpl::didReceiveData(const char* data, int data_length) {
146 if (document_loader_)
147 document_loader_->didReceiveData(NULL, data, data_length);
148 }
149
150 void WebPluginImpl::didFinishLoading() {
151 if (document_loader_) {
152 document_loader_->didFinishLoading(NULL, 0);
153 document_loader_ = NULL;
154 }
155 }
156
157 void WebPluginImpl::didFailLoading(const WebKit::WebURLError& error) {
158 if (document_loader_) {
159 document_loader_->didFail(NULL, error);
160 document_loader_ = NULL;
161 }
162 }
163
164 void WebPluginImpl::didFinishLoadingFrameRequest(const WebKit::WebURL& url,
165 void* notify_data) {
166 }
167
168 void WebPluginImpl::didFailLoadingFrameRequest(
169 const WebKit::WebURL& url,
170 void* notify_data,
171 const WebKit::WebURLError& error) {
172 }
173
174 bool WebPluginImpl::hasSelection() const {
175 return !selectionAsText().isEmpty();
176 }
177
178 WebString WebPluginImpl::selectionAsText() const {
179 return instance_->GetSelectedText(false);
180 }
181
182 WebString WebPluginImpl::selectionAsMarkup() const {
183 return instance_->GetSelectedText(true);
184 }
185
186 WebURL WebPluginImpl::linkAtPosition(const WebPoint& position) const {
187 return GURL(instance_->GetLinkAtPosition(position));
188 }
189
190 void WebPluginImpl::setZoomLevel(double level, bool text_only) {
191 instance_->Zoom(WebView::zoomLevelToZoomFactor(level), text_only);
192 }
193
194 bool WebPluginImpl::startFind(const WebKit::WebString& search_text,
195 bool case_sensitive,
196 int identifier) {
197 return instance_->StartFind(search_text, case_sensitive, identifier);
198 }
199
200 void WebPluginImpl::selectFindResult(bool forward) {
201 instance_->SelectFindResult(forward);
202 }
203
204 void WebPluginImpl::stopFind() {
205 instance_->StopFind();
206 }
207
208 bool WebPluginImpl::supportsPaginatedPrint() {
209 return instance_->SupportsPrintInterface();
210 }
211
212 int WebPluginImpl::printBegin(const WebKit::WebRect& printable_area,
213 int printer_dpi) {
214 return instance_->PrintBegin(printable_area, printer_dpi);
215 }
216
217 bool WebPluginImpl::printPage(int page_number,
218 WebKit::WebCanvas* canvas) {
219 return instance_->PrintPage(page_number, canvas);
220 }
221
222 void WebPluginImpl::printEnd() {
223 return instance_->PrintEnd();
224 }
225
226 } // namespace pepper
OLDNEW
« no previous file with comments | « webkit/glue/plugins/pepper_webplugin_impl.h ('k') | webkit/glue/plugins/pepper_widget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698