diff options
author | lazyboy@chromium.org <lazyboy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-04 22:29:16 +0000 |
---|---|---|
committer | lazyboy@chromium.org <lazyboy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-04 22:29:16 +0000 |
commit | ac191cc25ef58feb7f35af8aac1c766e87dbc38f (patch) | |
tree | 2d67ec541de559d386c2ca107cbde0cbe70ab0ef | |
parent | f622808bd73bdecf2b7c0edc22de0374c33fb6ac (diff) | |
download | chromium_src-ac191cc25ef58feb7f35af8aac1c766e87dbc38f.zip chromium_src-ac191cc25ef58feb7f35af8aac1c766e87dbc38f.tar.gz chromium_src-ac191cc25ef58feb7f35af8aac1c766e87dbc38f.tar.bz2 |
Merge 276372 "Fix print preview dialog for <webview>."
> Fix print preview dialog for <webview>.
>
> Make constrained window use embedder's native window
> (through its WebContents) instead of using webview's.
>
> After print preview got enabled by default, the code
> trying to bring up print preview dialog (a constrained
> window) started crashing the browser.
>
> Original bug 286487
> BUG=375987
> Test=In chromeos device/LinuxAura/Mac: load the sample
> browser app
> https://github.com/GoogleChrome/chrome-app-samples/tree/master/webview-samples/browser
> Navigate to a page that calls window.print()
> http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_print
> Click "Print this page" to trigger window.print() inside
> webview.
> It should
> 1) not crash
> 2) correctly show the preview and print the contents of
> the webview, not the entire app. This
> means it shouldn't print the chrome (address bar/buttons etc.)
> of the browser sample.
>
> Review URL: https://codereview.chromium.org/321193003
TBR=lazyboy@chromium.org
Review URL: https://codereview.chromium.org/365323003
git-svn-id: svn://svn.chromium.org/chrome/branches/1985/src@281449 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/cocoa/constrained_web_dialog_delegate_mac.mm | 5 | ||||
-rw-r--r-- | chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/chrome/browser/ui/cocoa/constrained_web_dialog_delegate_mac.mm b/chrome/browser/ui/cocoa/constrained_web_dialog_delegate_mac.mm index 9ec3864..0843caa 100644 --- a/chrome/browser/ui/cocoa/constrained_web_dialog_delegate_mac.mm +++ b/chrome/browser/ui/cocoa/constrained_web_dialog_delegate_mac.mm @@ -7,6 +7,7 @@ #import <Cocoa/Cocoa.h> #include "base/mac/scoped_nsobject.h" +#include "chrome/browser/guest_view/web_view/web_view_guest.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_window.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h" @@ -130,6 +131,10 @@ ConstrainedWebDialogDelegate* CreateConstrainedWebDialog( WebDialogDelegate* delegate, WebDialogWebContentsDelegate* tab_delegate, content::WebContents* web_contents) { + WebViewGuest* guest = WebViewGuest::FromWebContents(web_contents); + if (guest && guest->embedder_web_contents()) + web_contents = guest->embedder_web_contents(); + // Deleted when the dialog closes. ConstrainedWebDialogDelegateViewMac* constrained_delegate = new ConstrainedWebDialogDelegateViewMac( diff --git a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc index c3042b0..0cc0474 100644 --- a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc +++ b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc @@ -5,6 +5,7 @@ #include "chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "components/web_modal/web_contents_modal_dialog_host.h" #include "components/web_modal/web_contents_modal_dialog_manager.h" #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" @@ -202,6 +203,12 @@ ConstrainedWebDialogDelegate* CreateConstrainedWebDialog( WebDialogDelegate* delegate, WebDialogWebContentsDelegate* tab_delegate, content::WebContents* web_contents) { + WebViewGuest* guest = WebViewGuest::FromWebContents(web_contents); + content::WebContents* embedder_web_contents = + guest ? guest->embedder_web_contents() : NULL; + if (embedder_web_contents) + web_contents = embedder_web_contents; + ConstrainedWebDialogDelegateViewViews* constrained_delegate = new ConstrainedWebDialogDelegateViewViews( browser_context, delegate, tab_delegate); |