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

Side by Side Diff: content/renderer/pepper/pepper_webplugin_impl.cc

Issue 2835193008: Null check instance_ in PepperWebPluginImpl to prevent re-entry NPE (Closed)
Patch Set: All the checks Created 3 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/pepper/pepper_webplugin_impl.h" 5 #include "content/renderer/pepper/pepper_webplugin_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <cmath> 8 #include <cmath>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 MessageChannel* message_channel = instance_->message_channel(); 176 MessageChannel* message_channel = instance_->message_channel();
177 if (message_channel) 177 if (message_channel)
178 message_channel->SetPassthroughObject(object_var->GetHandle()); 178 message_channel->SetPassthroughObject(object_var->GetHandle());
179 } 179 }
180 180
181 v8::Local<v8::Object> result = instance_->GetMessageChannelObject(); 181 v8::Local<v8::Object> result = instance_->GetMessageChannelObject();
182 return result; 182 return result;
183 } 183 }
184 184
185 void PepperWebPluginImpl::Paint(WebCanvas* canvas, const WebRect& rect) { 185 void PepperWebPluginImpl::Paint(WebCanvas* canvas, const WebRect& rect) {
186 if (!instance_->FlashIsFullscreenOrPending()) 186 // Re-entrancy may cause JS to try to execute script on the plugin before it
187 // is fully initialized. See: crbug.com/715747.
188 if (instance_ && !instance_->FlashIsFullscreenOrPending())
187 instance_->Paint(canvas, plugin_rect_, rect); 189 instance_->Paint(canvas, plugin_rect_, rect);
188 } 190 }
189 191
190 void PepperWebPluginImpl::UpdateGeometry( 192 void PepperWebPluginImpl::UpdateGeometry(
191 const WebRect& window_rect, 193 const WebRect& window_rect,
192 const WebRect& clip_rect, 194 const WebRect& clip_rect,
193 const WebRect& unobscured_rect, 195 const WebRect& unobscured_rect,
194 const WebVector<WebRect>& cut_outs_rects, 196 const WebVector<WebRect>& cut_outs_rects,
195 bool is_visible) { 197 bool is_visible) {
196 plugin_rect_ = window_rect; 198 plugin_rect_ = window_rect;
197 if (instance_ && !instance_->FlashIsFullscreenOrPending()) 199 if (instance_ && !instance_->FlashIsFullscreenOrPending())
198 instance_->ViewChanged(plugin_rect_, clip_rect, unobscured_rect); 200 instance_->ViewChanged(plugin_rect_, clip_rect, unobscured_rect);
199 } 201 }
200 202
201 void PepperWebPluginImpl::UpdateFocus(bool focused, 203 void PepperWebPluginImpl::UpdateFocus(bool focused,
202 blink::WebFocusType focus_type) { 204 blink::WebFocusType focus_type) {
203 instance_->SetWebKitFocus(focused); 205 // Re-entrancy may cause JS to try to execute script on the plugin before it
206 // is fully initialized. See: crbug.com/715747.
207 if (instance_)
208 instance_->SetWebKitFocus(focused);
204 } 209 }
205 210
206 void PepperWebPluginImpl::UpdateVisibility(bool visible) {} 211 void PepperWebPluginImpl::UpdateVisibility(bool visible) {}
207 212
208 blink::WebInputEventResult PepperWebPluginImpl::HandleInputEvent( 213 blink::WebInputEventResult PepperWebPluginImpl::HandleInputEvent(
209 const blink::WebInputEvent& event, 214 const blink::WebInputEvent& event,
210 blink::WebCursorInfo& cursor_info) { 215 blink::WebCursorInfo& cursor_info) {
211 if (instance_->FlashIsFullscreenOrPending()) 216 // Re-entrancy may cause JS to try to execute script on the plugin before it
217 // is fully initialized. See: crbug.com/715747.
218 if (!instance_ || instance_->FlashIsFullscreenOrPending())
212 return blink::WebInputEventResult::kNotHandled; 219 return blink::WebInputEventResult::kNotHandled;
213 return instance_->HandleInputEvent(event, &cursor_info) 220 return instance_->HandleInputEvent(event, &cursor_info)
214 ? blink::WebInputEventResult::kHandledApplication 221 ? blink::WebInputEventResult::kHandledApplication
215 : blink::WebInputEventResult::kNotHandled; 222 : blink::WebInputEventResult::kNotHandled;
216 } 223 }
217 224
218 void PepperWebPluginImpl::DidReceiveResponse( 225 void PepperWebPluginImpl::DidReceiveResponse(
219 const blink::WebURLResponse& response) { 226 const blink::WebURLResponse& response) {
227 // Re-entrancy may cause JS to try to execute script on the plugin before it
228 // is fully initialized. See: crbug.com/715747.
229 if (!instance_)
230 return;
220 DCHECK(!instance_->document_loader()); 231 DCHECK(!instance_->document_loader());
221 instance_->HandleDocumentLoad(response); 232 instance_->HandleDocumentLoad(response);
222 } 233 }
223 234
224 void PepperWebPluginImpl::DidReceiveData(const char* data, int data_length) { 235 void PepperWebPluginImpl::DidReceiveData(const char* data, int data_length) {
236 // Re-entrancy may cause JS to try to execute script on the plugin before it
237 // is fully initialized. See: crbug.com/715747.
238 if (!instance_)
239 return;
225 blink::WebAssociatedURLLoaderClient* document_loader = 240 blink::WebAssociatedURLLoaderClient* document_loader =
226 instance_->document_loader(); 241 instance_->document_loader();
227 if (document_loader) 242 if (document_loader)
228 document_loader->DidReceiveData(data, data_length); 243 document_loader->DidReceiveData(data, data_length);
229 } 244 }
230 245
231 void PepperWebPluginImpl::DidFinishLoading() { 246 void PepperWebPluginImpl::DidFinishLoading() {
247 // Re-entrancy may cause JS to try to execute script on the plugin before it
248 // is fully initialized. See: crbug.com/715747.
249 if (!instance_)
250 return;
232 blink::WebAssociatedURLLoaderClient* document_loader = 251 blink::WebAssociatedURLLoaderClient* document_loader =
233 instance_->document_loader(); 252 instance_->document_loader();
234 if (document_loader) 253 if (document_loader)
235 document_loader->DidFinishLoading(0.0); 254 document_loader->DidFinishLoading(0.0);
236 } 255 }
237 256
238 void PepperWebPluginImpl::DidFailLoading(const blink::WebURLError& error) { 257 void PepperWebPluginImpl::DidFailLoading(const blink::WebURLError& error) {
258 // Re-entrancy may cause JS to try to execute script on the plugin before it
259 // is fully initialized. See: crbug.com/715747.
260 if (!instance_)
261 return;
239 blink::WebAssociatedURLLoaderClient* document_loader = 262 blink::WebAssociatedURLLoaderClient* document_loader =
240 instance_->document_loader(); 263 instance_->document_loader();
241 if (document_loader) 264 if (document_loader)
242 document_loader->DidFail(error); 265 document_loader->DidFail(error);
243 } 266 }
244 267
245 bool PepperWebPluginImpl::HasSelection() const { 268 bool PepperWebPluginImpl::HasSelection() const {
246 return !SelectionAsText().IsEmpty(); 269 return !SelectionAsText().IsEmpty();
247 } 270 }
248 271
249 WebString PepperWebPluginImpl::SelectionAsText() const { 272 WebString PepperWebPluginImpl::SelectionAsText() const {
273 // Re-entrancy may cause JS to try to execute script on the plugin before it
274 // is fully initialized. See: crbug.com/715747.
275 if (!instance_)
276 return WebString();
250 return WebString::FromUTF16(instance_->GetSelectedText(false)); 277 return WebString::FromUTF16(instance_->GetSelectedText(false));
251 } 278 }
252 279
253 WebString PepperWebPluginImpl::SelectionAsMarkup() const { 280 WebString PepperWebPluginImpl::SelectionAsMarkup() const {
281 // Re-entrancy may cause JS to try to execute script on the plugin before it
282 // is fully initialized. See: crbug.com/715747.
283 if (!instance_)
284 return WebString();
254 return WebString::FromUTF16(instance_->GetSelectedText(true)); 285 return WebString::FromUTF16(instance_->GetSelectedText(true));
255 } 286 }
256 287
257 WebURL PepperWebPluginImpl::LinkAtPosition(const WebPoint& position) const { 288 WebURL PepperWebPluginImpl::LinkAtPosition(const WebPoint& position) const {
289 // Re-entrancy may cause JS to try to execute script on the plugin before it
290 // is fully initialized. See: crbug.com/715747.
291 if (!instance_)
292 return GURL();
258 return GURL(instance_->GetLinkAtPosition(position)); 293 return GURL(instance_->GetLinkAtPosition(position));
259 } 294 }
260 295
261 bool PepperWebPluginImpl::StartFind(const blink::WebString& search_text, 296 bool PepperWebPluginImpl::StartFind(const blink::WebString& search_text,
262 bool case_sensitive, 297 bool case_sensitive,
263 int identifier) { 298 int identifier) {
299 // Re-entrancy may cause JS to try to execute script on the plugin before it
300 // is fully initialized. See: crbug.com/715747.
301 if (!instance_)
302 return false;
264 return instance_->StartFind(search_text.Utf8(), case_sensitive, identifier); 303 return instance_->StartFind(search_text.Utf8(), case_sensitive, identifier);
265 } 304 }
266 305
267 void PepperWebPluginImpl::SelectFindResult(bool forward, int identifier) { 306 void PepperWebPluginImpl::SelectFindResult(bool forward, int identifier) {
268 instance_->SelectFindResult(forward, identifier); 307 // Re-entrancy may cause JS to try to execute script on the plugin before it
308 // is fully initialized. See: crbug.com/715747.
309 if (instance_)
310 instance_->SelectFindResult(forward, identifier);
269 } 311 }
270 312
271 void PepperWebPluginImpl::StopFind() { 313 void PepperWebPluginImpl::StopFind() {
272 instance_->StopFind(); 314 // Re-entrancy may cause JS to try to execute script on the plugin before it
315 // is fully initialized. See: crbug.com/715747.
316 if (instance_)
317 instance_->StopFind();
273 } 318 }
274 319
275 bool PepperWebPluginImpl::SupportsPaginatedPrint() { 320 bool PepperWebPluginImpl::SupportsPaginatedPrint() {
321 // Re-entrancy may cause JS to try to execute script on the plugin before it
322 // is fully initialized. See: crbug.com/715747.
323 if (!instance_)
324 return false;
276 return instance_->SupportsPrintInterface(); 325 return instance_->SupportsPrintInterface();
277 } 326 }
278 327
279 bool PepperWebPluginImpl::IsPrintScalingDisabled() { 328 bool PepperWebPluginImpl::IsPrintScalingDisabled() {
329 // Re-entrancy may cause JS to try to execute script on the plugin before it
330 // is fully initialized. See: crbug.com/715747.
331 if (!instance_)
332 return false;
280 return instance_->IsPrintScalingDisabled(); 333 return instance_->IsPrintScalingDisabled();
281 } 334 }
282 335
283 int PepperWebPluginImpl::PrintBegin(const WebPrintParams& print_params) { 336 int PepperWebPluginImpl::PrintBegin(const WebPrintParams& print_params) {
337 // Re-entrancy may cause JS to try to execute script on the plugin before it
338 // is fully initialized. See: crbug.com/715747.
339 if (!instance_)
340 return 0;
284 return instance_->PrintBegin(print_params); 341 return instance_->PrintBegin(print_params);
285 } 342 }
286 343
287 void PepperWebPluginImpl::PrintPage(int page_number, blink::WebCanvas* canvas) { 344 void PepperWebPluginImpl::PrintPage(int page_number, blink::WebCanvas* canvas) {
288 instance_->PrintPage(page_number, canvas); 345 // Re-entrancy may cause JS to try to execute script on the plugin before it
346 // is fully initialized. See: crbug.com/715747.
347 if (instance_)
348 instance_->PrintPage(page_number, canvas);
289 } 349 }
290 350
291 void PepperWebPluginImpl::PrintEnd() { 351 void PepperWebPluginImpl::PrintEnd() {
292 instance_->PrintEnd(); 352 // Re-entrancy may cause JS to try to execute script on the plugin before it
353 // is fully initialized. See: crbug.com/715747.
354 if (instance_)
355 instance_->PrintEnd();
293 } 356 }
294 357
295 bool PepperWebPluginImpl::GetPrintPresetOptionsFromDocument( 358 bool PepperWebPluginImpl::GetPrintPresetOptionsFromDocument(
296 blink::WebPrintPresetOptions* preset_options) { 359 blink::WebPrintPresetOptions* preset_options) {
360 // Re-entrancy may cause JS to try to execute script on the plugin before it
361 // is fully initialized. See: crbug.com/715747.
362 if (!instance_)
363 return false;
297 return instance_->GetPrintPresetOptionsFromDocument(preset_options); 364 return instance_->GetPrintPresetOptionsFromDocument(preset_options);
298 } 365 }
299 366
300 bool PepperWebPluginImpl::CanRotateView() { 367 bool PepperWebPluginImpl::CanRotateView() {
368 // Re-entrancy may cause JS to try to execute script on the plugin before it
369 // is fully initialized. See: crbug.com/715747.
370 if (!instance_)
371 return false;
301 return instance_->CanRotateView(); 372 return instance_->CanRotateView();
302 } 373 }
303 374
304 void PepperWebPluginImpl::RotateView(RotationType type) { 375 void PepperWebPluginImpl::RotateView(RotationType type) {
305 instance_->RotateView(type); 376 // Re-entrancy may cause JS to try to execute script on the plugin before it
377 // is fully initialized. See: crbug.com/715747.
378 if (instance_)
379 instance_->RotateView(type);
306 } 380 }
307 381
308 bool PepperWebPluginImpl::IsPlaceholder() { 382 bool PepperWebPluginImpl::IsPlaceholder() {
309 return false; 383 return false;
310 } 384 }
311 385
312 } // namespace content 386 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698