From 9e9ae7296cfed7bfc612b0e3eeef7ad0c936b1ba Mon Sep 17 00:00:00 2001 From: "dcheng@chromium.org" Date: Fri, 3 Jan 2014 22:18:53 +0000 Subject: [PATCH] Override default implementation of createChildFrame() for print preview. https://src.chromium.org/viewvc/blink?view=rev&revision=164135 updated Blink to remove a transitional hack that was implemented to help us change the way frame lifetimes were managed. However, as a result, Blink now always assume that createChildFrame() will return a non-null value. WebFrameClients that expect to ever create child frames must override this method and frameDetached() if they don't want to crash. BUG=330994 R=boliu@chromium.org, scottbyer@chromium.org Review URL: https://codereview.chromium.org/122553002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@242941 0039d316-1c4b-4281-b951-d872f2087c98 --- .../renderer/print_web_view_helper.cc | 17 +++++++++++++++-- .../renderer/printing/print_web_view_helper.cc | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/android_webview/renderer/print_web_view_helper.cc b/android_webview/renderer/print_web_view_helper.cc index c22b0655c2d29e..dbf59e1d040013 100644 --- a/android_webview/renderer/print_web_view_helper.cc +++ b/android_webview/renderer/print_web_view_helper.cc @@ -534,9 +534,13 @@ class PrepareFrameAndViewForPrint : public blink::WebViewClient, // blink::WebViewClient override: virtual void didStopLoading(); - virtual void CallOnReady(); + // blink::WebFrameClient override: + virtual blink::WebFrame* createChildFrame(blink::WebFrame* parent, + const blink::WebString& name); + virtual void frameDetached(blink::WebFrame* frame); private: + void CallOnReady(); void ResizeForPrinting(); void RestoreSize(); void CopySelection(const WebPreferences& preferences); @@ -669,6 +673,16 @@ void PrepareFrameAndViewForPrint::didStopLoading() { weak_ptr_factory_.GetWeakPtr())); } +blink::WebFrame* PrepareFrameAndViewForPrint::createChildFrame( + blink::WebFrame* parent, + const blink::WebString& name) { + return blink::WebFrame::create(this); +} + +void PrepareFrameAndViewForPrint::frameDetached(blink::WebFrame* frame) { + frame->close(); +} + void PrepareFrameAndViewForPrint::CallOnReady() { return on_ready_.Run(); // Can delete |this|. } @@ -704,7 +718,6 @@ void PrepareFrameAndViewForPrint::FinishPrinting() { DCHECK(!frame->isLoading()); owns_web_view_ = false; web_view->close(); - frame->close(); } } frame_.Reset(NULL); diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc index a53c8228cb4bb9..525ef71c8f83be 100644 --- a/chrome/renderer/printing/print_web_view_helper.cc +++ b/chrome/renderer/printing/print_web_view_helper.cc @@ -529,9 +529,13 @@ class PrepareFrameAndViewForPrint : public blink::WebViewClient, // blink::WebViewClient override: virtual void didStopLoading(); - virtual void CallOnReady(); + // blink::WebFrameClient override: + virtual blink::WebFrame* createChildFrame(blink::WebFrame* parent, + const blink::WebString& name); + virtual void frameDetached(blink::WebFrame* frame); private: + void CallOnReady(); void ResizeForPrinting(); void RestoreSize(); void CopySelection(const WebPreferences& preferences); @@ -664,6 +668,16 @@ void PrepareFrameAndViewForPrint::didStopLoading() { weak_ptr_factory_.GetWeakPtr())); } +blink::WebFrame* PrepareFrameAndViewForPrint::createChildFrame( + blink::WebFrame* parent, + const blink::WebString& name) { + return blink::WebFrame::create(this); +} + +void PrepareFrameAndViewForPrint::frameDetached(blink::WebFrame* frame) { + frame->close(); +} + void PrepareFrameAndViewForPrint::CallOnReady() { return on_ready_.Run(); // Can delete |this|. } @@ -699,7 +713,6 @@ void PrepareFrameAndViewForPrint::FinishPrinting() { DCHECK(!frame->isLoading()); owns_web_view_ = false; web_view->close(); - frame->close(); } } frame_.Reset(NULL);