summaryrefslogtreecommitdiffstats
path: root/chrome/browser/tab_contents.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/tab_contents.cc')
-rw-r--r--chrome/browser/tab_contents.cc73
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() {