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 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h" 6 7#include <string> 8 9#include "chrome/browser/profiles/profile.h" 10#include "chrome/browser/renderer_preferences_util.h" 11#include "chrome/browser/ui/webui/chrome_web_contents_handler.h" 12#include "content/public/browser/render_view_host.h" 13#include "content/public/browser/web_contents.h" 14#include "ipc/ipc_message.h" 15#include "ui/web_dialogs/web_dialog_delegate.h" 16#include "ui/web_dialogs/web_dialog_ui.h" 17 18using content::NativeWebKeyboardEvent; 19using content::WebContents; 20using ui::WebDialogDelegate; 21using ui::WebDialogWebContentsDelegate; 22 23ConstrainedWebDialogDelegateBase::ConstrainedWebDialogDelegateBase( 24 content::BrowserContext* browser_context, 25 WebDialogDelegate* delegate, 26 WebDialogWebContentsDelegate* tab_delegate) 27 : WebDialogWebContentsDelegate(browser_context, 28 new ChromeWebContentsHandler), 29 web_dialog_delegate_(delegate), 30 closed_via_webui_(false), 31 release_contents_on_close_(false) { 32 CHECK(delegate); 33 web_contents_.reset( 34 WebContents::Create(WebContents::CreateParams(browser_context))); 35 if (tab_delegate) { 36 override_tab_delegate_.reset(tab_delegate); 37 web_contents_->SetDelegate(tab_delegate); 38 } else { 39 web_contents_->SetDelegate(this); 40 } 41 renderer_preferences_util::UpdateFromSystemSettings( 42 web_contents_->GetMutableRendererPrefs(), 43 Profile::FromBrowserContext(browser_context)); 44 web_contents_->GetRenderViewHost()->SyncRendererPrefs(); 45 46 // Set |this| as a delegate so the ConstrainedWebDialogUI can retrieve it. 47 ConstrainedWebDialogUI::SetConstrainedDelegate(web_contents_.get(), this); 48 49 web_contents_->GetController().LoadURL(delegate->GetDialogContentURL(), 50 content::Referrer(), 51 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, 52 std::string()); 53} 54 55ConstrainedWebDialogDelegateBase::~ConstrainedWebDialogDelegateBase() { 56 if (release_contents_on_close_) 57 ignore_result(web_contents_.release()); 58} 59 60const WebDialogDelegate* 61 ConstrainedWebDialogDelegateBase::GetWebDialogDelegate() const { 62 return web_dialog_delegate_.get(); 63} 64 65WebDialogDelegate* 66 ConstrainedWebDialogDelegateBase::GetWebDialogDelegate() { 67 return web_dialog_delegate_.get(); 68} 69 70void ConstrainedWebDialogDelegateBase::OnDialogCloseFromWebUI() { 71 closed_via_webui_ = true; 72 CloseContents(web_contents_.get()); 73} 74 75bool ConstrainedWebDialogDelegateBase::closed_via_webui() const { 76 return closed_via_webui_; 77} 78 79void ConstrainedWebDialogDelegateBase::ReleaseWebContentsOnDialogClose() { 80 release_contents_on_close_ = true; 81} 82 83web_modal::NativeWebContentsModalDialog 84 ConstrainedWebDialogDelegateBase::GetNativeDialog() { 85 NOTREACHED(); 86 return NULL; 87} 88 89WebContents* ConstrainedWebDialogDelegateBase::GetWebContents() { 90 return web_contents_.get(); 91} 92 93void ConstrainedWebDialogDelegateBase::HandleKeyboardEvent( 94 content::WebContents* source, 95 const NativeWebKeyboardEvent& event) { 96} 97