diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
commit | 09911bf300f1a419907a9412154760efd0b7abc3 (patch) | |
tree | f131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/views/html_dialog_view.cc | |
parent | 586acc5fe142f498261f52c66862fa417c3d52d2 (diff) | |
download | chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2 |
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/html_dialog_view.cc')
-rw-r--r-- | chrome/browser/views/html_dialog_view.cc | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/chrome/browser/views/html_dialog_view.cc b/chrome/browser/views/html_dialog_view.cc new file mode 100644 index 0000000..1be835f --- /dev/null +++ b/chrome/browser/views/html_dialog_view.cc @@ -0,0 +1,201 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "chrome/browser/browser.h" +#include "chrome/browser/views/html_dialog_view.h" + +#include "chrome/views/window.h" + +//////////////////////////////////////////////////////////////////////////////// +// HtmlDialogView, public: + +HtmlDialogView::HtmlDialogView(Browser* parent_browser, + Profile* profile, + HtmlDialogContentsDelegate* delegate) + : DOMView(delegate->GetDialogContentURL()), + dialog_(NULL), + parent_browser_(parent_browser), + profile_(profile), + delegate_(delegate) { + DCHECK(parent_browser); + DCHECK(profile); +} + +HtmlDialogView::~HtmlDialogView() { +} + +//////////////////////////////////////////////////////////////////////////////// +// HtmlDialogView, ChromeViews::View implementation: + +void HtmlDialogView::GetPreferredSize(CSize *out) { + delegate_->GetDialogSize(out); +} + +//////////////////////////////////////////////////////////////////////////////// +// HtmlDialogView, ChromeViews::WindowDelegate implementation: + +bool HtmlDialogView::CanResize() const { + return true; +} + +bool HtmlDialogView::IsModal() const { + return delegate_->IsModal(); +} + +std::wstring HtmlDialogView::GetWindowTitle() const { + return L"Google Gears"; +} + +void HtmlDialogView::WindowClosing() { + // If we still have a delegate that means we haven't notified it of the + // dialog closing. This happens if the user clicks the Close button on the + // dialog. + if (delegate_) + OnDialogClosed(""); +} + +//////////////////////////////////////////////////////////////////////////////// +// HtmlDialogContentsDelegate implementation: + +GURL HtmlDialogView::GetDialogContentURL() const { + return delegate_->GetDialogContentURL(); +} + +void HtmlDialogView::GetDialogSize(CSize* size) const { + return delegate_->GetDialogSize(size); +} + +std::string HtmlDialogView::GetDialogArgs() const { + return delegate_->GetDialogArgs(); +} + +void HtmlDialogView::OnDialogClosed(const std::string& json_retval) { + delegate_->OnDialogClosed(json_retval); + delegate_ = NULL; // We will not communicate further with the delegate. + dialog_->Close(); +} + +//////////////////////////////////////////////////////////////////////////////// +// PageNavigator implementation: +void HtmlDialogView::OpenURLFromTab(TabContents* source, + const GURL& url, + WindowOpenDisposition disposition, + PageTransition::Type transition) { + // Force all links to open in a new window, ignoring the incoming + // disposition. This is a tabless, modal dialog so we can't just + // open it in the current frame. + parent_browser_->OpenURLFromTab(source, url, NEW_WINDOW, transition); +} + +//////////////////////////////////////////////////////////////////////////////// +// TabContentsDelegate implementation: + +void HtmlDialogView::NavigationStateChanged(const TabContents* source, + unsigned changed_flags) { + // We shouldn't receive any NavigationStateChanged except the first + // one, which we ignore because we're a dialog box. +} + +void HtmlDialogView::ReplaceContents(TabContents* source, + TabContents* new_contents) { +} + +void HtmlDialogView::AddNewContents(TabContents* source, + TabContents* new_contents, + WindowOpenDisposition disposition, + const gfx::Rect& initial_pos, + bool user_gesture) { + parent_browser_->AddNewContents( + source, new_contents, NEW_WINDOW, initial_pos, user_gesture); +} + +void HtmlDialogView::ActivateContents(TabContents* contents) { + // We don't do anything here because there's only one TabContents in + // this frame and we don't have a TabStripModel. +} + +void HtmlDialogView::LoadingStateChanged(TabContents* source) { + // We don't care about this notification +} + +void HtmlDialogView::CloseContents(TabContents* source) { + // We receive this message but don't handle it because we really do the + // cleanup in OnDialogClosed(). +} + +void HtmlDialogView::MoveContents(TabContents* source, const gfx::Rect& pos) { + // The contained web page wishes to resize itself. We let it do this because + // if it's a dialog we know about, we trust it not to be mean to the user. + + // Determine the size the window containing the dialog at its requested size. + gfx::Size window_size = + dialog_->CalculateWindowSizeForClientSize(pos.size()); + + // Actually size the window. + CRect vc_bounds; + GetViewContainer()->GetBounds(&vc_bounds, true); + gfx::Rect bounds(vc_bounds.left, vc_bounds.top, window_size.width(), + window_size.height()); + dialog_->SetBounds(bounds); +} + +bool HtmlDialogView::IsPopup(TabContents* source) { + // This needs to return true so that we are allowed to be resized by our + // contents. + return true; +} + +void HtmlDialogView::ToolbarSizeChanged(TabContents* source, bool is_animating) { + Layout(); +} + +void HtmlDialogView::URLStarredChanged(TabContents* source, bool starred) { + // We don't have a visible star to click in the window. + NOTREACHED(); +} + +void HtmlDialogView::UpdateTargetURL(TabContents* source, const GURL& url) { + // Ignored. +} + +//////////////////////////////////////////////////////////////////////////////// +// HtmlDialogView: + +void HtmlDialogView::InitDialog(ChromeViews::Window* dialog) { + dialog_ = dialog; + + // Now Init the DOMView. This view runs in its own process to render the html. + DOMView::Init(profile_, NULL); + + // Make sure this new TabContents we just created in Init() knows about us. + DCHECK(host_->type() == TAB_CONTENTS_HTML_DIALOG); + HtmlDialogContents* host = static_cast<HtmlDialogContents*>(host_); + host->Init(this); + host->set_delegate(this); +} |