diff options
Diffstat (limited to 'chrome/browser/tab_contents.cc')
-rw-r--r-- | chrome/browser/tab_contents.cc | 73 |
1 files changed, 23 insertions, 50 deletions
diff --git a/chrome/browser/tab_contents.cc b/chrome/browser/tab_contents.cc index 931d415..0215ec7 100644 --- a/chrome/browser/tab_contents.cc +++ b/chrome/browser/tab_contents.cc @@ -8,6 +8,7 @@ #include "chrome/browser/navigation_entry.h" #include "chrome/browser/views/download_shelf_view.h" #include "chrome/browser/views/download_started_animation.h" +#include "chrome/browser/views/blocked_popup_container.h" #include "chrome/browser/web_contents.h" #include "chrome/browser/tab_contents_delegate.h" #include "chrome/common/l10n_util.h" @@ -43,6 +44,7 @@ TabContents::TabContents(TabContentsType type) saved_location_bar_state_(NULL), shelf_visible_(false), max_page_id_(-1), + blocked_popups_(NULL), capturing_contents_(false) { last_focused_view_storage_id_ = views::ViewStorage::GetSharedInstance()->CreateStorageID(); @@ -290,25 +292,25 @@ void TabContents::AddNewContents(TabContents* new_contents, void TabContents::AddConstrainedPopup(TabContents* new_contents, const gfx::Rect& initial_pos) { - ConstrainedWindow* window = - ConstrainedWindow::CreateConstrainedPopup( - this, initial_pos, new_contents); - child_windows_.push_back(window); + if (!blocked_popups_) { + CRect client_rect; + GetClientRect(GetContainerHWND(), &client_rect); + gfx::Point anchor_position( + client_rect.Width() - + views::NativeScrollBar::GetVerticalScrollBarWidth(), + client_rect.Height()); + + blocked_popups_ = BlockedPopupContainer::Create( + this, profile(), anchor_position); + child_windows_.push_back(blocked_popups_); + } - CRect client_rect; - GetClientRect(GetContainerHWND(), &client_rect); - gfx::Size new_size(client_rect.Width(), client_rect.Height()); - RepositionSupressedPopupsToFit(new_size); + blocked_popups_->AddTabContents(new_contents, initial_pos); } void TabContents::CloseAllSuppressedPopups() { - // Close all auto positioned child windows to "clean up" the workspace. - int count = static_cast<int>(child_windows_.size()); - for (int i = count - 1; i >= 0; --i) { - ConstrainedWindow* window = child_windows_.at(i); - if (window->IsSuppressedConstrainedWindow()) - window->CloseConstrainedWindow(); - } + if (blocked_popups_) + blocked_popups_->CloseAllPopups(); } void TabContents::Focus() { @@ -444,28 +446,15 @@ void TabContents::MigrateShelfViewFrom(TabContents* tab_contents) { tab_contents->ReleaseDownloadShelfView(); } -void TabContents::AddNewContents(ConstrainedWindow* window, - TabContents* new_contents, - WindowOpenDisposition disposition, - const gfx::Rect& initial_pos, - bool user_gesture) { - AddNewContents(new_contents, disposition, initial_pos, user_gesture); -} - -void TabContents::OpenURL(ConstrainedWindow* window, - const GURL& url, - const GURL& referrer, - WindowOpenDisposition disposition, - PageTransition::Type transition) { - OpenURL(url, referrer, disposition, transition); -} - void TabContents::WillClose(ConstrainedWindow* window) { ConstrainedWindowList::iterator it = find(child_windows_.begin(), child_windows_.end(), window); if (it != child_windows_.end()) child_windows_.erase(it); + if (window == blocked_popups_) + blocked_popups_ = NULL; + if (::IsWindow(GetContainerHWND())) { CRect client_rect; GetClientRect(GetContainerHWND(), &client_rect); @@ -474,19 +463,6 @@ void TabContents::WillClose(ConstrainedWindow* window) { } } -void TabContents::DetachContents(ConstrainedWindow* window, - TabContents* contents, - const gfx::Rect& contents_bounds, - const gfx::Point& mouse_pt, - int frame_component) { - WillClose(window); - if (delegate_) { - contents->DisassociateFromPopupCount(); - delegate_->StartDraggingDetachedContents( - this, contents, contents_bounds, mouse_pt, frame_component); - } -} - void TabContents::DidMoveOrResize(ConstrainedWindow* window) { UpdateWindow(GetContainerHWND()); } @@ -532,12 +508,9 @@ void TabContents::RepositionSupressedPopupsToFit(const gfx::Size& new_size) { new_size.width() - views::NativeScrollBar::GetVerticalScrollBarWidth(), new_size.height()); - int window_count = static_cast<int>(child_windows_.size()); - for (int i = window_count - 1; i >= 0; --i) { - ConstrainedWindow* window = child_windows_.at(i); - if (window->IsSuppressedConstrainedWindow()) - window->RepositionConstrainedWindowTo(anchor_position); - } + + if (blocked_popups_) + blocked_popups_->RepositionConstrainedWindowTo(anchor_position); } void TabContents::ReleaseDownloadShelfView() { |