Commit c7a82795 authored by pdr's avatar pdr Committed by Commit bot

Null check instance_ in PepperWebPluginImpl to prevent re-entry NPE

This patch fixes many NPEs in PepperWebPluginImpl where Sergeant
Pepper forgot to check the instance before using it. The instance
may be null due to re-entry and a comment has been added about this.

BUG=715747

Review-Url: https://codereview.chromium.org/2835193008
Cr-Commit-Position: refs/heads/master@{#467817}
parent ea122609
...@@ -183,7 +183,9 @@ v8::Local<v8::Object> PepperWebPluginImpl::V8ScriptableObject( ...@@ -183,7 +183,9 @@ v8::Local<v8::Object> PepperWebPluginImpl::V8ScriptableObject(
} }
void PepperWebPluginImpl::Paint(WebCanvas* canvas, const WebRect& rect) { void PepperWebPluginImpl::Paint(WebCanvas* canvas, const WebRect& rect) {
if (!instance_->FlashIsFullscreenOrPending()) // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_ && !instance_->FlashIsFullscreenOrPending())
instance_->Paint(canvas, plugin_rect_, rect); instance_->Paint(canvas, plugin_rect_, rect);
} }
...@@ -200,7 +202,10 @@ void PepperWebPluginImpl::UpdateGeometry( ...@@ -200,7 +202,10 @@ void PepperWebPluginImpl::UpdateGeometry(
void PepperWebPluginImpl::UpdateFocus(bool focused, void PepperWebPluginImpl::UpdateFocus(bool focused,
blink::WebFocusType focus_type) { blink::WebFocusType focus_type) {
instance_->SetWebKitFocus(focused); // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_)
instance_->SetWebKitFocus(focused);
} }
void PepperWebPluginImpl::UpdateVisibility(bool visible) {} void PepperWebPluginImpl::UpdateVisibility(bool visible) {}
...@@ -208,7 +213,9 @@ void PepperWebPluginImpl::UpdateVisibility(bool visible) {} ...@@ -208,7 +213,9 @@ void PepperWebPluginImpl::UpdateVisibility(bool visible) {}
blink::WebInputEventResult PepperWebPluginImpl::HandleInputEvent( blink::WebInputEventResult PepperWebPluginImpl::HandleInputEvent(
const blink::WebInputEvent& event, const blink::WebInputEvent& event,
blink::WebCursorInfo& cursor_info) { blink::WebCursorInfo& cursor_info) {
if (instance_->FlashIsFullscreenOrPending()) // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_ || instance_->FlashIsFullscreenOrPending())
return blink::WebInputEventResult::kNotHandled; return blink::WebInputEventResult::kNotHandled;
return instance_->HandleInputEvent(event, &cursor_info) return instance_->HandleInputEvent(event, &cursor_info)
? blink::WebInputEventResult::kHandledApplication ? blink::WebInputEventResult::kHandledApplication
...@@ -217,11 +224,19 @@ blink::WebInputEventResult PepperWebPluginImpl::HandleInputEvent( ...@@ -217,11 +224,19 @@ blink::WebInputEventResult PepperWebPluginImpl::HandleInputEvent(
void PepperWebPluginImpl::DidReceiveResponse( void PepperWebPluginImpl::DidReceiveResponse(
const blink::WebURLResponse& response) { const blink::WebURLResponse& response) {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return;
DCHECK(!instance_->document_loader()); DCHECK(!instance_->document_loader());
instance_->HandleDocumentLoad(response); instance_->HandleDocumentLoad(response);
} }
void PepperWebPluginImpl::DidReceiveData(const char* data, int data_length) { void PepperWebPluginImpl::DidReceiveData(const char* data, int data_length) {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return;
blink::WebAssociatedURLLoaderClient* document_loader = blink::WebAssociatedURLLoaderClient* document_loader =
instance_->document_loader(); instance_->document_loader();
if (document_loader) if (document_loader)
...@@ -229,6 +244,10 @@ void PepperWebPluginImpl::DidReceiveData(const char* data, int data_length) { ...@@ -229,6 +244,10 @@ void PepperWebPluginImpl::DidReceiveData(const char* data, int data_length) {
} }
void PepperWebPluginImpl::DidFinishLoading() { void PepperWebPluginImpl::DidFinishLoading() {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return;
blink::WebAssociatedURLLoaderClient* document_loader = blink::WebAssociatedURLLoaderClient* document_loader =
instance_->document_loader(); instance_->document_loader();
if (document_loader) if (document_loader)
...@@ -236,6 +255,10 @@ void PepperWebPluginImpl::DidFinishLoading() { ...@@ -236,6 +255,10 @@ void PepperWebPluginImpl::DidFinishLoading() {
} }
void PepperWebPluginImpl::DidFailLoading(const blink::WebURLError& error) { void PepperWebPluginImpl::DidFailLoading(const blink::WebURLError& error) {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return;
blink::WebAssociatedURLLoaderClient* document_loader = blink::WebAssociatedURLLoaderClient* document_loader =
instance_->document_loader(); instance_->document_loader();
if (document_loader) if (document_loader)
...@@ -247,62 +270,113 @@ bool PepperWebPluginImpl::HasSelection() const { ...@@ -247,62 +270,113 @@ bool PepperWebPluginImpl::HasSelection() const {
} }
WebString PepperWebPluginImpl::SelectionAsText() const { WebString PepperWebPluginImpl::SelectionAsText() const {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return WebString();
return WebString::FromUTF16(instance_->GetSelectedText(false)); return WebString::FromUTF16(instance_->GetSelectedText(false));
} }
WebString PepperWebPluginImpl::SelectionAsMarkup() const { WebString PepperWebPluginImpl::SelectionAsMarkup() const {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return WebString();
return WebString::FromUTF16(instance_->GetSelectedText(true)); return WebString::FromUTF16(instance_->GetSelectedText(true));
} }
WebURL PepperWebPluginImpl::LinkAtPosition(const WebPoint& position) const { WebURL PepperWebPluginImpl::LinkAtPosition(const WebPoint& position) const {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return GURL();
return GURL(instance_->GetLinkAtPosition(position)); return GURL(instance_->GetLinkAtPosition(position));
} }
bool PepperWebPluginImpl::StartFind(const blink::WebString& search_text, bool PepperWebPluginImpl::StartFind(const blink::WebString& search_text,
bool case_sensitive, bool case_sensitive,
int identifier) { int identifier) {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return false;
return instance_->StartFind(search_text.Utf8(), case_sensitive, identifier); return instance_->StartFind(search_text.Utf8(), case_sensitive, identifier);
} }
void PepperWebPluginImpl::SelectFindResult(bool forward, int identifier) { void PepperWebPluginImpl::SelectFindResult(bool forward, int identifier) {
instance_->SelectFindResult(forward, identifier); // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_)
instance_->SelectFindResult(forward, identifier);
} }
void PepperWebPluginImpl::StopFind() { void PepperWebPluginImpl::StopFind() {
instance_->StopFind(); // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_)
instance_->StopFind();
} }
bool PepperWebPluginImpl::SupportsPaginatedPrint() { bool PepperWebPluginImpl::SupportsPaginatedPrint() {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return false;
return instance_->SupportsPrintInterface(); return instance_->SupportsPrintInterface();
} }
bool PepperWebPluginImpl::IsPrintScalingDisabled() { bool PepperWebPluginImpl::IsPrintScalingDisabled() {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return false;
return instance_->IsPrintScalingDisabled(); return instance_->IsPrintScalingDisabled();
} }
int PepperWebPluginImpl::PrintBegin(const WebPrintParams& print_params) { int PepperWebPluginImpl::PrintBegin(const WebPrintParams& print_params) {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return 0;
return instance_->PrintBegin(print_params); return instance_->PrintBegin(print_params);
} }
void PepperWebPluginImpl::PrintPage(int page_number, blink::WebCanvas* canvas) { void PepperWebPluginImpl::PrintPage(int page_number, blink::WebCanvas* canvas) {
instance_->PrintPage(page_number, canvas); // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_)
instance_->PrintPage(page_number, canvas);
} }
void PepperWebPluginImpl::PrintEnd() { void PepperWebPluginImpl::PrintEnd() {
instance_->PrintEnd(); // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_)
instance_->PrintEnd();
} }
bool PepperWebPluginImpl::GetPrintPresetOptionsFromDocument( bool PepperWebPluginImpl::GetPrintPresetOptionsFromDocument(
blink::WebPrintPresetOptions* preset_options) { blink::WebPrintPresetOptions* preset_options) {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return false;
return instance_->GetPrintPresetOptionsFromDocument(preset_options); return instance_->GetPrintPresetOptionsFromDocument(preset_options);
} }
bool PepperWebPluginImpl::CanRotateView() { bool PepperWebPluginImpl::CanRotateView() {
// Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (!instance_)
return false;
return instance_->CanRotateView(); return instance_->CanRotateView();
} }
void PepperWebPluginImpl::RotateView(RotationType type) { void PepperWebPluginImpl::RotateView(RotationType type) {
instance_->RotateView(type); // Re-entrancy may cause JS to try to execute script on the plugin before it
// is fully initialized. See: crbug.com/715747.
if (instance_)
instance_->RotateView(type);
} }
bool PepperWebPluginImpl::IsPlaceholder() { bool PepperWebPluginImpl::IsPlaceholder() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment